<?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>160125</bug_id>
          
          <creation_ts>2016-07-23 14:42:56 -0700</creation_ts>
          <short_desc>Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression</short_desc>
          <delta_ts>2017-02-03 15:22:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>160171</dependson>
    
    <dependson>161492</dependson>
    
    <dependson>161946</dependson>
          <blocked>161062</blocked>
    
    <blocked>159658</blocked>
    
    <blocked>161581</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>alecflett</cc>
    
    <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>bburg</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1213948</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-23 14:42:56 -0700</bug_when>
    <thetext>Things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213949</commentid>
    <comment_count>1</comment_count>
      <attachid>284422</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-23 14:43:27 -0700</bug_when>
    <thetext>Created attachment 284422
it begins!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213950</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-23 14:43:48 -0700</bug_when>
    <thetext>I&apos;ve audited JSObject.h and JSObjectInlines.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213986</commentid>
    <comment_count>3</comment_count>
      <attachid>284428</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-23 16:43:39 -0700</bug_when>
    <thetext>Created attachment 284428
I think that JSObject.cpp handles butterflies correctly now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214084</commentid>
    <comment_count>4</comment_count>
      <attachid>284455</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-24 16:23:46 -0700</bug_when>
    <thetext>Created attachment 284455
audited JSObject.cpp again and audited JSArray.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214277</commentid>
    <comment_count>5</comment_count>
      <attachid>284506</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-25 11:23:50 -0700</bug_when>
    <thetext>Created attachment 284506
started working on ButterflyInlines.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214372</commentid>
    <comment_count>6</comment_count>
      <attachid>284540</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-25 16:17:48 -0700</bug_when>
    <thetext>Created attachment 284540
audited PolymorphicAccess.cpp and DFGSpeculativeJIT64.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214380</commentid>
    <comment_count>7</comment_count>
      <attachid>284543</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-25 16:30:04 -0700</bug_when>
    <thetext>Created attachment 284543
started working on DFGSpeculativeJIT.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214384</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-25 16:36:25 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created attachment 284540 [details]
&gt; audited PolymorphicAccess.cpp and DFGSpeculativeJIT64.cpp
It&apos;s probably worth checking out InlineAccess.cpp though it should be OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214403</commentid>
    <comment_count>9</comment_count>
      <attachid>284550</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-25 17:04:48 -0700</bug_when>
    <thetext>Created attachment 284550
audited DFGSpeculativeJIT.cpp, 64.cpp, and 32_64.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214637</commentid>
    <comment_count>10</comment_count>
      <attachid>284621</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-26 13:28:46 -0700</bug_when>
    <thetext>Created attachment 284621
possibly done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214681</commentid>
    <comment_count>11</comment_count>
      <attachid>284635</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-26 14:54:01 -0700</bug_when>
    <thetext>Created attachment 284635
crashes for any interesting program

But at least it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214704</commentid>
    <comment_count>12</comment_count>
      <attachid>284642</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-26 15:10:38 -0700</bug_when>
    <thetext>Created attachment 284642
it ran some interesting programs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214945</commentid>
    <comment_count>13</comment_count>
      <attachid>284705</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-27 09:58:52 -0700</bug_when>
    <thetext>Created attachment 284705
passing so many tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214966</commentid>
    <comment_count>14</comment_count>
      <attachid>284709</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-27 10:58:15 -0700</bug_when>
    <thetext>Created attachment 284709
passing more tests than ever</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215020</commentid>
    <comment_count>15</comment_count>
      <attachid>284728</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-27 14:01:57 -0700</bug_when>
    <thetext>Created attachment 284728
starting to get quite solid</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215257</commentid>
    <comment_count>16</comment_count>
      <attachid>284788</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-28 10:37:34 -0700</bug_when>
    <thetext>Created attachment 284788
so awesome

I think that it&apos;s basically right.  I don&apos;t know what the perf is yet, since I&apos;m still playing in debug mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215379</commentid>
    <comment_count>17</comment_count>
      <attachid>284814</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-28 14:00:37 -0700</bug_when>
    <thetext>Created attachment 284814
passing even more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215392</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-28 14:19:54 -0700</bug_when>
    <thetext>Here&apos;s what&apos;s failing now in debug tests.  I haven&apos;t run internal tests or any benchmarks.


** The following JSC stress test failures have been introduced:
	jsc-layout-tests.yaml/js/script-tests/array-functions-non-arrays.js.layout
	jsc-layout-tests.yaml/js/script-tests/array-functions-non-arrays.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/array-functions-non-arrays.js.layout-ftl-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/array-functions-non-arrays.js.layout-ftl-no-cjit
	jsc-layout-tests.yaml/js/script-tests/array-functions-non-arrays.js.layout-no-cjit
	jsc-layout-tests.yaml/js/script-tests/array-functions-non-arrays.js.layout-no-ftl
	jsc-layout-tests.yaml/js/script-tests/array-functions-non-arrays.js.layout-no-llint
	mozilla-tests.yaml/js1_2/Array/general2.js.mozilla
	mozilla-tests.yaml/js1_2/Array/general2.js.mozilla-baseline
	mozilla-tests.yaml/js1_2/Array/general2.js.mozilla-dfg-eager-no-cjit-validate-phases
	mozilla-tests.yaml/js1_2/Array/general2.js.mozilla-ftl-eager-no-cjit-validate-phases
	mozilla-tests.yaml/js1_2/Array/general2.js.mozilla-llint
	mozilla-tests.yaml/js1_2/Array/general2.js.mozilla-no-ftl
	regress/script-tests/emscripten-cube2hash.js.always-trigger-copy-phase
	regress/script-tests/emscripten-cube2hash.js.default
	regress/script-tests/emscripten-cube2hash.js.dfg-eager
	regress/script-tests/emscripten-cube2hash.js.dfg-eager-no-cjit-validate
	regress/script-tests/emscripten-cube2hash.js.dfg-maximal-flush-validate-no-cjit
	regress/script-tests/emscripten-cube2hash.js.ftl-eager
	regress/script-tests/emscripten-cube2hash.js.ftl-eager-no-cjit
	regress/script-tests/emscripten-cube2hash.js.ftl-no-cjit-no-inline-validate
	regress/script-tests/emscripten-cube2hash.js.ftl-no-cjit-no-put-stack-validate
	regress/script-tests/emscripten-cube2hash.js.ftl-no-cjit-small-pool
	regress/script-tests/emscripten-cube2hash.js.ftl-no-cjit-validate-sampling-profiler
	regress/script-tests/emscripten-cube2hash.js.no-cjit-validate-phases
	regress/script-tests/emscripten-cube2hash.js.no-ftl
	regress/script-tests/emscripten-cube2hash.js.no-llint

Results for JSC stress tests:
    27 failures found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215670</commentid>
    <comment_count>19</comment_count>
      <attachid>284889</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 12:56:09 -0700</bug_when>
    <thetext>Created attachment 284889
passes all open source debug JSC tests

Hooray!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215694</commentid>
    <comment_count>20</comment_count>
      <attachid>284898</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 13:49:16 -0700</bug_when>
    <thetext>Created attachment 284898
fixed release build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215698</commentid>
    <comment_count>21</comment_count>
      <attachid>284899</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 14:09:49 -0700</bug_when>
    <thetext>Created attachment 284899
rebased patch with changelog

There are still a handful of internal fuzz test failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215764</commentid>
    <comment_count>22</comment_count>
      <attachid>284920</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 17:13:18 -0700</bug_when>
    <thetext>Created attachment 284920
fixing internal fuzz test failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215768</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-29 17:16:12 -0700</bug_when>
    <thetext>Attachment 284920 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
Total errors found: 2 in 71 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>1215773</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 17:38:04 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Attachment 284920 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before (
&gt; in while(  [whitespace/parens] [5]
&gt; ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before
&gt; ( in while(  [whitespace/parens] [5]
&gt; Total errors found: 2 in 71 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

It passes all internal release tests!!!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215774</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 17:38:27 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; Attachment 284920 [details] did not pass style-queue:
&gt; &gt; 
&gt; &gt; 
&gt; &gt; ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before (
&gt; &gt; in while(  [whitespace/parens] [5]
&gt; &gt; ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before
&gt; &gt; ( in while(  [whitespace/parens] [5]
&gt; &gt; Total errors found: 2 in 71 files
&gt; &gt; 
&gt; &gt; 
&gt; &gt; If any of these errors are false positives, please file a bug against
&gt; &gt; check-webkit-style.
&gt; 
&gt; It passes all internal release tests!!!!!

And as a bonus, it looks like it&apos;ll get a perfect score on EWS!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215776</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 17:52:16 -0700</bug_when>
    <thetext>Looks like Octane/deltablue crashes with this patch.  Internal tests didn&apos;t catch it probably because you have to run long enough to cause the bad GC thing to happen.

Also, this looks like a 1% SunSpider regression.

I&apos;ll investigate the deltablue crash first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215803</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 19:26:18 -0700</bug_when>
    <thetext>It appears that deltablue requires an FTL fast path allocation for the bug to happen.  It looks as though the GC swept over a butterfly that some object was still referring to.  At the time the GC tries to visit the butterfly, it&apos;s clear that the start of the butterfly has a freelist next pointer and the rest of it has been overwritten by my new poisoning pass, where sweeping overwrites the things it sweeps with dummy values.  Disabling either the FTL or forcing slow path allocations fixes it.

Also, the poisoning is catching tons of bugs in normal tests.  We probably want to run tests in a mode that does this poisoning.

So, I&apos;ve got a lot of problems to work through:

- 1% SunSpider regression
- deltablue crash due to FTL fast path allocation bug
- crashes when poison-sweeping is enabled, indicating a failure to clear butterflies in some places</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215804</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 19:34:36 -0700</bug_when>
    <thetext>It looks like disabling generational GC also causes deltablue to run correctly.  So, this may be a missing barrier!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215825</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-29 23:01:41 -0700</bug_when>
    <thetext>Oh man.  It looks like we&apos;re GCing in operationNewArrayWithSize, after allocating the butterfly but before allocating the object.  That GC works fine, but the *next* GC goes mad while trying to scan that object.  Between the two GCs, we sweep the block, and we find the butterfly&apos;s cell on the free list.

It&apos;s a bit strange that we then crash in GC rather than crashing on access to the butterfly.  Maybe it&apos;s because deltablue has this perverse pattern of allocating a ton of arrays using &quot;new Array()&quot; syntax, which happens to trigger this bug.

Once I realized that this is the scenario, I was puzzled why it didn&apos;t show up in other tests.  Turns out this is oddly difficult to trigger, because you need to do enough array allocations that you trigger slow path on average twice (because you have a 50% chance of doing GC in the butterfly allocation, which would be fine).  On top of that, you can&apos;t let those array allocations die immediately, because if they do, then it&apos;s OK that a subsequent sweep reuses their space.  Probably none of our other tests managed to make this happen.  Hopefully I can fix that.

Anyway, this implies that the bug is either in the conservative scan or it&apos;s some block management goof that I overlooked.  I&apos;ll investigate!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215885</commentid>
    <comment_count>30</comment_count>
      <attachid>284951</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-30 12:27:19 -0700</bug_when>
    <thetext>Created attachment 284951
fixed the deltablue bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215889</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-30 12:30:19 -0700</bug_when>
    <thetext>Attachment 284951 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 10 in 73 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>1215916</commentid>
    <comment_count>32</comment_count>
      <attachid>284959</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-30 17:53:14 -0700</bug_when>
    <thetext>Created attachment 284959
fixed a lot of bugs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215917</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-30 17:55:37 -0700</bug_when>
    <thetext>Attachment 284959 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 11 in 80 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>1215924</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-30 18:38:25 -0700</bug_when>
    <thetext>Well the initial performance does not look good at all:


Benchmark report for Octane on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r203920)
&quot;AuxButterflies&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r203920)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc()
between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution
times with 95% confidence intervals in milliseconds.

                           TipOfTree               AuxButterflies                                  

encrypt                 0.14851+-0.00109    ?     0.14944+-0.00207       ?
decrypt                 2.50351+-0.00858    !     2.66173+-0.06498       ! definitely 1.0632x slower
deltablue      x2       0.12423+-0.00291    ?     0.12831+-0.00150       ? might be 1.0329x slower
earley                  0.27189+-0.00125          0.27142+-0.00140       
boyer                   4.61240+-0.18630    ?     4.66443+-0.20767       ? might be 1.0113x slower
navier-stokes  x2       4.58228+-0.02339    ?     4.59065+-0.02027       ?
raytrace       x2       0.75334+-0.00821          0.74898+-0.00417       
richards       x2       0.07725+-0.00122          0.07651+-0.00131       
splay          x2       0.32439+-0.00806    !     0.35273+-0.00842       ! definitely 1.0873x slower
regexp         x2      15.27902+-0.44799    ?    15.98953+-0.76619       ? might be 1.0465x slower
pdfjs          x2      39.28188+-0.36968    !    41.32144+-0.65972       ! definitely 1.0519x slower
mandreel       x2      39.42430+-0.22918    ?    39.52220+-0.19200       ?
gbemu          x2      28.13394+-0.46532         28.07904+-0.08672       
closure                 0.45813+-0.00249    ?     0.45892+-0.00280       ?
jquery                  6.15395+-0.03520    ?     6.20382+-0.08116       ?
box2d          x2       8.63123+-0.06943    ?     8.65312+-0.05706       ?
zlib           x2     353.45955+-14.53490       346.99087+-14.45479        might be 1.0186x faster
typescript     x2     584.76957+-13.03125   !   609.30717+-4.58142       ! definitely 1.0420x slower

&lt;geometric&gt;             4.76032+-0.04368    !     4.84578+-0.01081       ! definitely 1.0180x slower


I will investigate!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215925</commentid>
    <comment_count>35</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-30 18:44:02 -0700</bug_when>
    <thetext>I bet that the problem is how we round up array lengths.  I think it causes the butterfly to usually waste once slot at the end of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215926</commentid>
    <comment_count>36</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-30 18:46:55 -0700</bug_when>
    <thetext>Wow, crazy!  It looks like the collector&apos;s heap size accounting is messed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215992</commentid>
    <comment_count>37</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-31 19:59:54 -0700</bug_when>
    <thetext>I fixed the accounting.  Now I have a splay speed-up but lots of other things are regressed.  I think it&apos;s because we have internal fragmentation, and I&apos;m working on fixing that.

Benchmark report for Octane on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r203920)
&quot;AuxButterflies&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r203920)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc()
between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution
times with 95% confidence intervals in milliseconds.

                           TipOfTree               AuxButterflies                                  

encrypt                 0.15060+-0.00148          0.14979+-0.00289       
decrypt                 2.53416+-0.03734    !     2.66511+-0.03232       ! definitely 1.0517x slower
deltablue      x2       0.12180+-0.00081    !     0.12857+-0.00149       ! definitely 1.0555x slower
earley                  0.26910+-0.00091    ?     0.27207+-0.00299       ? might be 1.0110x slower
boyer                   4.59272+-0.17746    ?     4.70175+-0.14550       ? might be 1.0237x slower
navier-stokes  x2       4.59859+-0.01503    ?     4.59885+-0.02636       ?
raytrace       x2       0.75150+-0.00519    ?     0.75435+-0.00537       ?
richards       x2       0.07768+-0.00149          0.07601+-0.00081         might be 1.0220x faster
splay          x2       0.32326+-0.00215    ^     0.30997+-0.00255       ^ definitely 1.0429x faster
regexp         x2      15.37102+-0.36116    !    16.52510+-0.25615       ! definitely 1.0751x slower
pdfjs          x2      39.57326+-0.42080    !    40.84356+-0.41645       ! definitely 1.0321x slower
mandreel       x2      39.63574+-0.28791    ?    39.68141+-0.29761       ?
gbemu          x2      27.98538+-0.26435    ?    28.11299+-0.07135       ?
closure                 0.45926+-0.00399    ?     0.46099+-0.00324       ?
jquery                  6.15764+-0.04981    ?     6.18408+-0.03466       ?
box2d          x2       8.67327+-0.13701    ?     8.72572+-0.08408       ?
zlib           x2     356.59756+-2.72695        352.08651+-12.80692        might be 1.0128x faster
typescript     x2     579.68669+-7.88175    !   607.01038+-4.03266       ! definitely 1.0471x slower

&lt;geometric&gt;             4.76350+-0.01556    !     4.82319+-0.01421       ! definitely 1.0125x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215993</commentid>
    <comment_count>38</comment_count>
      <attachid>284976</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-31 20:00:24 -0700</bug_when>
    <thetext>Created attachment 284976
work in progress

Adding the magic to reduce internal fragmentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215994</commentid>
    <comment_count>39</comment_count>
      <attachid>284977</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-31 20:10:32 -0700</bug_when>
    <thetext>Created attachment 284977
oh man this might actually work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216006</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-31 21:33:18 -0700</bug_when>
    <thetext>Attachment 284977 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2764:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2765:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 13 in 85 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>1216705</commentid>
    <comment_count>41</comment_count>
      <attachid>285168</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-02 17:28:57 -0700</bug_when>
    <thetext>Created attachment 285168
performance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216706</commentid>
    <comment_count>42</comment_count>
      <attachid>285169</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-02 17:29:59 -0700</bug_when>
    <thetext>Created attachment 285169
latest patch

It probably needs to be rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216708</commentid>
    <comment_count>43</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-02 17:47:01 -0700</bug_when>
    <thetext>What I&apos;m consistently finding is that the benchmarks that have regressions are also now using less memory.

That makes this feel like a win rather than a loss.  I&apos;m going to see what happens when I run things in the full browser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216709</commentid>
    <comment_count>44</comment_count>
      <attachid>285170</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-02 17:57:11 -0700</bug_when>
    <thetext>Created attachment 285170
latest patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216712</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-02 17:59:22 -0700</bug_when>
    <thetext>Attachment 285170 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2765:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2766:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 13 in 85 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>1216991</commentid>
    <comment_count>46</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-03 10:38:54 -0700</bug_when>
    <thetext>It looks like there are two things causing MarkedSpace to be a regression:

- MarkedBlocks are small, while CopiedBlocks are large.  The large size of CopiedBlocks makes a huge difference for certain common allocation sizes, like arrays of length 1024.  The allocation size for a contiguous butterfly would be 8200 bytes, which is more than half of a 16KB MarkedBlock.  So, we waste 16384-8200=8184 bytes for every 1024 array allocation, unless we make MarkedBlocks larger.  But if we make MarkedBlocks larger, we suffer fragmentation because of the very simplistic arrangement of size classes.  We should probably use exponential size classes rather than linear ones.

- Free-list creation is expensive.  In CopiedSpace we are optimized for the case that lots of objects all die at once, which happens to be how the web works.  Usually, you don&apos;t have to do any work to deal with the fragmentation in a CopiedBlock.  You just bump-allocate in a freshly allocated one, or one that has just been zeroed and nothing else.  But in MarkedSpace we have to create free-lists.  I think we should explore adding something different than free-lists in MarkedSpace.  I&apos;m even thinking about making the allocation fast path be a bump/free-list hybrid, and modifying the sweep to quickly identify completely free MarkedBlocks.  If a MarkedBlock is completely free then we can tell the allocation fast paths to use bump.  Bump can be the default.  We could even make it the only inline fast path in some cases.

Anyway, here are the current perf results, after I made the MarkedBlock size 64KB:

Benchmark report for Octane and Kraken on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r204055)
&quot;AuxButterflies&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r204055)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                TipOfTree               AuxButterflies                                  
Octane:
   encrypt                                   0.14292+-0.00108    !     0.14731+-0.00229       ! definitely 1.0308x slower
   decrypt                                   2.61144+-0.07626    ?     2.61413+-0.01196       ?
   deltablue                        x2       0.12511+-0.00246    ?     0.12594+-0.00327       ?
   earley                                    0.26931+-0.00154          0.26653+-0.00134         might be 1.0104x faster
   boyer                                     4.54482+-0.14269          4.40210+-0.11607         might be 1.0324x faster
   navier-stokes                    x2       4.61712+-0.02800    ?     4.64155+-0.04537       ?
   raytrace                         x2       0.75079+-0.00358    ^     0.73628+-0.00672       ^ definitely 1.0197x faster
   richards                         x2       0.07606+-0.00121    ?     0.07630+-0.00071       ?
   splay                            x2       0.32302+-0.00165    ^     0.29880+-0.00354       ^ definitely 1.0811x faster
   regexp                           x2      15.18275+-0.29877    !    16.14390+-0.22540       ! definitely 1.0633x slower
   pdfjs                            x2      39.65732+-0.54782    !    41.18570+-0.49433       ! definitely 1.0385x slower
   mandreel                         x2      39.84480+-0.37770         39.68316+-0.32085       
   gbemu                            x2      27.64703+-0.17189    !    30.02397+-0.29912       ! definitely 1.0860x slower
   closure                                   0.45987+-0.00338    ?     0.46161+-0.00211       ?
   jquery                                    6.20639+-0.07152          6.18832+-0.01875       
   box2d                            x2       8.62061+-0.07246    ?     8.69544+-0.09890       ?
   zlib                             x2     356.85201+-12.85325   ?   363.19929+-5.87951       ? might be 1.0178x slower
   typescript                       x2     589.75472+-13.20071       588.84249+-11.13164      

   &lt;geometric&gt;                               4.76057+-0.01421    !     4.79734+-0.01661       ! definitely 1.0077x slower

                                                TipOfTree               AuxButterflies                                  
Kraken:
   ai-astar                                   81.943+-1.153      ?      84.326+-3.194         ? might be 1.0291x slower
   audio-beat-detection                       36.129+-0.694             36.030+-0.273         
   audio-dft                                  95.417+-2.099             94.261+-1.822           might be 1.0123x faster
   audio-fft                                  27.771+-0.062      !      28.017+-0.081         ! definitely 1.0089x slower
   audio-oscillator                           44.660+-0.242      !      47.534+-0.297         ! definitely 1.0643x slower
   imaging-darkroom                           56.812+-0.415      ?      57.180+-1.283         ?
   imaging-desaturate                         42.957+-2.272             41.078+-0.194           might be 1.0457x faster
   imaging-gaussian-blur                      59.911+-4.382             58.325+-3.676           might be 1.0272x faster
   json-parse-financial                       32.442+-2.261             31.679+-0.211           might be 1.0241x faster
   json-stringify-tinderbox                   21.662+-0.654      ?      22.498+-1.237         ? might be 1.0386x slower
   stanford-crypto-aes                        35.099+-0.779      !      38.181+-1.694         ! definitely 1.0878x slower
   stanford-crypto-ccm                        32.910+-1.183      ?      34.935+-1.775         ? might be 1.0616x slower
   stanford-crypto-pbkdf2                     87.896+-0.528      !      92.195+-2.434         ! definitely 1.0489x slower
   stanford-crypto-sha256-iterative           29.388+-0.900      ?      30.566+-1.666         ? might be 1.0401x slower

   &lt;arithmetic&gt;                               48.928+-0.436      !      49.772+-0.405         ! definitely 1.0172x slower

                                                TipOfTree               AuxButterflies                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                           15.2617+-0.0536     !     15.4522+-0.0730        ! definitely 1.0125x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217031</commentid>
    <comment_count>47</comment_count>
      <attachid>285254</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-03 11:29:19 -0700</bug_when>
    <thetext>Created attachment 285254
latest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217035</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-03 11:36:34 -0700</bug_when>
    <thetext>Attachment 285254 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2765:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2766:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 13 in 90 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>1217061</commentid>
    <comment_count>49</comment_count>
      <attachid>285254</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-03 12:28:56 -0700</bug_when>
    <thetext>Comment on attachment 285254
latest

Attachment 285254 did not pass mac-debug-ews (mac):
Output: http://webkit-queues.webkit.org/results/1805789

Number of test failures exceeded the failure limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217062</commentid>
    <comment_count>50</comment_count>
      <attachid>285260</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-03 12:29:02 -0700</bug_when>
    <thetext>Created attachment 285260
Archive of layout-test-results from ews114 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews114  Port: mac-yosemite  Platform: Mac OS X 10.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217541</commentid>
    <comment_count>51</comment_count>
      <attachid>285349</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-04 12:57:21 -0700</bug_when>
    <thetext>Created attachment 285349
new approach to size classes

This has a totally new approach to MarkedSpace size classes.  I&apos;m hoping that this makes it easier to use larger marked blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217801</commentid>
    <comment_count>52</comment_count>
      <attachid>285396</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-04 20:08:01 -0700</bug_when>
    <thetext>Created attachment 285396
last version before large allocation apocalypse</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217806</commentid>
    <comment_count>53</comment_count>
      <attachid>285399</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-04 21:00:14 -0700</bug_when>
    <thetext>Created attachment 285399
large allocation apocalypse has begun</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217810</commentid>
    <comment_count>54</comment_count>
      <attachid>285401</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-04 22:59:00 -0700</bug_when>
    <thetext>Created attachment 285401
large allocation rewrite compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218019</commentid>
    <comment_count>55</comment_count>
      <attachid>285444</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-05 13:12:10 -0700</bug_when>
    <thetext>Created attachment 285444
large allocation rewrite is passing tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218053</commentid>
    <comment_count>56</comment_count>
      <attachid>285450</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-05 14:18:53 -0700</bug_when>
    <thetext>Created attachment 285450
I just realized that I need to fix all of those MarkedBlock::blockFor() things

Hope crap this is ballooning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218087</commentid>
    <comment_count>57</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-05 16:05:31 -0700</bug_when>
    <thetext>Here&apos;s a good illustration of the trade-offs that I&apos;m trying to resolve by rewriting how we do large allocations.

If I just allocate butterflies in marked space, things go bad because many butterflies are just larger than sizeof(MarkedBlock) and so they hit our disastrous large allocation path.

The AuxButterflies16KB version makes things a bit better by at least cleaning up the size classes, but this isn&apos;t enough to avoid slow-downs on Octane and Kraken.

Increasing the block size to 64KB does reduce the slow-downs in Octane and Kraken but it creates a slow-down in SunSpider, probably because we now allocate more memory right out of the gate.

So, I think we want a hybrid of AuxButterflies16KB and AuxButterflies64KB, where we allocate small marked blocks but don&apos;t waste memory for large butterflies.  To do that we need a new large allocation path!


Benchmark report for SunSpider, Octane, and Kraken on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r204128)
&quot;SimpleAuxButterflies&quot; at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r204128)
&quot;AuxButterflies16KB&quot; at /Volumes/Data/quinary/OpenSource/WebKitBuild/Release/jsc (r204128)
&quot;AuxButterflies64KB&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r204128)

Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for
warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                TipOfTree            SimpleAuxButterflies       AuxButterflies16KB        AuxButterflies64KB      AuxButterflies64KB v. TipOfTree
SunSpider:
   3d-cube                                    4.4844+-0.0647     !      5.0431+-0.0498     ?      5.0754+-0.1433     ?      5.2062+-0.0668        ! definitely 1.1609x slower
   3d-morph                                   4.8011+-0.1857            4.7892+-0.2552            4.7074+-0.0399     ?      4.7546+-0.1605        
   3d-raytrace                                4.6572+-0.0589     ?      4.8237+-0.1817            4.6222+-0.0670     !      4.7955+-0.0985        ? might be 1.0297x slower
   access-binary-trees                        1.8976+-0.0330            1.8917+-0.0773     ?      1.9192+-0.0439     ?      1.9330+-0.0546        ? might be 1.0186x slower
   access-fannkuch                            5.2757+-0.2463     ?      5.3504+-0.0674     ^      5.1893+-0.0893     ?      5.2857+-0.0785        ?
   access-nbody                               2.3810+-0.1931            2.2882+-0.1280            2.2782+-0.0484     !      2.4673+-0.1080        ? might be 1.0362x slower
   access-nsieve                              2.8488+-0.0334            2.8037+-0.0389     ?      2.8376+-0.1148            2.8294+-0.0223        
   bitops-3bit-bits-in-byte                   1.0832+-0.1192            1.0556+-0.0465            1.0365+-0.0296     ?      1.2336+-0.3704        ? might be 1.1389x slower
   bitops-bits-in-byte                        2.5031+-0.0860            2.4543+-0.0313            2.4366+-0.0324     ?      2.5662+-0.2114        ? might be 1.0252x slower
   bitops-bitwise-and                         1.9174+-0.1362            1.8626+-0.0378     ?      1.8883+-0.0760     ?      1.9614+-0.0710        ? might be 1.0229x slower
   bitops-nsieve-bits                         2.9576+-0.1271     ?      2.9968+-0.1063            2.9110+-0.0290     ?      3.0239+-0.1058        ? might be 1.0224x slower
   controlflow-recursive                      2.1719+-0.0127     ?      2.2257+-0.0506            2.2011+-0.0429     ?      2.2100+-0.0313        ? might be 1.0176x slower
   crypto-aes                                 4.1922+-0.0939     !      4.4516+-0.1445            4.2357+-0.0788     ?      4.3728+-0.1270        ? might be 1.0431x slower
   crypto-md5                                 2.5801+-0.0564     ?      2.6380+-0.1585            2.5790+-0.0428     ?      2.6941+-0.1326        ? might be 1.0442x slower
   crypto-sha1                                2.5943+-0.0386     ?      2.6258+-0.0389     ?      2.6397+-0.0285     ?      2.6621+-0.0599        ? might be 1.0262x slower
   date-format-tofte                          6.4005+-0.2395     ?      6.5240+-0.2378     ?      6.5627+-0.2380     ?      6.8419+-0.2697        ? might be 1.0690x slower
   date-format-xparb                          4.4459+-0.0317     ?      4.5613+-0.2296            4.4573+-0.1501     ?      4.5766+-0.0532        ! definitely 1.0294x slower
   math-cordic                                2.6047+-0.1115            2.5863+-0.0423     ?      2.5985+-0.0227     ?      2.7637+-0.1679        ? might be 1.0611x slower
   math-partial-sums                          3.7212+-0.0493     ?      3.8688+-0.2066            3.7585+-0.0705     ?      4.0084+-0.2710        ? might be 1.0772x slower
   math-spectral-norm                         1.9491+-0.0278     ?      1.9608+-0.0450            1.9526+-0.0613     ?      1.9940+-0.0589        ? might be 1.0230x slower
   regexp-dna                                 6.2235+-0.4707            6.1266+-0.1453            6.1064+-0.1101            6.0533+-0.1326          might be 1.0281x faster
   string-base64                              4.4976+-0.2075            4.4254+-0.1358            4.3271+-0.0448     !      4.4467+-0.0708          might be 1.0115x faster
   string-fasta                               5.2094+-0.1420     ?      5.2497+-0.0913            5.1925+-0.0464     ?      5.3633+-0.1489        ? might be 1.0295x slower
   string-tagcloud                            8.2615+-0.3758            8.0670+-0.2049            8.0214+-0.1713     ?      8.3930+-0.2691        ? might be 1.0159x slower
   string-unpack-code                        17.4966+-0.3606           17.3569+-0.2993     ?     18.2648+-0.6339     ?     18.2784+-0.3744        ! definitely 1.0447x slower
   string-validate-input                      4.1611+-0.0964     ?      4.2257+-0.0682     ?      4.3071+-0.2034            4.2407+-0.0565        ? might be 1.0191x slower

   &lt;arithmetic&gt;                               4.2814+-0.0216     ?      4.3174+-0.0384            4.3118+-0.0289     !      4.4214+-0.0354        ! definitely 1.0327x slower

                                                TipOfTree            SimpleAuxButterflies       AuxButterflies16KB        AuxButterflies64KB      AuxButterflies64KB v. TipOfTree
Octane:
   encrypt                                   0.14559+-0.00225    !     0.15000+-0.00205          0.14845+-0.00332    ?     0.14895+-0.00297       ? might be 1.0231x slower
   decrypt                                   2.57292+-0.03250    !     2.62363+-0.00868          2.61100+-0.00489    ?     2.62455+-0.01301       ! definitely 1.0201x slower
   deltablue                        x2       0.12439+-0.00132    !     0.12865+-0.00202          0.12669+-0.00208          0.12606+-0.00188       ? might be 1.0134x slower
   earley                                    0.26990+-0.00160    ?     0.27189+-0.00120          0.27084+-0.00156    ^     0.26454+-0.00105       ^ definitely 1.0203x faster
   boyer                                     4.57432+-0.11169    ?     4.60830+-0.10973    ?     4.61912+-0.11172          4.48958+-0.10283         might be 1.0189x faster
   navier-stokes                    x2       4.60487+-0.01864    ?     4.60681+-0.01197    ?     4.61745+-0.02900          4.61106+-0.01406       ?
   raytrace                         x2       0.74891+-0.00386    ?     0.75037+-0.00492          0.74907+-0.00335    ^     0.73189+-0.00440       ^ definitely 1.0232x faster
   richards                         x2       0.07629+-0.00069    ?     0.07679+-0.00112    ?     0.07759+-0.00096          0.07701+-0.00137       ?
   splay                            x2       0.32571+-0.00295    ^     0.31420+-0.00187    !     0.32565+-0.00486    ^     0.31286+-0.00616       ^ definitely 1.0411x faster
   regexp                           x2      15.50033+-0.66766    !    16.49235+-0.23073         16.19040+-0.19243    ^    15.66231+-0.21639       ? might be 1.0104x slower
   pdfjs                            x2      39.39239+-0.35663    !    41.78375+-0.29215    ^    40.49726+-0.54108    ?    40.89425+-0.23561       ! definitely 1.0381x slower
   mandreel                         x2      39.71818+-0.26691    ?    39.80092+-0.23399         39.70865+-0.14213    ?    39.77723+-0.19827       ?
   gbemu                            x2      27.62646+-0.17355    !    29.28948+-0.19248    ^    27.80526+-0.22206    !    29.72521+-0.27890       ! definitely 1.0760x slower
   closure                                   0.45988+-0.00216    ?     0.46313+-0.00264    ?     0.46380+-0.00238    ?     0.46502+-0.00327       ? might be 1.0112x slower
   jquery                                    6.21443+-0.03311          6.20131+-0.05835    !     6.37222+-0.03338    ^     6.27906+-0.03439       ? might be 1.0104x slower
   box2d                            x2       8.62782+-0.05768    ?     8.71136+-0.03586    ?     8.75362+-0.03841          8.67463+-0.04658       ?
   zlib                             x2     343.02766+-10.56765   ?   356.89487+-4.55687        344.37725+-9.78342    ?   348.80072+-9.91226       ? might be 1.0168x slower
   typescript                       x2     582.11401+-8.04523    !   595.62290+-4.71067    ?   597.37607+-3.04969        592.25625+-5.55931       ? might be 1.0174x slower

   &lt;geometric&gt;                               4.74911+-0.01914    !     4.84402+-0.01169          4.81331+-0.02062          4.79250+-0.01935       ! definitely 1.0091x slower

                                                TipOfTree            SimpleAuxButterflies       AuxButterflies16KB        AuxButterflies64KB      AuxButterflies64KB v. TipOfTree
Kraken:
   ai-astar                                   81.944+-1.232      ?      83.676+-1.940             83.073+-0.718             82.230+-0.534         ?
   audio-beat-detection                       35.724+-0.132      !      39.441+-0.101             39.313+-0.106      ^      35.817+-0.274         ?
   audio-dft                                  96.028+-1.792             95.003+-2.349      ?      95.447+-1.846             94.994+-1.422           might be 1.0109x faster
   audio-fft                                  28.078+-0.756      !      31.442+-0.216      ?      31.594+-0.177      ^      27.925+-0.161         
   audio-oscillator                           45.268+-0.954      ?      45.509+-0.435      ?      45.637+-0.449             45.397+-0.317         ?
   imaging-darkroom                           56.784+-0.177      ?      56.908+-0.244      ?      57.116+-0.411             56.947+-0.219         ?
   imaging-desaturate                         41.677+-1.319             40.919+-0.253      ?      42.322+-2.175             41.292+-0.197         
   imaging-gaussian-blur                      55.877+-1.287             55.555+-1.137      ?      56.577+-1.358             55.324+-1.321         
   json-parse-financial                       32.082+-1.499      ?      33.303+-1.392      ?      34.549+-1.559             33.409+-1.604         ? might be 1.0414x slower
   json-stringify-tinderbox                   23.207+-1.646             22.068+-1.049             20.898+-0.763      ?      22.741+-1.320           might be 1.0205x faster
   stanford-crypto-aes                        34.618+-0.176      !      38.038+-1.070      ^      35.995+-0.298             35.610+-0.461         ! definitely 1.0287x slower
   stanford-crypto-ccm                        32.027+-1.133      !      34.666+-1.189             33.743+-1.961      ?      34.924+-1.371         ! definitely 1.0904x slower
   stanford-crypto-pbkdf2                     87.904+-0.819      !      92.863+-1.454             92.479+-1.049             91.927+-0.941         ! definitely 1.0458x slower
   stanford-crypto-sha256-iterative           29.220+-1.031      ?      30.359+-1.234             29.398+-0.283      ?      29.893+-0.645         ? might be 1.0230x slower

   &lt;arithmetic&gt;                               48.603+-0.321      !      49.982+-0.234             49.867+-0.467             49.173+-0.249         ! definitely 1.0117x slower

                                                TipOfTree            SimpleAuxButterflies       AuxButterflies16KB        AuxButterflies64KB      AuxButterflies64KB v. TipOfTree
Geomean of preferred means:
   &lt;scaled-result&gt;                            9.9605+-0.0308     !     10.1486+-0.0337           10.1149+-0.0459     ?     10.1377+-0.0286        ! definitely 1.0178x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218129</commentid>
    <comment_count>58</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-05 17:26:33 -0700</bug_when>
    <thetext>Things are getting better.  But I undid the splay speed-up.  I&apos;ll investigate what happened there.


Benchmark report for SunSpider, Octane, and Kraken on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r204128)
&quot;SimpleAuxButterflies&quot; at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r204128)
&quot;AuxButterflies64KB&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r204128)
&quot;AuxButterfliesLargeAlloc&quot; at /Volumes/Data/quinary/OpenSource/WebKitBuild/Release/jsc (r204128)

Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for
warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                TipOfTree            SimpleAuxButterflies       AuxButterflies64KB    AuxButterfliesLargeAlloc    AuxButterfliesLargeAlloc v. TipOfTree
SunSpider:
   3d-cube                                    4.5578+-0.1559     !      5.0198+-0.1410     ?      5.1283+-0.0992            5.1174+-0.1121        ! definitely 1.1228x slower
   3d-morph                                   4.7218+-0.0819            4.6649+-0.0384     ?      4.8637+-0.2404            4.7671+-0.1557        ?
   3d-raytrace                                4.7702+-0.1780            4.5675+-0.0695     !      4.9135+-0.1192     ^      4.6527+-0.1056          might be 1.0253x faster
   access-binary-trees                        1.8450+-0.0610     ?      1.8662+-0.0448     ?      1.9291+-0.0521            1.9273+-0.0516        ? might be 1.0446x slower
   access-fannkuch                            5.2317+-0.1742     ?      5.4488+-0.2939            5.1774+-0.1788            5.1562+-0.1787          might be 1.0146x faster
   access-nbody                               2.2598+-0.0258     ?      2.4434+-0.2870            2.4369+-0.0709            2.3413+-0.1447        ? might be 1.0361x slower
   access-nsieve                              2.8322+-0.0350            2.7698+-0.0318     ?      2.8240+-0.0238     ?      2.8501+-0.1076        ?
   bitops-3bit-bits-in-byte                   1.0201+-0.0115     !      1.0897+-0.0581     ?      1.1380+-0.1369            1.0445+-0.0400        ? might be 1.0239x slower
   bitops-bits-in-byte                        2.4361+-0.0394     ?      2.5891+-0.1934            2.5735+-0.1568            2.4573+-0.0502        ?
   bitops-bitwise-and                         1.9754+-0.2558            1.8642+-0.0256     ?      1.9120+-0.0601            1.8836+-0.0545          might be 1.0487x faster
   bitops-nsieve-bits                         2.9440+-0.0916            2.9146+-0.0372     ?      3.0260+-0.1386            2.8997+-0.0223          might be 1.0153x faster
   controlflow-recursive                      2.3048+-0.1584            2.2134+-0.1479     ?      2.2980+-0.1058            2.2444+-0.0762          might be 1.0269x faster
   crypto-aes                                 4.2529+-0.1690     ?      4.4554+-0.1997            4.3481+-0.2286            4.2243+-0.0773        
   crypto-md5                                 2.5201+-0.0354     ?      2.5578+-0.0504     ?      2.7454+-0.3581            2.6090+-0.1143        ? might be 1.0353x slower
   crypto-sha1                                2.6248+-0.0538     ?      2.6739+-0.0661            2.6583+-0.0410            2.6188+-0.0321        
   date-format-tofte                          6.3851+-0.2480     ?      6.3956+-0.2316     ?      6.8543+-0.2600            6.7328+-0.3984        ? might be 1.0545x slower
   date-format-xparb                          4.6708+-0.2768            4.3976+-0.0740     !      4.6877+-0.2152            4.4762+-0.0971          might be 1.0435x faster
   math-cordic                                2.6074+-0.0604     ?      2.7512+-0.2773            2.6849+-0.0866            2.6664+-0.1267        ? might be 1.0226x slower
   math-partial-sums                          3.8396+-0.1665            3.7813+-0.0954     ?      3.8433+-0.1129     ?      3.9779+-0.3178        ? might be 1.0360x slower
   math-spectral-norm                         1.9565+-0.0581            1.9480+-0.0406     ?      1.9707+-0.0256     ?      1.9931+-0.0774        ? might be 1.0187x slower
   regexp-dna                                 6.1790+-0.2704            6.0703+-0.2340     ?      6.2838+-0.2493            6.0842+-0.2282          might be 1.0156x faster
   string-base64                              4.2741+-0.0292     ?      4.3163+-0.0462     !      4.5058+-0.1200     ^      4.3292+-0.0421        ? might be 1.0129x slower
   string-fasta                               5.2731+-0.1846            5.1514+-0.0398     !      5.6360+-0.3093            5.3571+-0.1397        ? might be 1.0159x slower
   string-tagcloud                            7.9739+-0.2367     ?      8.1055+-0.4643            8.0471+-0.0470            8.0419+-0.1938        ?
   string-unpack-code                        18.0191+-0.9203           17.6282+-0.4758     ?     17.6685+-0.3062     ?     17.9680+-0.6064        
   string-validate-input                      4.1739+-0.0550            4.1443+-0.0605     !      4.3240+-0.0926            4.3200+-0.1175        ? might be 1.0350x slower

   &lt;arithmetic&gt;                               4.2942+-0.0477     ?      4.3011+-0.0442     !      4.4030+-0.0412     ^      4.3362+-0.0253        ? might be 1.0098x slower

                                                TipOfTree            SimpleAuxButterflies       AuxButterflies64KB    AuxButterfliesLargeAlloc    AuxButterfliesLargeAlloc v. TipOfTree
Octane:
   encrypt                                   0.14533+-0.00222    !     0.15108+-0.00301          0.15034+-0.00318          0.14689+-0.00193       ? might be 1.0107x slower
   decrypt                                   2.61876+-0.04621    ?     2.62099+-0.00966          2.61268+-0.01044          2.61173+-0.00981       
   deltablue                        x2       0.12177+-0.00130    !     0.12743+-0.00235          0.12631+-0.00231    ?     0.12889+-0.00970       ? might be 1.0585x slower
   earley                                    0.27001+-0.00185    ?     0.27377+-0.00325    ^     0.26454+-0.00055    !     0.27204+-0.00190       ?
   boyer                                     4.58360+-0.11484    ?     4.61276+-0.10187          4.47922+-0.10752    ?     4.67403+-0.09395       ? might be 1.0197x slower
   navier-stokes                    x2       4.61178+-0.01672          4.59953+-0.01391    ?     4.60831+-0.03052          4.60680+-0.01671       
   raytrace                         x2       0.74943+-0.00424          0.74786+-0.00507    ^     0.73181+-0.00439    !     0.74839+-0.00358       
   richards                         x2       0.07658+-0.00081          0.07633+-0.00033    ?     0.07657+-0.00088    ?     0.07683+-0.00084       ?
   splay                            x2       0.32292+-0.00174    ^     0.31468+-0.00217    ^     0.30964+-0.00276    !     0.32906+-0.00146       ! definitely 1.0190x slower
   regexp                           x2      15.40845+-0.33175    !    16.44271+-0.31377    ^    15.55046+-0.21314    ?    15.87594+-0.25650       ? might be 1.0303x slower
   pdfjs                            x2      39.40315+-0.28901    !    41.78232+-0.17371    ^    40.92843+-0.34968    ^    39.73745+-0.21895       ?
   mandreel                         x2      39.76420+-0.20860    ?    40.04070+-0.37404         39.70689+-0.15163         39.67501+-0.22849       
   gbemu                            x2      27.48214+-0.09655    !    29.20368+-0.19523    ?    29.60994+-0.22860    ^    28.95805+-0.07978       ! definitely 1.0537x slower
   closure                                   0.45977+-0.00195          0.45742+-0.00230    ?     0.46260+-0.00396          0.46150+-0.00125       ?
   jquery                                    6.16387+-0.04029    ?     6.19293+-0.02350    !     6.26991+-0.02460    ?     6.32008+-0.03038       ! definitely 1.0253x slower
   box2d                            x2       8.57640+-0.05250    !     8.70619+-0.04156          8.65640+-0.02894    ?     8.69710+-0.04477       ! definitely 1.0141x slower
   zlib                             x2     346.27353+-9.51686    ?   350.26088+-11.41218       346.60460+-13.27221   ?   349.91839+-7.44690       ? might be 1.0105x slower
   typescript                       x2     578.99900+-5.96293    !   601.29929+-9.41440        593.42517+-6.74871    !   611.23459+-4.99278       ! definitely 1.0557x slower

   &lt;geometric&gt;                               4.73984+-0.01428    !     4.83449+-0.02249    ^     4.78119+-0.02763    ?     4.82662+-0.02474       ! definitely 1.0183x slower

                                                TipOfTree            SimpleAuxButterflies       AuxButterflies64KB    AuxButterfliesLargeAlloc    AuxButterfliesLargeAlloc v. TipOfTree
Kraken:
   ai-astar                                   84.832+-2.243             84.517+-2.439             83.084+-1.402             82.637+-0.636           might be 1.0266x faster
   audio-beat-detection                       35.769+-0.161      !      39.823+-0.802      ^      35.775+-0.103      !      36.238+-0.229         ! definitely 1.0131x slower
   audio-dft                                  95.137+-1.304      ?      95.324+-1.607             94.662+-1.678             94.257+-2.111         
   audio-fft                                  27.747+-0.039      !      31.589+-0.182      ^      28.222+-0.694      ?      28.301+-0.288         ! definitely 1.0200x slower
   audio-oscillator                           46.220+-1.275             45.568+-0.252      ?      45.921+-0.906             45.890+-1.417         
   imaging-darkroom                           56.786+-0.152      ?      57.158+-0.439      ?      57.245+-0.493             57.155+-1.013         ?
   imaging-desaturate                         42.108+-1.553             41.327+-0.908             40.871+-0.227      ?      41.819+-0.981         
   imaging-gaussian-blur                      56.755+-0.920      ?      56.818+-1.191             56.646+-1.381      ?      58.442+-2.822         ? might be 1.0297x slower
   json-parse-financial                       32.402+-1.580             31.919+-0.888      ?      33.297+-1.361             32.034+-1.195           might be 1.0115x faster
   json-stringify-tinderbox                   21.794+-0.898             21.729+-1.012      ?      22.078+-1.430             21.260+-1.063           might be 1.0251x faster
   stanford-crypto-aes                        34.456+-0.177      !      37.794+-0.996      ^      35.915+-0.818             35.718+-0.166         ! definitely 1.0366x slower
   stanford-crypto-ccm                        32.319+-0.271      ?      34.418+-2.566      ?      34.672+-1.910             33.376+-1.641         ? might be 1.0327x slower
   stanford-crypto-pbkdf2                     87.982+-0.875      !      92.421+-1.269      ?      92.911+-1.910             91.968+-0.703         ! definitely 1.0453x slower
   stanford-crypto-sha256-iterative           29.130+-0.628      ?      29.284+-0.367      !      31.145+-1.422             29.470+-0.369         ? might be 1.0117x slower

   &lt;arithmetic&gt;                               48.817+-0.279      !      49.978+-0.396             49.460+-0.395             49.183+-0.458         ? might be 1.0075x slower

                                                TipOfTree            SimpleAuxButterflies       AuxButterflies64KB    AuxButterfliesLargeAlloc    AuxButterfliesLargeAlloc v. TipOfTree
Geomean of preferred means:
   &lt;scaled-result&gt;                            9.9784+-0.0543     !     10.1286+-0.0441     ?     10.1352+-0.0435           10.0966+-0.0355        ! definitely 1.0118x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218130</commentid>
    <comment_count>59</comment_count>
      <attachid>285467</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-05 17:27:20 -0700</bug_when>
    <thetext>Created attachment 285467
latest

I managed to slow down splay in the process.  I&apos;ll investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218186</commentid>
    <comment_count>60</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-05 21:54:02 -0700</bug_when>
    <thetext>I wanted to know where the remaining performance deficit came from.  I was wondering if maybe the choice of size classes played a role.  It seems that Octane *really loves* the old size classes, but everything else prefers the new ones.

ExpSizeClasses = whats in the patch
DirectOldClasses = the patch but with old size classes
IndirectOldClasses = like DirectOldClasses but with the size classes tweaked to optimize block packing

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r204128)
&quot;ExpSizeClasses&quot; at /Volumes/Data/quinary/OpenSource/ExpSizeClasses/WebKitBuild/Release/jsc
&quot;DirectOldClasses&quot; at /Volumes/Data/quinary/OpenSource/DirectOldClasses/WebKitBuild/Release/jsc
&quot;IndirectOldClasses&quot; at /Volumes/Data/quinary/OpenSource/IndirectOldClasses/WebKitBuild/Release/jsc

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for
warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                TipOfTree               ExpSizeClasses           DirectOldClasses         IndirectOldClasses      IndirectOldClasses v. TipOfTree
SunSpider:
   3d-cube                                    4.5713+-0.1336     !      5.0494+-0.0895     ?      5.1134+-0.1517            4.9361+-0.1613        ! definitely 1.0798x slower
   3d-morph                                   4.7587+-0.1678            4.7172+-0.1335     ?      4.9244+-0.4627            4.6917+-0.0823          might be 1.0143x faster
   3d-raytrace                                4.6127+-0.0936     ?      4.6283+-0.1122     ?      4.7605+-0.3481     ?      4.7839+-0.1956        ? might be 1.0371x slower
   access-binary-trees                        1.8947+-0.0329     ?      1.9413+-0.0441            1.9032+-0.0428     ?      1.9670+-0.1587        ? might be 1.0382x slower
   access-fannkuch                            5.4318+-0.2776            5.3228+-0.2452            5.1283+-0.2630     ?      5.1472+-0.3419          might be 1.0553x faster
   access-nbody                               2.3580+-0.1475            2.3185+-0.2706            2.2800+-0.0654            2.2188+-0.0317          might be 1.0628x faster
   access-nsieve                              2.9406+-0.2026            2.7893+-0.0160     ?      2.7992+-0.0267            2.7901+-0.0368          might be 1.0539x faster
   bitops-3bit-bits-in-byte                   1.0318+-0.0333     ?      1.0687+-0.0858            1.0610+-0.0866            1.0485+-0.0690        ? might be 1.0161x slower
   bitops-bits-in-byte                        2.4114+-0.0641     ?      2.6401+-0.2822            2.4675+-0.0285     ?      2.4968+-0.0978        ? might be 1.0354x slower
   bitops-bitwise-and                         1.9052+-0.0929            1.8793+-0.0695     ?      1.9561+-0.1351            1.8972+-0.1016        
   bitops-nsieve-bits                         2.9928+-0.1339            2.8914+-0.0361     ?      2.9301+-0.0478            2.8868+-0.0523          might be 1.0367x faster
   controlflow-recursive                      2.2178+-0.0957            2.2164+-0.1160     ?      2.2295+-0.1044     ?      2.4235+-0.3840        ? might be 1.0927x slower
   crypto-aes                                 4.2458+-0.0500     ?      4.3111+-0.3310            4.1906+-0.0357     ?      4.3183+-0.1692        ? might be 1.0171x slower
   crypto-md5                                 2.6381+-0.1321            2.5339+-0.0505     ?      2.5637+-0.0878            2.5403+-0.0333          might be 1.0385x faster
   crypto-sha1                                2.5945+-0.0867     ?      2.6085+-0.0961     ?      2.7609+-0.2194            2.7193+-0.1899        ? might be 1.0481x slower
   date-format-tofte                          6.3042+-0.2751     ?      6.5833+-0.1479     ?      6.7733+-0.2939            6.5526+-0.2845        ? might be 1.0394x slower
   date-format-xparb                          4.4419+-0.0402     ?      4.6832+-0.3377            4.5682+-0.1467            4.5032+-0.1912        ? might be 1.0138x slower
   math-cordic                                2.5768+-0.0357     ?      2.7225+-0.2591            2.5730+-0.0332     ?      2.7295+-0.3784        ? might be 1.0592x slower
   math-partial-sums                          4.0279+-0.6042            3.7950+-0.1552            3.7302+-0.0889     ?      3.7598+-0.0648          might be 1.0713x faster
   math-spectral-norm                         1.9377+-0.0416     ?      1.9602+-0.1397     ?      2.0427+-0.1656            1.9125+-0.0622          might be 1.0132x faster
   regexp-dna                                 6.3999+-1.0044            6.0369+-0.1126     ?      6.1108+-0.3615     ?      6.1691+-0.2085          might be 1.0374x faster
   string-base64                              4.3101+-0.0718     ?      4.3868+-0.1615            4.3417+-0.1152     ?      4.5407+-0.5264        ? might be 1.0535x slower
   string-fasta                               5.3610+-0.2860     ?      5.4854+-0.6229            5.2203+-0.0912     ?      5.3229+-0.1980        
   string-tagcloud                            8.0385+-0.4025            7.9395+-0.1997            7.9065+-0.0420     ?      7.9573+-0.1214          might be 1.0102x faster
   string-unpack-code                        17.6949+-1.2300     ?     18.1212+-0.7715     ?     18.1484+-0.5639     ?     18.1807+-1.5347        ? might be 1.0275x slower
   string-validate-input                      4.1226+-0.0741     ?      4.1957+-0.0678     ?      4.2442+-0.0706            4.1733+-0.0484        ? might be 1.0123x slower

   &lt;arithmetic&gt;                               4.3008+-0.0376     ?      4.3394+-0.0677            4.3357+-0.0559            4.3333+-0.0851        ? might be 1.0076x slower

                                                TipOfTree               ExpSizeClasses           DirectOldClasses         IndirectOldClasses      IndirectOldClasses v. TipOfTree
Octane:
   encrypt                                   0.14540+-0.00374    ?     0.14796+-0.00397          0.14768+-0.00342          0.14755+-0.00302       ? might be 1.0148x slower
   decrypt                                   2.61147+-0.07250    ?     2.62061+-0.01689    ?     2.62201+-0.00775    ?     2.62537+-0.01012       ?
   deltablue                        x2       0.12297+-0.00258    ?     0.12660+-0.00287    ?     0.12811+-0.00391          0.12780+-0.00144       ! definitely 1.0393x slower
   earley                                    0.26887+-0.00113    ?     0.27137+-0.00249    ?     0.27357+-0.00492          0.27184+-0.00132       ! definitely 1.0111x slower
   boyer                                     4.61803+-0.18233          4.57228+-0.18381    ?     4.61550+-0.17271          4.60799+-0.16707       
   navier-stokes                    x2       4.59828+-0.03302    ?     4.60812+-0.02303          4.58978+-0.01544    ?     4.60754+-0.00971       ?
   raytrace                         x2       0.75081+-0.00875          0.74838+-0.00504          0.74761+-0.00500    ?     0.74823+-0.00658       
   richards                         x2       0.07631+-0.00227          0.07553+-0.00085    ?     0.07733+-0.00138          0.07680+-0.00093       ?
   splay                            x2       0.32254+-0.00181    !     0.32819+-0.00279    ^     0.31650+-0.00326    ?     0.31692+-0.00479         might be 1.0177x faster
   regexp                           x2      15.56761+-0.34274    ?    16.18753+-0.59306    ?    16.40115+-0.66024    ?    16.48602+-0.50356       ! definitely 1.0590x slower
   pdfjs                            x2      39.57508+-0.40768    ?    39.66896+-0.32532         39.43343+-0.49412    ?    40.15574+-0.48806       ? might be 1.0147x slower
   mandreel                         x2      39.69488+-0.46114    ?    39.86782+-0.37096         39.74301+-0.47906    ?    39.97507+-0.30770       ?
   gbemu                            x2      27.68700+-0.24353    !    28.96460+-0.06953    ?    28.97904+-0.29675    ?    29.14228+-0.20618       ! definitely 1.0526x slower
   closure                                   0.45700+-0.00256    ?     0.46171+-0.00318    ?     0.46317+-0.00360    ?     0.46343+-0.00406       ? might be 1.0141x slower
   jquery                                    6.21000+-0.03053    !     6.28359+-0.01969    ^     6.22171+-0.03593    ?     6.24991+-0.06855       ?
   box2d                            x2       8.60905+-0.04744    ?     8.72229+-0.08093    ?     8.76527+-0.06503          8.73209+-0.07573       ? might be 1.0143x slower
   zlib                             x2     346.02143+-20.97996   ?   354.07517+-18.93867   ?   354.76976+-2.95834        344.07296+-16.38411      
   typescript                       x2     582.43848+-7.14311    !   612.81498+-10.57648       595.84648+-6.68457    ?   600.65658+-4.14792       ! definitely 1.0313x slower

   &lt;geometric&gt;                               4.75048+-0.02721    !     4.82525+-0.01967          4.81979+-0.02503    ?     4.82098+-0.02027       ! definitely 1.0148x slower

                                                TipOfTree               ExpSizeClasses           DirectOldClasses         IndirectOldClasses      IndirectOldClasses v. TipOfTree
Kraken:
   ai-astar                                   81.137+-0.550      ?      83.009+-3.126             82.492+-1.842      ?      82.988+-2.403         ? might be 1.0228x slower
   audio-beat-detection                       36.287+-1.097             36.284+-0.227      ?      36.472+-0.527             36.026+-0.156         
   audio-dft                                  95.328+-2.642             95.294+-2.300             94.772+-2.513             94.685+-2.771         
   audio-fft                                  27.846+-0.152      !      28.398+-0.245      ?      28.812+-1.496             28.360+-0.183         ! definitely 1.0185x slower
   audio-oscillator                           45.312+-0.587      ?      45.377+-0.535             45.348+-1.938      ?      45.478+-1.709         ?
   imaging-darkroom                           56.738+-0.148      ?      58.412+-2.030             56.628+-0.071      ?      56.746+-0.184         ?
   imaging-desaturate                         41.020+-0.654             40.869+-0.325      ?      41.089+-0.370      ?      41.833+-2.558         ? might be 1.0198x slower
   imaging-gaussian-blur                      56.816+-1.760             55.732+-2.005      ?      56.809+-1.715             56.146+-2.071           might be 1.0119x faster
   json-parse-financial                       31.936+-1.092      ?      32.005+-0.914      ?      33.350+-1.700             31.656+-0.682         
   json-stringify-tinderbox                   22.596+-2.495             20.895+-0.791      ?      21.714+-1.674             20.750+-1.329           might be 1.0889x faster
   stanford-crypto-aes                        34.636+-0.556      ?      35.995+-1.244      !      38.019+-0.398      ?      38.773+-2.096         ! definitely 1.1194x slower
   stanford-crypto-ccm                        33.176+-1.515      ?      33.667+-2.683      ?      35.546+-2.020      ?      36.222+-3.999         ? might be 1.0918x slower
   stanford-crypto-pbkdf2                     87.796+-1.531      !      92.402+-1.060             92.372+-1.642             92.105+-1.090         ! definitely 1.0491x slower
   stanford-crypto-sha256-iterative           28.856+-0.766      ?      29.751+-0.757             29.508+-0.343      ?      30.146+-0.654         ? might be 1.0447x slower

   &lt;arithmetic&gt;                               48.534+-0.394      !      49.149+-0.216      ?      49.495+-0.404             49.422+-0.879         ? might be 1.0183x slower

                                                TipOfTree               ExpSizeClasses           DirectOldClasses         IndirectOldClasses      IndirectOldClasses v. TipOfTree
Geomean of preferred means:
   &lt;scaled-result&gt;                            9.9717+-0.0289     !     10.0959+-0.0403     ?     10.1128+-0.0567           10.1066+-0.0993        ! definitely 1.0135x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218187</commentid>
    <comment_count>61</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-05 21:57:39 -0700</bug_when>
    <thetext>I still need to measure the in-browser performance effect of this change.  I still need to measure perf on ES6 benchmarks.

Here are some things that I can try to improve the perf:

- Find users of heapCell-&gt;heap()/vm() that can be changed to heapCell-&gt;markedBlock().heap()/vm().

- Make totally empty blocks available for reuse by any size class.

- Enable some kind of allocator that doesn&apos;t sweep.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218188</commentid>
    <comment_count>62</comment_count>
      <attachid>285481</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-05 22:00:49 -0700</bug_when>
    <thetext>Created attachment 285481
latest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218538</commentid>
    <comment_count>63</comment_count>
      <attachid>285575</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-08 11:47:56 -0700</bug_when>
    <thetext>Created attachment 285575
started working on concurrent sweeper

I think that if I can get the GC to sweep concurrently then this will resolve the perf problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218576</commentid>
    <comment_count>64</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-08 13:58:45 -0700</bug_when>
    <thetext>I think that in addition to concurrent sweeping we want to add a bump allocator as well.  The concurrent sweeper matches the incremental sweeper&apos;s algorithm, in the sense that it will free blocks that are completely empty.  But that means that later, we will have to produce a new free list for the block.

So, we probably want to move to a world where a freshly allocated block does not need to be swept.  That means enabling a bump allocator.  Weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218611</commentid>
    <comment_count>65</comment_count>
      <attachid>285600</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-08 16:10:38 -0700</bug_when>
    <thetext>Created attachment 285600
concurrent sweeper compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218612</commentid>
    <comment_count>66</comment_count>
      <attachid>285601</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-08 16:11:04 -0700</bug_when>
    <thetext>Created attachment 285601
latest before concurrent sweeper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218666</commentid>
    <comment_count>67</comment_count>
      <attachid>285623</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-08 18:03:06 -0700</bug_when>
    <thetext>Created attachment 285623
concurrent sweeper just swept some things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218672</commentid>
    <comment_count>68</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-08 18:30:31 -0700</bug_when>
    <thetext>Holy cow, the concurrent sweeper looks super promising!  Speed-ups on raytrace and deltablue.  But that&apos;s with block freeing totally disabled.  Enabling it seems like a bad idea for perf, unless we add a bump allocator.  Also, it looks like I need to make sure that the concurrent sweeper only uses one thread.

There are still some bugs.  I&apos;ll fix the bugs and then get back to:

- Cap the number of threads that the concurrent sweeper uses.
- Implement the bump allocator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218676</commentid>
    <comment_count>69</comment_count>
      <attachid>285625</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-08 19:30:28 -0700</bug_when>
    <thetext>Created attachment 285625
concurrent sweeper is becoming reliable

Fixed a bunch of bugs from running JSC tests.  I don&apos;t know yet if it passes all of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218694</commentid>
    <comment_count>70</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-08 21:35:29 -0700</bug_when>
    <thetext>Looks like concurrent sweeping is having a decisively positive effect in Octane, but it still slows down some things.  This is with the sweeper hacked to run only one thread and to avoid freeing blocks.  We can turn freeing blocks on when if add a bump allocator, or if we make the sweeper free blocks only after they have sat around for a while.  I&apos;m hopeful that this will remove any slow-downs, because I think that the slow-downs are caused by the sweeper having to do work that potentially interferes with the mutator, in terms of both memory traffic and lock contention.

Now I need to try the following things:

- Play a bit more with some data gathering to see what is going on in regressed tests.  For example, maybe it&apos;s just a matter of tuning how we deal with lock contention.

- Implement a bump allocator that we will use when a block is completely empty.  Optimize the sweeper for detecting completely free blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218695</commentid>
    <comment_count>71</comment_count>
      <attachid>285630</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-08 21:36:13 -0700</bug_when>
    <thetext>Created attachment 285630
concurrent sweeper is starting to look like a net win</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218810</commentid>
    <comment_count>72</comment_count>
      <attachid>285665</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-09 13:10:14 -0700</bug_when>
    <thetext>Created attachment 285665
started rewriting the allocator to use bump&apos;n&apos;pop

Bump&apos;n&apos;pop better be awesome because the name is awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218833</commentid>
    <comment_count>73</comment_count>
      <attachid>285673</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-09 13:58:38 -0700</bug_when>
    <thetext>Created attachment 285673
bump&apos;n&apos;pop is written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218855</commentid>
    <comment_count>74</comment_count>
      <attachid>285678</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-09 14:52:04 -0700</bug_when>
    <thetext>Created attachment 285678
bump&apos;n&apos;pop compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218944</commentid>
    <comment_count>75</comment_count>
      <attachid>285706</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-09 18:47:05 -0700</bug_when>
    <thetext>Created attachment 285706
bump&apos;n&apos;pop is starting to work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219085</commentid>
    <comment_count>76</comment_count>
      <attachid>285746</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-10 12:52:04 -0700</bug_when>
    <thetext>Created attachment 285746
bump&apos;n&apos;pop passes all tests

Still need to measure perf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219243</commentid>
    <comment_count>77</comment_count>
      <attachid>285804</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-10 19:10:07 -0700</bug_when>
    <thetext>Created attachment 285804
bump&apos;n&apos;pop without concurrent sweep

This looks like it&apos;s now neutral on Octane!!  Yay!

TipOfTree = unmodified r204218
Old = last version before concurrent sweeper
BumpNPop, BumpNPop2 = this patch, in two different directories

Note that I&apos;m hitting the old pathology where regexp, jquery, and closure get different perf depending on the directory in which the VM was built.  BumpNPop2 uses the same directory as TipOfTree to make sure that this effect is removed.


Benchmark report for SunSpider, Octane, and Kraken on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/Baseline/WebKitBuild/Release/jsc
&quot;Old&quot; at /Volumes/Data/quinary/OpenSource/WebKitBuild/Release/jsc (r204218)
&quot;BumpNPop&quot; at /Volumes/Data/octonary/OpenSource/WebKitBuild/Release/jsc (r204218)
&quot;BumpNPop2&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r204218)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation
for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                                TipOfTree                    Old                     BumpNPop                 BumpNPop2             BumpNPop2 v. TipOfTree  
SunSpider:
   3d-cube                                    4.5102+-0.1487     !      5.1216+-0.1353     ^      4.5409+-0.2681     ?      4.8132+-0.3383        ? might be 1.0672x slower
   3d-morph                                   4.6531+-0.0405     ?      4.6580+-0.1169     ?      4.7105+-0.1462            4.6780+-0.0363        ?
   3d-raytrace                                4.8856+-0.4038            4.8013+-0.3129     ?      4.8672+-0.2349            4.6500+-0.0510          might be 1.0507x faster
   access-binary-trees                        1.9019+-0.0859            1.8678+-0.0294     ?      2.0153+-0.1667            1.9141+-0.0993        ?
   access-fannkuch                            5.1544+-0.0678     ?      5.2241+-0.1810     ?      5.3591+-0.0703            5.3282+-0.3330        ? might be 1.0337x slower
   access-nbody                               2.3298+-0.1685            2.3030+-0.0973     ?      2.4967+-0.1924            2.4193+-0.1989        ? might be 1.0384x slower
   access-nsieve                              2.8919+-0.3141            2.8433+-0.1954            2.8297+-0.0276     ?      2.8945+-0.1341        ?
   bitops-3bit-bits-in-byte                   1.0195+-0.0565            1.0182+-0.0473     !      1.0917+-0.0133            1.0854+-0.0607        ? might be 1.0647x slower
   bitops-bits-in-byte                        2.4639+-0.0438            2.4118+-0.0413     ?      2.5142+-0.0837     ?      2.6663+-0.2180        ? might be 1.0822x slower
   bitops-bitwise-and                         1.8719+-0.0961     ?      1.8723+-0.0483     ?      1.9989+-0.2695            1.8975+-0.0175        ? might be 1.0137x slower
   bitops-nsieve-bits                         2.9019+-0.0425     ?      2.9190+-0.0730     ?      2.9907+-0.0538            2.9573+-0.0126        ! definitely 1.0191x slower
   controlflow-recursive                      2.1722+-0.0217     ?      2.1856+-0.0493     ?      2.2593+-0.0950            2.2550+-0.0831        ? might be 1.0381x slower
   crypto-aes                                 4.2222+-0.1356            4.1497+-0.0547     ?      4.2011+-0.0708            4.1461+-0.0305          might be 1.0184x faster
   crypto-md5                                 2.5133+-0.0402     ?      2.5187+-0.0173     !      2.5992+-0.0468            2.5776+-0.0381        ? might be 1.0256x slower
   crypto-sha1                                2.6084+-0.0417     ?      2.7385+-0.1625            2.6805+-0.0518            2.6449+-0.0745        ? might be 1.0140x slower
   date-format-tofte                          6.1847+-0.4142     ?      6.4399+-0.1236     ?      6.7136+-0.1750            6.6706+-0.4083        ? might be 1.0786x slower
   date-format-xparb                          4.6070+-0.2506            4.4371+-0.1492            4.4120+-0.0738     ?      4.4294+-0.1453          might be 1.0401x faster
   math-cordic                                2.5641+-0.0689     ?      2.5730+-0.0916     ?      2.6283+-0.0221     ?      2.6530+-0.0511        ? might be 1.0347x slower
   math-partial-sums                          3.7917+-0.1702     ?      3.8841+-0.2335            3.8498+-0.0766     ?      4.1337+-0.6499        ? might be 1.0902x slower
   math-spectral-norm                         1.8965+-0.0226     ?      1.9354+-0.0990     ?      2.0190+-0.0574            1.9655+-0.0694        ? might be 1.0364x slower
   regexp-dna                                 6.0745+-0.1356            6.0070+-0.1102     ?      6.0284+-0.1866     ?      6.2696+-0.1622        ? might be 1.0321x slower
   string-base64                              4.4771+-0.5307            4.2825+-0.0575     ?      4.5188+-0.2182            4.3438+-0.1063          might be 1.0307x faster
   string-fasta                               5.1517+-0.1502     ?      5.2061+-0.0697     ?      5.3914+-0.1214            5.2718+-0.0423        ? might be 1.0233x slower
   string-tagcloud                            7.8049+-0.0987     ?      7.9655+-0.1094     ?      8.3491+-0.4816            7.9033+-0.1583        ? might be 1.0126x slower
   string-unpack-code                        17.8951+-1.3847           17.4709+-0.7121     ?     18.0605+-0.4680           17.9611+-0.7172        ?
   string-validate-input                      4.1502+-0.1498     ?      4.1524+-0.0445     ?      4.2147+-0.1484            4.0361+-0.0911          might be 1.0283x faster

   &lt;arithmetic&gt;                               4.2576+-0.0366     ?      4.2687+-0.0278     !      4.3593+-0.0369            4.3294+-0.0566        ? might be 1.0169x slower

                                                TipOfTree                    Old                     BumpNPop                 BumpNPop2             BumpNPop2 v. TipOfTree  
Octane:
   encrypt                                   0.14476+-0.00328    ?     0.14661+-0.00274    ?     0.14866+-0.00384    ?     0.14970+-0.00429       ? might be 1.0341x slower
   decrypt                                   2.57430+-0.03647    ?     2.61699+-0.01619          2.60539+-0.02770    ?     2.60710+-0.01603       ? might be 1.0127x slower
   deltablue                        x2       0.12266+-0.00192    ?     0.12526+-0.00207    ^     0.11981+-0.00228          0.11826+-0.00222       ^ definitely 1.0372x faster
   earley                                    0.26796+-0.00184    ?     0.27096+-0.00144    ^     0.24341+-0.00150    ?     0.24515+-0.00246       ^ definitely 1.0930x faster
   boyer                                     4.60767+-0.13332    ?     4.62969+-0.17402    ^     4.24718+-0.03132    ?     4.29252+-0.04687       ^ definitely 1.0734x faster
   navier-stokes                    x2       4.63936+-0.04316          4.60898+-0.02129          4.59540+-0.01736          4.59052+-0.01767         might be 1.0106x faster
   raytrace                         x2       0.75328+-0.00945          0.74596+-0.00391    ^     0.68460+-0.00952          0.68253+-0.00399       ^ definitely 1.1037x faster
   richards                         x2       0.07667+-0.00097    ?     0.07772+-0.00111    ?     0.07792+-0.00181          0.07734+-0.00169       ?
   splay                            x2       0.32063+-0.00271    !     0.32675+-0.00236    ?     0.32861+-0.00350          0.32777+-0.00377       ! definitely 1.0223x slower
   regexp                           x2      15.07482+-0.34836    ?    15.73560+-0.46811    ?    16.56263+-0.38962         15.64944+-0.82349       ? might be 1.0381x slower
   pdfjs                            x2      38.43163+-0.27050    !    39.27510+-0.34859    ?    39.41035+-0.17664         39.29058+-0.44678       ! definitely 1.0223x slower
   mandreel                         x2      39.58686+-0.34236         39.57227+-0.37747    ?    39.63965+-0.52755    ?    39.80746+-0.36685       ?
   gbemu                            x2      27.45948+-0.12615    !    28.79096+-0.08305         28.46024+-0.58094         27.92600+-0.20944       ! definitely 1.0170x slower
   closure                                   0.45384+-0.00254    ?     0.45704+-0.00190    !     0.47016+-0.00170    ^     0.45942+-0.00303       ! definitely 1.0123x slower
   jquery                                    6.13444+-0.04507    !     6.24461+-0.04501    !     6.40197+-0.03764    ^     6.28301+-0.03553       ! definitely 1.0242x slower
   box2d                            x2       8.62802+-0.10037    ?     8.68864+-0.04338          8.68134+-0.04807    ^     8.56835+-0.05126       
   zlib                             x2     345.31786+-10.89157   ?   346.37151+-4.46046    ?   353.48161+-4.17705        344.34608+-12.25836      
   typescript                       x2     574.15755+-8.85817    !   595.70988+-8.14278    ?   609.29163+-6.17972        602.61056+-9.12053       ! definitely 1.0496x slower

   &lt;geometric&gt;                               4.71940+-0.02306    !     4.79255+-0.01553    ^     4.75954+-0.01145    ^     4.70871+-0.03242         might be 1.0023x faster

                                                TipOfTree                    Old                     BumpNPop                 BumpNPop2             BumpNPop2 v. TipOfTree  
Kraken:
   ai-astar                                   82.688+-2.239             81.205+-1.463      !      91.049+-3.348      ?      92.126+-2.656         ! definitely 1.1141x slower
   audio-beat-detection                       35.630+-0.101      !      36.232+-0.257      ?      36.642+-1.233             36.340+-0.277         ! definitely 1.0199x slower
   audio-dft                                  96.561+-3.455             93.347+-2.870      ?      94.519+-4.170             92.440+-0.359         ^ definitely 1.0446x faster
   audio-fft                                  27.801+-0.252      ?      28.344+-0.666             28.194+-0.192      ?      28.910+-1.506         ? might be 1.0399x slower
   audio-oscillator                           44.757+-0.505      ?      45.813+-2.004             45.081+-0.432      ?      45.304+-0.492         ? might be 1.0122x slower
   imaging-darkroom                           56.623+-0.146             56.565+-0.190             56.531+-0.152      ?      57.403+-1.987         ? might be 1.0138x slower
   imaging-desaturate                         40.912+-0.272      ?      42.097+-2.699             40.808+-0.549             40.582+-0.223         
   imaging-gaussian-blur                      56.055+-3.222      ?      57.025+-0.132             55.727+-2.242      ?      56.284+-3.545         ?
   json-parse-financial                       31.786+-1.434             31.654+-0.261      ?      31.848+-0.728             30.983+-0.576           might be 1.0259x faster
   json-stringify-tinderbox                   20.884+-1.205      ?      22.496+-1.417             21.276+-1.426      ?      21.498+-2.061         ? might be 1.0294x slower
   stanford-crypto-aes                        34.299+-0.295      !      35.543+-0.256      ^      34.797+-0.384      ?      35.664+-1.610         ? might be 1.0398x slower
   stanford-crypto-ccm                        32.432+-0.341      ?      33.271+-1.802             33.055+-0.724             31.355+-2.422           might be 1.0343x faster
   stanford-crypto-pbkdf2                     87.356+-0.796      !      92.518+-2.405      ^      89.131+-0.219      ?      89.162+-0.797         ! definitely 1.0207x slower
   stanford-crypto-sha256-iterative           28.321+-0.205      !      29.007+-0.249             28.808+-0.142      ?      29.689+-1.990         ? might be 1.0483x slower

   &lt;arithmetic&gt;                               48.293+-0.481      ?      48.937+-0.323      ?      49.105+-0.507      ?      49.124+-0.678         ? might be 1.0172x slower

                                                TipOfTree                    Old                     BumpNPop                 BumpNPop2             BumpNPop2 v. TipOfTree  
Geomean of preferred means:
   &lt;scaled-result&gt;                            9.9002+-0.0668     ?     10.0038+-0.0400     ?     10.0622+-0.0436           10.0045+-0.0650        ? might be 1.0105x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219247</commentid>
    <comment_count>78</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-10 19:25:16 -0700</bug_when>
    <thetext>Next steps:

- Figure out the 10% ai-astar slow-down.  This seems like something I could easily fix.  It seems to be specific to bump&apos;n&apos;pop.  It&apos;s probably FTL-related, since the slow-down goes away with FTL disabled.

- Determine WTF is happening in SunSpider, and if it even matters when we run in browser.  Probably 2d-cube regression is real but that&apos;s not enough to explain everything.

- Run more benchmarks, like PLT, Speedometer, and ES6SampleBench.

- Tighten up the FTL allocation paths.  I think that we want the FTL allocation path to be a patchpoint.

- Explore sweeping totally empty blocks eagerly, and having a fast block reuse path.

- Maybe just finish eradicating copied space in this patch, since there&apos;s a chance that when we remove copying entirely, we&apos;ll get a bigger speed-up.

- Look at larger marked blocks again.

- Measure time spent in allocation slow paths in SunSpider.  It would be great to know if the allocation time went up!  Also measure the allocation time when we don&apos;t bottom out in the GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219537</commentid>
    <comment_count>79</comment_count>
      <attachid>285893</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-11 22:01:34 -0700</bug_when>
    <thetext>Created attachment 285893
bump&apos;n&apos;pop neutral on Kraken</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219666</commentid>
    <comment_count>80</comment_count>
      <attachid>285935</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-12 13:01:20 -0700</bug_when>
    <thetext>Created attachment 285935
getting all of WK to build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219708</commentid>
    <comment_count>81</comment_count>
      <attachid>285950</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-12 14:30:36 -0700</bug_when>
    <thetext>Created attachment 285950
da patch

I&apos;m hoping for a perfect score on EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219710</commentid>
    <comment_count>82</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-12 14:33:09 -0700</bug_when>
    <thetext>This patch modifies the JS builtins code generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-builtins-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219711</commentid>
    <comment_count>83</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-12 14:33:57 -0700</bug_when>
    <thetext>Attachment 285950 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8404:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8424:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:248:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:326:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2765:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2766:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:346:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:480:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:494:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 29 in 195 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>1219903</commentid>
    <comment_count>84</comment_count>
      <attachid>286010</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 16:42:49 -0700</bug_when>
    <thetext>Created attachment 286010
the patch

Fix some build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219904</commentid>
    <comment_count>85</comment_count>
      <attachid>286011</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 16:54:14 -0700</bug_when>
    <thetext>Created attachment 286011
the patch

More fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219907</commentid>
    <comment_count>86</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 18:38:17 -0700</bug_when>
    <thetext>I&apos;m working with some rebase hell right now.  Looks like stress/rest-parameter-many-arguments is failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219908</commentid>
    <comment_count>87</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 20:31:59 -0700</bug_when>
    <thetext>(In reply to comment #86)
&gt; I&apos;m working with some rebase hell right now.  Looks like
&gt; stress/rest-parameter-many-arguments is failing.

I think I fixed it.  It was a genuine bug, not a rebase artifact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219909</commentid>
    <comment_count>88</comment_count>
      <attachid>286012</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 20:51:54 -0700</bug_when>
    <thetext>Created attachment 286012
the patch

Rebased and fixed a problem with having a bad time that was revealed by debug testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219910</commentid>
    <comment_count>89</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-13 20:55:41 -0700</bug_when>
    <thetext>Attachment 286012 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 196 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>1219911</commentid>
    <comment_count>90</comment_count>
      <attachid>286013</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 21:15:36 -0700</bug_when>
    <thetext>Created attachment 286013
the patch

More fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219912</commentid>
    <comment_count>91</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-13 21:17:56 -0700</bug_when>
    <thetext>Attachment 286013 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 202 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>1219913</commentid>
    <comment_count>92</comment_count>
      <attachid>286014</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 21:29:58 -0700</bug_when>
    <thetext>Created attachment 286014
the patch

More fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219914</commentid>
    <comment_count>93</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-13 21:34:07 -0700</bug_when>
    <thetext>Attachment 286014 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 202 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>1219915</commentid>
    <comment_count>94</comment_count>
      <attachid>286015</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 21:52:31 -0700</bug_when>
    <thetext>Created attachment 286015
the patch

More fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219916</commentid>
    <comment_count>95</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-13 21:56:15 -0700</bug_when>
    <thetext>Attachment 286015 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 202 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>1219917</commentid>
    <comment_count>96</comment_count>
      <attachid>286016</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 22:10:11 -0700</bug_when>
    <thetext>Created attachment 286016
the patch

More fixes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219918</commentid>
    <comment_count>97</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-13 22:12:19 -0700</bug_when>
    <thetext>Attachment 286016 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 202 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>1219919</commentid>
    <comment_count>98</comment_count>
      <attachid>286017</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-13 22:36:33 -0700</bug_when>
    <thetext>Created attachment 286017
the patch

More fixes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219920</commentid>
    <comment_count>99</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-13 22:38:48 -0700</bug_when>
    <thetext>Attachment 286017 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 203 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>1219959</commentid>
    <comment_count>100</comment_count>
      <attachid>286033</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-14 15:36:50 -0700</bug_when>
    <thetext>Created attachment 286033
the patch

More things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219962</commentid>
    <comment_count>101</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-14 15:41:09 -0700</bug_when>
    <thetext>Attachment 286033 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 41 in 231 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>1219964</commentid>
    <comment_count>102</comment_count>
      <attachid>286034</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-14 15:47:09 -0700</bug_when>
    <thetext>Created attachment 286034
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219965</commentid>
    <comment_count>103</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-14 15:51:28 -0700</bug_when>
    <thetext>Attachment 286034 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 41 in 233 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>1219968</commentid>
    <comment_count>104</comment_count>
      <attachid>286036</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-14 16:04:24 -0700</bug_when>
    <thetext>Created attachment 286036
the patch

More fixes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219972</commentid>
    <comment_count>105</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-14 16:08:20 -0700</bug_when>
    <thetext>Attachment 286036 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 41 in 234 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>1219998</commentid>
    <comment_count>106</comment_count>
      <attachid>286048</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-14 19:17:52 -0700</bug_when>
    <thetext>Created attachment 286048
the patch

More fixes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219999</commentid>
    <comment_count>107</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-14 19:21:12 -0700</bug_when>
    <thetext>Attachment 286048 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 41 in 239 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>1220000</commentid>
    <comment_count>108</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-14 22:01:25 -0700</bug_when>
    <thetext>Man, it sure looks like Windows is still seeing Opcode.h from weird places.

I&apos;m taking more measures to make sure this won&apos;t happen.  It&apos;s *really weird* when Opcode.h gets included all over the place because it means that its generated artifacts also have to be available to include.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220003</commentid>
    <comment_count>109</comment_count>
      <attachid>286050</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 00:00:53 -0700</bug_when>
    <thetext>Created attachment 286050
the patch

Making more changes to remove accidental inclusion of so much JSC stuff from outside JSC.  I&apos;d rather fix these issues as they arise rather than work around them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220004</commentid>
    <comment_count>110</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 00:04:11 -0700</bug_when>
    <thetext>Attachment 286050 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:450:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 50 in 263 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>1220062</commentid>
    <comment_count>111</comment_count>
      <attachid>286063</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 10:18:47 -0700</bug_when>
    <thetext>Created attachment 286063
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220064</commentid>
    <comment_count>112</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 10:22:19 -0700</bug_when>
    <thetext>Attachment 286063 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:450:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 50 in 263 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>1220072</commentid>
    <comment_count>113</comment_count>
      <attachid>286067</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 10:49:06 -0700</bug_when>
    <thetext>Created attachment 286067
the patch

Rebased again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220073</commentid>
    <comment_count>114</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 10:53:12 -0700</bug_when>
    <thetext>Attachment 286067 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:450:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 50 in 266 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>1220084</commentid>
    <comment_count>115</comment_count>
      <attachid>286069</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 11:22:15 -0700</bug_when>
    <thetext>Created attachment 286069
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220085</commentid>
    <comment_count>116</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 11:24:54 -0700</bug_when>
    <thetext>Attachment 286069 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5411:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5426:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5429:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5480:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5495:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5500:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5512:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:450:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 50 in 266 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>1220104</commentid>
    <comment_count>117</comment_count>
      <attachid>286074</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 12:03:44 -0700</bug_when>
    <thetext>Created attachment 286074
the patch

More fixes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220105</commentid>
    <comment_count>118</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 12:08:06 -0700</bug_when>
    <thetext>Attachment 286074 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5410:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5425:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5428:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5479:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5494:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5499:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5511:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:450:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 50 in 267 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>1220131</commentid>
    <comment_count>119</comment_count>
      <attachid>286087</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 13:31:52 -0700</bug_when>
    <thetext>Created attachment 286087
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220133</commentid>
    <comment_count>120</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 13:35:09 -0700</bug_when>
    <thetext>Attachment 286087 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5410:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5425:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5428:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:325:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5479:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5494:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5499:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5511:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12910:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12925:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:450:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:483:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 50 in 275 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>1220190</commentid>
    <comment_count>121</comment_count>
      <attachid>286087</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 15:41:03 -0700</bug_when>
    <thetext>Comment on attachment 286087
the patch

Oh no!  This breaks Speedometer!  I&apos;m going to investigate this super-reproducible crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220200</commentid>
    <comment_count>122</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 15:52:06 -0700</bug_when>
    <thetext>I&apos;ve got a no-JIT crash in the EmberJS-TodoMVC test in Speedometer.  Should be fun...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220202</commentid>
    <comment_count>123</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 15:56:43 -0700</bug_when>
    <thetext>It happens even with bump disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220210</commentid>
    <comment_count>124</comment_count>
      <attachid>286087</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-08-15 16:14:24 -0700</bug_when>
    <thetext>Comment on attachment 286087
the patch

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

I think it should be a priority to remove CopiedSpace soon -- both for the potential speedup you mention and to fight entropy and reduce technical debt.

&gt; Source/JavaScriptCore/ChangeLog:38
&gt; +          requested length can&apos;t just be fulfilled with the current allocation size. This safegoard

safeguard

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8494
&gt; +        DFG_ASSERT(m_graph, m_node, allocator); // It would be CRAZY if the class was too large!

Since this is a function template, can we also static_assert that our size is smaller than the largest GC size?

Might also be nice for allocateCell&lt;T&gt; to do the same, to validate our believe that no callee is a large object.

&gt; Source/JavaScriptCore/heap/MarkedSpace.cpp:247
&gt; +void MarkedSpace::sweepABit()
&gt; +{
&gt; +    sweepLargeAllocations();
&gt; +}

I think it would be clearer to remove this function and call sweepLargeAllocations() directly.

The point here is that large allocations are not recycled, so you have to sweep them manually.

&gt; Source/JavaScriptCore/runtime/AuxiliaryBarrier.h:34
&gt; +// it, other than interpreting a falsish value as not need a barrier. It&apos;s OK to use this for either

falsy

not needing

&gt; Source/JavaScriptCore/runtime/AuxiliaryBarrierInlines.h:48
&gt; +template&lt;typename T&gt;
&gt; +template&lt;typename U&gt;
&gt; +AuxiliaryBarrier&lt;T&gt;::AuxiliaryBarrier(VM&amp; vm, JSCell* owner, U&amp;&amp; value)
&gt; +{
&gt; +    m_value = std::forward&lt;U&gt;(value);
&gt; +    vm.heap.writeBarrier(owner);
&gt; +}
&gt; +
&gt; +template&lt;typename T&gt;
&gt; +template&lt;typename U&gt;
&gt; +void AuxiliaryBarrier&lt;T&gt;::set(VM&amp; vm, JSCell* owner, U&amp;&amp; value)
&gt; +{
&gt; +    m_value = std::forward&lt;U&gt;(value);
&gt; +    vm.heap.writeBarrier(owner);
&gt; +}

I think you forgot the check for &quot;falsy value not needing a barrier&quot;, no?

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:48
&gt; +#if 0
&gt; +#define LOGIT() dataLog(RawPointer(this), &quot;: &quot;, WTF_PRETTY_FUNCTION, &quot;\n&quot;);
&gt; +#else
&gt; +#define LOGIT() do { } while(false)
&gt; +#endif

This macro and its callers seem just below the threshold of something that should land.

&gt; Source/JavaScriptCore/runtime/Operations.h:209
&gt;  
&gt; +inline bool resetFreeCellsBadly()
&gt; +{
&gt; +    return !ASSERT_DISABLED || Options::resetFreeCellsBadly();
&gt; +}
&gt; +
&gt; +inline void resetBadly(void* base, size_t size)
&gt; +{
&gt; +    for (size_t i = size / sizeof(EncodedJSValue); i--;) {
&gt; +        static_cast&lt;EncodedJSValue*&gt;(base)[i] = JSValue::encode(
&gt; +            bitwise_cast&lt;JSCell*&gt;(static_cast&lt;intptr_t&gt;(666 * 8)));
&gt; +    }
&gt; +}

Let&apos;s call this &quot;scribbleFreeCells&quot; because &quot;badly&quot; is vague and MallocScribble is a thing on Darwin.

Can we use 0xbbadbeef since that&apos;s our ASSERT marker in other places?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220212</commentid>
    <comment_count>125</comment_count>
      <attachid>286087</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-08-15 16:15:31 -0700</bug_when>
    <thetext>Comment on attachment 286087
the patch

r- because of the crash, but I&apos;m happy with this patch once the crash and comments are addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220294</commentid>
    <comment_count>126</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 18:51:48 -0700</bug_when>
    <thetext>(In reply to comment #124)
&gt; Comment on attachment 286087 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=286087&amp;action=review
&gt; 
&gt; I think it should be a priority to remove CopiedSpace soon -- both for the
&gt; potential speedup you mention and to fight entropy and reduce technical debt.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:38
&gt; &gt; +          requested length can&apos;t just be fulfilled with the current allocation size. This safegoard
&gt; 
&gt; safeguard
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8494
&gt; &gt; +        DFG_ASSERT(m_graph, m_node, allocator); // It would be CRAZY if the class was too large!
&gt; 
&gt; Since this is a function template, can we also static_assert that our size
&gt; is smaller than the largest GC size?
&gt; 
&gt; Might also be nice for allocateCell&lt;T&gt; to do the same, to validate our
&gt; believe that no callee is a large object.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedSpace.cpp:247
&gt; &gt; +void MarkedSpace::sweepABit()
&gt; &gt; +{
&gt; &gt; +    sweepLargeAllocations();
&gt; &gt; +}
&gt; 
&gt; I think it would be clearer to remove this function and call
&gt; sweepLargeAllocations() directly.
&gt; 
&gt; The point here is that large allocations are not recycled, so you have to
&gt; sweep them manually.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/AuxiliaryBarrier.h:34
&gt; &gt; +// it, other than interpreting a falsish value as not need a barrier. It&apos;s OK to use this for either
&gt; 
&gt; falsy
&gt; 
&gt; not needing
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/AuxiliaryBarrierInlines.h:48
&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +template&lt;typename U&gt;
&gt; &gt; +AuxiliaryBarrier&lt;T&gt;::AuxiliaryBarrier(VM&amp; vm, JSCell* owner, U&amp;&amp; value)
&gt; &gt; +{
&gt; &gt; +    m_value = std::forward&lt;U&gt;(value);
&gt; &gt; +    vm.heap.writeBarrier(owner);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +template&lt;typename U&gt;
&gt; &gt; +void AuxiliaryBarrier&lt;T&gt;::set(VM&amp; vm, JSCell* owner, U&amp;&amp; value)
&gt; &gt; +{
&gt; &gt; +    m_value = std::forward&lt;U&gt;(value);
&gt; &gt; +    vm.heap.writeBarrier(owner);
&gt; &gt; +}
&gt; 
&gt; I think you forgot the check for &quot;falsy value not needing a barrier&quot;, no?
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSArray.cpp:48
&gt; &gt; +#if 0
&gt; &gt; +#define LOGIT() dataLog(RawPointer(this), &quot;: &quot;, WTF_PRETTY_FUNCTION, &quot;\n&quot;);
&gt; &gt; +#else
&gt; &gt; +#define LOGIT() do { } while(false)
&gt; &gt; +#endif
&gt; 
&gt; This macro and its callers seem just below the threshold of something that
&gt; should land.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Operations.h:209
&gt; &gt;  
&gt; &gt; +inline bool resetFreeCellsBadly()
&gt; &gt; +{
&gt; &gt; +    return !ASSERT_DISABLED || Options::resetFreeCellsBadly();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +inline void resetBadly(void* base, size_t size)
&gt; &gt; +{
&gt; &gt; +    for (size_t i = size / sizeof(EncodedJSValue); i--;) {
&gt; &gt; +        static_cast&lt;EncodedJSValue*&gt;(base)[i] = JSValue::encode(
&gt; &gt; +            bitwise_cast&lt;JSCell*&gt;(static_cast&lt;intptr_t&gt;(666 * 8)));
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; Let&apos;s call this &quot;scribbleFreeCells&quot; because &quot;badly&quot; is vague and
&gt; MallocScribble is a thing on Darwin.
&gt; 
&gt; Can we use 0xbbadbeef since that&apos;s our ASSERT marker in other places?

Thanks for the feedback!  All sounds sensible.  I&apos;ll address it once I figure out the crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220295</commentid>
    <comment_count>127</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 18:52:06 -0700</bug_when>
    <thetext>Still crashes with gengc disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220298</commentid>
    <comment_count>128</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 19:03:31 -0700</bug_when>
    <thetext>(In reply to comment #124)
&gt; &gt; Source/JavaScriptCore/runtime/Operations.h:209
&gt; &gt;  
&gt; &gt; +inline bool resetFreeCellsBadly()
&gt; &gt; +{
&gt; &gt; +    return !ASSERT_DISABLED || Options::resetFreeCellsBadly();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +inline void resetBadly(void* base, size_t size)
&gt; &gt; +{
&gt; &gt; +    for (size_t i = size / sizeof(EncodedJSValue); i--;) {
&gt; &gt; +        static_cast&lt;EncodedJSValue*&gt;(base)[i] = JSValue::encode(
&gt; &gt; +            bitwise_cast&lt;JSCell*&gt;(static_cast&lt;intptr_t&gt;(666 * 8)));
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; Let&apos;s call this &quot;scribbleFreeCells&quot; because &quot;badly&quot; is vague and
&gt; MallocScribble is a thing on Darwin.
&gt; 
&gt; Can we use 0xbbadbeef since that&apos;s our ASSERT marker in other places?

Actually, I don&apos;t think we want to!  0xbbadbeef, and anything that ends in beef, will not pass the JSC cell check, since if the second-lowest bit (0x2) is set, then we assume that it might be a false-true-undefined-null value.

We could do 0xbbadbeef * 16, aka 0xbbadbeef0, or even 0xbadbeef0.  But on 32-bit, that could be an actual pointer value.  That&apos;s sort of why I picked 666 * 8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220349</commentid>
    <comment_count>129</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-15 21:29:06 -0700</bug_when>
    <thetext>I found the bug.  It&apos;s not a big deal: concatMemcpy was assuming it could memcpy from a Undecided array to a non-Undecided array, which doesn&apos;t actually work, since the Undecided array has garbage in it.  This code just needed an extra check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220490</commentid>
    <comment_count>130</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-08-16 10:46:14 -0700</bug_when>
    <thetext>&gt; &gt; Can we use 0xbbadbeef since that&apos;s our ASSERT marker in other places?
&gt; 
&gt; Actually, I don&apos;t think we want to!  0xbbadbeef, and anything that ends in
&gt; beef, will not pass the JSC cell check, since if the second-lowest bit (0x2)
&gt; is set, then we assume that it might be a false-true-undefined-null value.
&gt; 
&gt; We could do 0xbbadbeef * 16, aka 0xbbadbeef0, or even 0xbadbeef0.  But on
&gt; 32-bit, that could be an actual pointer value.  That&apos;s sort of why I picked
&gt; 666 * 8.

0xbbadbeef0 and 0xbadbeef0 would be close enough to call out being ASSERT markers.

666 * 8 actually can be a pointer on Darwin since it&apos;s beyond the 4kB NULL page -- though both 666 * 8 and 0xbad????? are not pointers in practice on Darwin.

I think the only guaranteed non-pointer on Darwin 32-bit is something like 0x00000bad, since that&apos;s in the unmapped NULL page.

I suppose all our 0xbadbeef ASSERT markers have the potential to point to mapped memory and therefore not crash 100% -- but I think the value of consistency probably outweighs that small risk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220491</commentid>
    <comment_count>131</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-08-16 10:52:40 -0700</bug_when>
    <thetext>
&gt; I suppose all our 0xbadbeef ASSERT markers have the potential to point to
&gt; mapped memory and therefore not crash 100% -- but I think the value of
&gt; consistency probably outweighs that small risk.

They follow on the assignment with a __builtin_trap() to be safe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220534</commentid>
    <comment_count>132</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-16 12:40:13 -0700</bug_when>
    <thetext>(In reply to comment #130)
&gt; &gt; &gt; Can we use 0xbbadbeef since that&apos;s our ASSERT marker in other places?
&gt; &gt; 
&gt; &gt; Actually, I don&apos;t think we want to!  0xbbadbeef, and anything that ends in
&gt; &gt; beef, will not pass the JSC cell check, since if the second-lowest bit (0x2)
&gt; &gt; is set, then we assume that it might be a false-true-undefined-null value.
&gt; &gt; 
&gt; &gt; We could do 0xbbadbeef * 16, aka 0xbbadbeef0, or even 0xbadbeef0.  But on
&gt; &gt; 32-bit, that could be an actual pointer value.  That&apos;s sort of why I picked
&gt; &gt; 666 * 8.
&gt; 
&gt; 0xbbadbeef0 and 0xbadbeef0 would be close enough to call out being ASSERT
&gt; markers.
&gt; 
&gt; 666 * 8 actually can be a pointer on Darwin since it&apos;s beyond the 4kB NULL
&gt; page -- though both 666 * 8 and 0xbad????? are not pointers in practice on
&gt; Darwin.
&gt; 
&gt; I think the only guaranteed non-pointer on Darwin 32-bit is something like
&gt; 0x00000bad, since that&apos;s in the unmapped NULL page.
&gt; 
&gt; I suppose all our 0xbadbeef ASSERT markers have the potential to point to
&gt; mapped memory and therefore not crash 100% -- but I think the value of
&gt; consistency probably outweighs that small risk.

I&apos;ll use 0xbadbeef0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220538</commentid>
    <comment_count>133</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-16 12:46:38 -0700</bug_when>
    <thetext>(In reply to comment #124)
&gt; Comment on attachment 286087 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=286087&amp;action=review
&gt; 
&gt; I think it should be a priority to remove CopiedSpace soon -- both for the
&gt; potential speedup you mention and to fight entropy and reduce technical debt.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:38
&gt; &gt; +          requested length can&apos;t just be fulfilled with the current allocation size. This safegoard
&gt; 
&gt; safeguard

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8494
&gt; &gt; +        DFG_ASSERT(m_graph, m_node, allocator); // It would be CRAZY if the class was too large!
&gt; 
&gt; Since this is a function template, can we also static_assert that our size
&gt; is smaller than the largest GC size?

Can&apos;t do it.  Notice that this function takes a dynamic size argument.

&gt; 
&gt; Might also be nice for allocateCell&lt;T&gt; to do the same, to validate our
&gt; believe that no callee is a large object.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedSpace.cpp:247
&gt; &gt; +void MarkedSpace::sweepABit()
&gt; &gt; +{
&gt; &gt; +    sweepLargeAllocations();
&gt; &gt; +}
&gt; 
&gt; I think it would be clearer to remove this function and call
&gt; sweepLargeAllocations() directly.
&gt; 
&gt; The point here is that large allocations are not recycled, so you have to
&gt; sweep them manually.

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/AuxiliaryBarrier.h:34
&gt; &gt; +// it, other than interpreting a falsish value as not need a barrier. It&apos;s OK to use this for either
&gt; 
&gt; falsy
&gt; 
&gt; not needing

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/AuxiliaryBarrierInlines.h:48
&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +template&lt;typename U&gt;
&gt; &gt; +AuxiliaryBarrier&lt;T&gt;::AuxiliaryBarrier(VM&amp; vm, JSCell* owner, U&amp;&amp; value)
&gt; &gt; +{
&gt; &gt; +    m_value = std::forward&lt;U&gt;(value);
&gt; &gt; +    vm.heap.writeBarrier(owner);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +template&lt;typename U&gt;
&gt; &gt; +void AuxiliaryBarrier&lt;T&gt;::set(VM&amp; vm, JSCell* owner, U&amp;&amp; value)
&gt; &gt; +{
&gt; &gt; +    m_value = std::forward&lt;U&gt;(value);
&gt; &gt; +    vm.heap.writeBarrier(owner);
&gt; &gt; +}
&gt; 
&gt; I think you forgot the check for &quot;falsy value not needing a barrier&quot;, no?

Extra branch on the value versus extra branch on the owner.

The comment about falsy values is in regards to the clear() method, which has no barrier.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSArray.cpp:48
&gt; &gt; +#if 0
&gt; &gt; +#define LOGIT() dataLog(RawPointer(this), &quot;: &quot;, WTF_PRETTY_FUNCTION, &quot;\n&quot;);
&gt; &gt; +#else
&gt; &gt; +#define LOGIT() do { } while(false)
&gt; &gt; +#endif
&gt; 
&gt; This macro and its callers seem just below the threshold of something that
&gt; should land.

I&apos;ll remove them.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Operations.h:209
&gt; &gt;  
&gt; &gt; +inline bool resetFreeCellsBadly()
&gt; &gt; +{
&gt; &gt; +    return !ASSERT_DISABLED || Options::resetFreeCellsBadly();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +inline void resetBadly(void* base, size_t size)
&gt; &gt; +{
&gt; &gt; +    for (size_t i = size / sizeof(EncodedJSValue); i--;) {
&gt; &gt; +        static_cast&lt;EncodedJSValue*&gt;(base)[i] = JSValue::encode(
&gt; &gt; +            bitwise_cast&lt;JSCell*&gt;(static_cast&lt;intptr_t&gt;(666 * 8)));
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; Let&apos;s call this &quot;scribbleFreeCells&quot; because &quot;badly&quot; is vague and
&gt; MallocScribble is a thing on Darwin.

I called it scribble.

&gt; 
&gt; Can we use 0xbbadbeef since that&apos;s our ASSERT marker in other places?

I used 0xbadbeef0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220542</commentid>
    <comment_count>134</comment_count>
      <attachid>286195</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-16 12:59:15 -0700</bug_when>
    <thetext>Created attachment 286195
the patch

Addresses review feedback, fixed the goofy Speedometer crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220543</commentid>
    <comment_count>135</comment_count>
      <attachid>286195</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-16 13:01:13 -0700</bug_when>
    <thetext>Comment on attachment 286195
the patch

No need for another review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220544</commentid>
    <comment_count>136</comment_count>
      <attachid>286196</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-16 13:09:35 -0700</bug_when>
    <thetext>Created attachment 286196
the patch

Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220545</commentid>
    <comment_count>137</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-16 13:12:55 -0700</bug_when>
    <thetext>Attachment 286196 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5418:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5433:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5436:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:248:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:326:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5479:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5494:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5499:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5511:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12952:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12967:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:450:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:344:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:478:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:492:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 50 in 276 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>1220552</commentid>
    <comment_count>138</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-16 13:26:14 -0700</bug_when>
    <thetext>(In reply to comment #124)
&gt; Comment on attachment 286087 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=286087&amp;action=review
&gt; 
&gt; I think it should be a priority to remove CopiedSpace soon -- both for the
&gt; potential speedup you mention and to fight entropy and reduce technical debt.

I forgot to reply to this earlier.  My plan is to do one patch per client of CopiedSpace.  Next up are typed arrays.

I started with butterflies because I knew they would be hardest, but it&apos;s still possible that the typed array patch will turn into another ordeal! ;-)

The current list of clients is:

enum CopyToken {
    TypedArrayVectorCopyToken,
    MapBackingStoreCopyToken,
    DirectArgumentsOverridesCopyToken
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220720</commentid>
    <comment_count>139</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-16 19:18:39 -0700</bug_when>
    <thetext>Well it looks like I&apos;m going to have more pain to deal with.  The patch is a ~2% Speedometer regression. :-(

It looks like I can get rid of some of that regression by enabling LargeAllocation for smaller sizes.  I&apos;m playing with that right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221017</commentid>
    <comment_count>140</comment_count>
      <attachid>286351</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-17 17:46:18 -0700</bug_when>
    <thetext>Created attachment 286351
the patch

Neutral JetStream, neutral Speedometer, progression on Octane, tiny regression on Kraken, big regression on SunSpider (5%).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221019</commentid>
    <comment_count>141</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-17 17:50:09 -0700</bug_when>
    <thetext>Attachment 286351 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8438:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8458:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5416:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5431:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5434:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:248:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:326:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5477:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5492:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5497:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5509:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/RegExpMatchesArray.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12952:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:12967:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:450:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:365:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:499:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:513:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/ConservativeRoots.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 50 in 276 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>1221020</commentid>
    <comment_count>142</comment_count>
      <attachid>286351</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-17 18:00:26 -0700</bug_when>
    <thetext>Comment on attachment 286351
the patch

This doesn&apos;t need another review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221031</commentid>
    <comment_count>143</comment_count>
      <attachid>286351</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-17 19:00:03 -0700</bug_when>
    <thetext>Comment on attachment 286351
the patch

Attachment 286351 did not pass mac-ews (mac):
Output: http://webkit-queues.webkit.org/results/1890042

New failing tests:
webgl/1.0.2/conformance/context/constants.html
js/regress/lots-of-fields.html
fast/workers/worker-terminate-forever.html
fast/workers/worker-document-leak.html
fast/canvas/webgl/constants.html
fast/workers/dedicated-worker-lifecycle.html
fast/workers/worker-lifecycle.html
fast/workers/worker-close-more.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221032</commentid>
    <comment_count>144</comment_count>
      <attachid>286354</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-17 19:00:15 -0700</bug_when>
    <thetext>Created attachment 286354
Archive of layout-test-results from ews101 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews101  Port: mac-yosemite  Platform: Mac OS X 10.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221034</commentid>
    <comment_count>145</comment_count>
      <attachid>286351</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-17 19:03:57 -0700</bug_when>
    <thetext>Comment on attachment 286351
the patch

Attachment 286351 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.webkit.org/results/1890046

New failing tests:
webgl/1.0.2/conformance/context/constants.html
js/regress/lots-of-fields.html
fast/workers/worker-terminate-forever.html
fast/workers/worker-document-leak.html
fast/canvas/webgl/constants.html
fast/workers/dedicated-worker-lifecycle.html
fast/workers/worker-lifecycle.html
fast/workers/worker-close-more.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221035</commentid>
    <comment_count>146</comment_count>
      <attachid>286356</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-17 19:04:08 -0700</bug_when>
    <thetext>Created attachment 286356
Archive of layout-test-results from ews105 for mac-yosemite-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews105  Port: mac-yosemite-wk2  Platform: Mac OS X 10.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221040</commentid>
    <comment_count>147</comment_count>
      <attachid>286351</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-17 19:51:50 -0700</bug_when>
    <thetext>Comment on attachment 286351
the patch

Attachment 286351 did not pass ios-sim-ews (ios-simulator-wk2):
Output: http://webkit-queues.webkit.org/results/1890113

New failing tests:
js/regress/lots-of-fields.html
fast/workers/dedicated-worker-lifecycle.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221041</commentid>
    <comment_count>148</comment_count>
      <attachid>286359</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-17 19:52:01 -0700</bug_when>
    <thetext>Created attachment 286359
Archive of layout-test-results from ews123 for ios-simulator-elcapitan-wk2

The attached test failures were seen while running run-webkit-tests on the ios-sim-ews.
Bot: ews123  Port: ios-simulator-elcapitan-wk2  Platform: Mac OS X 10.11.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221048</commentid>
    <comment_count>149</comment_count>
      <attachid>286351</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-17 21:53:11 -0700</bug_when>
    <thetext>Comment on attachment 286351
the patch

Attachment 286351 did not pass ios-sim-ews (ios-simulator-wk2):
Output: http://webkit-queues.webkit.org/results/1890582

New failing tests:
js/regress/lots-of-fields.html
fast/workers/dedicated-worker-lifecycle.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221049</commentid>
    <comment_count>150</comment_count>
      <attachid>286362</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-17 21:53:20 -0700</bug_when>
    <thetext>Created attachment 286362
Archive of layout-test-results from ews124 for ios-simulator-elcapitan-wk2

The attached test failures were seen while running run-webkit-tests on the ios-sim-ews.
Bot: ews124  Port: ios-simulator-elcapitan-wk2  Platform: Mac OS X 10.11.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221962</commentid>
    <comment_count>151</comment_count>
      <attachid>286617</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-22 13:53:11 -0700</bug_when>
    <thetext>Created attachment 286617
the patch

Rebased again.  I&apos;m getting close to being able to land this.  I still have to run PLT and membuster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221964</commentid>
    <comment_count>152</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-22 14:00:09 -0700</bug_when>
    <thetext>Attachment 286617 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5415:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5430:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5433:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5476:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5491:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5496:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5508:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 37 in 275 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>1221990</commentid>
    <comment_count>153</comment_count>
      <attachid>286617</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-22 15:07:41 -0700</bug_when>
    <thetext>Comment on attachment 286617
the patch

Attachment 286617 did not pass mac-ews (mac):
Output: http://webkit-queues.webkit.org/results/1922936

New failing tests:
fast/workers/worker-close-more.html
fast/workers/worker-terminate-forever.html
fast/workers/worker-document-leak.html
fast/workers/dedicated-worker-lifecycle.html
fast/workers/worker-lifecycle.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221991</commentid>
    <comment_count>154</comment_count>
      <attachid>286626</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-22 15:07:54 -0700</bug_when>
    <thetext>Created attachment 286626
Archive of layout-test-results from ews102 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews102  Port: mac-yosemite  Platform: Mac OS X 10.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221992</commentid>
    <comment_count>155</comment_count>
      <attachid>286617</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-22 15:09:09 -0700</bug_when>
    <thetext>Comment on attachment 286617
the patch

Attachment 286617 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.webkit.org/results/1922944

New failing tests:
fast/workers/worker-close-more.html
fast/workers/worker-terminate-forever.html
fast/workers/worker-document-leak.html
fast/workers/dedicated-worker-lifecycle.html
fast/workers/worker-lifecycle.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221993</commentid>
    <comment_count>156</comment_count>
      <attachid>286627</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-22 15:09:18 -0700</bug_when>
    <thetext>Created attachment 286627
Archive of layout-test-results from ews104 for mac-yosemite-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews104  Port: mac-yosemite-wk2  Platform: Mac OS X 10.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222006</commentid>
    <comment_count>157</comment_count>
      <attachid>286631</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-22 15:29:25 -0700</bug_when>
    <thetext>Created attachment 286631
the patch

Added some fixes for finalizing large allocations.  The last-minute change to reduce the large allocation threshold is still causing some fallout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222008</commentid>
    <comment_count>158</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-22 15:32:48 -0700</bug_when>
    <thetext>Attachment 286631 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5415:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5430:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5433:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5488:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5493:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5505:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 36 in 275 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>1222015</commentid>
    <comment_count>159</comment_count>
      <attachid>286633</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-22 15:59:58 -0700</bug_when>
    <thetext>Created attachment 286633
the patch

More fixes for large allocations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222020</commentid>
    <comment_count>160</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-22 16:03:33 -0700</bug_when>
    <thetext>Attachment 286633 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5415:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5430:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5433:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5488:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5493:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5505:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 36 in 275 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>1222038</commentid>
    <comment_count>161</comment_count>
      <attachid>286633</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-22 17:05:30 -0700</bug_when>
    <thetext>Comment on attachment 286633
the patch

Attachment 286633 did not pass mac-debug-ews (mac):
Output: http://webkit-queues.webkit.org/results/1923524

Number of test failures exceeded the failure limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222039</commentid>
    <comment_count>162</comment_count>
      <attachid>286640</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-08-22 17:05:40 -0700</bug_when>
    <thetext>Created attachment 286640
Archive of layout-test-results from ews112 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews112  Port: mac-yosemite  Platform: Mac OS X 10.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222334</commentid>
    <comment_count>163</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-23 11:57:58 -0700</bug_when>
    <thetext>(In reply to comment #162)
&gt; Created attachment 286640 [details]
&gt; Archive of layout-test-results from ews112 for mac-yosemite
&gt; 
&gt; The attached test failures were seen while running run-webkit-tests on the
&gt; mac-debug-ews.
&gt; Bot: ews112  Port: mac-yosemite  Platform: Mac OS X 10.10.5

Fixed.  UnlinkedCodeBlock was using MarkedBlock::blockFor().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222355</commentid>
    <comment_count>164</comment_count>
      <attachid>286754</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-23 12:20:01 -0700</bug_when>
    <thetext>Created attachment 286754
patch for landing

OMG everything looks so ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222357</commentid>
    <comment_count>165</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-23 12:25:13 -0700</bug_when>
    <thetext>Attachment 286754 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5399:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5414:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5417:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5472:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5477:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5489:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:637:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2761:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2762:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:449:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 36 in 275 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>1222369</commentid>
    <comment_count>166</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-23 12:54:33 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/204854</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222392</commentid>
    <comment_count>167</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-23 13:44:25 -0700</bug_when>
    <thetext>CLoop fix in http://trac.webkit.org/changeset/204856</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222764</commentid>
    <comment_count>168</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-24 12:03:05 -0700</bug_when>
    <thetext>Rolled out in https://trac.webkit.org/changeset/204912</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222973</commentid>
    <comment_count>169</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-24 21:46:15 -0700</bug_when>
    <thetext>It looks like the membuster regression was due to changing the blockSize to 16KB.

I&apos;m going to examine in greater detail what the performance is across a bunch of benchmarks with smaller block sizes.  I&apos;m going to try 16KB and 4KB.

I also want to know:

- What&apos;s the peak memory usage in Speedometer and JetStream with tip of tree and the various versions of this patch?
- How much of the perf loss for smaller blockSize settings is because we no longer have the MarkedBlock cache?  Maybe the differences in perf arise from bmalloc quirks that could be sidestepped if we allocated directly from the OS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223104</commentid>
    <comment_count>170</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-08-25 10:08:02 -0700</bug_when>
    <thetext>&gt; - How much of the perf loss for smaller blockSize settings is because we no
&gt; longer have the MarkedBlock cache?  Maybe the differences in perf arise from
&gt; bmalloc quirks that could be sidestepped if we allocated directly from the
&gt; OS.

FWIW, at the time I removed the MarkedBlock cache, the result was perf-neutral. In bmalloc, all allocations &lt;= 32kB allocate from a reasonably fast path.

Perhaps smaller block sizes punish large-ish objects, since so few objects fit per block? If so, maybe we can get a speedup from variable block sizes.

Or maybe smaller block sizes waste more space in the metadata region?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223115</commentid>
    <comment_count>171</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-08-25 10:18:18 -0700</bug_when>
    <thetext>If the configuration that runs slower is the configuration that returns more memory to the OS, maybe it&apos;s the memory returning that causes the slowdown.

You can test this theory by comparing (small blocks) vs (small blocks with bmalloc::Heap::scavenge() changed to do nothing).

For example, if the concurrent scavenger runs too soon, even while the benchmark is still touching pages, maybe that&apos;s a slowdown, and 64kB blocks avoids the slowdown by making all the blocks unreclaimable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223123</commentid>
    <comment_count>172</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-25 10:47:04 -0700</bug_when>
    <thetext>(In reply to comment #170)
&gt; &gt; - How much of the perf loss for smaller blockSize settings is because we no
&gt; &gt; longer have the MarkedBlock cache?  Maybe the differences in perf arise from
&gt; &gt; bmalloc quirks that could be sidestepped if we allocated directly from the
&gt; &gt; OS.
&gt; 
&gt; FWIW, at the time I removed the MarkedBlock cache, the result was
&gt; perf-neutral. In bmalloc, all allocations &lt;= 32kB allocate from a reasonably
&gt; fast path.

Buy that&apos;s with CopiedSpace butterflies and CopiedSpace uses larger blocks. Also, I wonder what MarkedBlock::blockSize was back then. 

&gt; 
&gt; Perhaps smaller block sizes punish large-ish objects, since so few objects
&gt; fit per block? If so, maybe we can get a speedup from variable block sizes.

All tested configurations have a large allocation cutoff at 400 bytes. 

&gt; 
&gt; Or maybe smaller block sizes waste more space in the metadata region?

I did the math at some point at this seemed negligible. Also, smaller block sizes consistently yield lower memory usage. I&apos;m seeing significant membusyer progressions from 4KB block sizes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223125</commentid>
    <comment_count>173</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-25 10:49:02 -0700</bug_when>
    <thetext>(In reply to comment #171)
&gt; If the configuration that runs slower is the configuration that returns more
&gt; memory to the OS, maybe it&apos;s the memory returning that causes the slowdown.
&gt; 
&gt; You can test this theory by comparing (small blocks) vs (small blocks with
&gt; bmalloc::Heap::scavenge() changed to do nothing).
&gt; 
&gt; For example, if the concurrent scavenger runs too soon, even while the
&gt; benchmark is still touching pages, maybe that&apos;s a slowdown, and 64kB blocks
&gt; avoids the slowdown by making all the blocks unreclaimable.

I&apos;m really sympathetic to using malloc under the collector. But if I start messing with the lifecycle of MarkedBlocks, I think we will want to go back to using PageAllocation or similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223221</commentid>
    <comment_count>174</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-25 14:10:06 -0700</bug_when>
    <thetext>It looks like the problem is that clearing mark bits takes a *lot longer* when the blockSize is 4KB.

Theories:
- Clang appears to emit an actual call to memset (or a specialized friend, not sure yet) when 64KB, but emits an inline sled of stores when 4KB.  Maybe the memset is doing non-temporal stores or some other optimization to amortize the cost?
- Could be as simple as the bits being further apart. We could put the bits in a table on the side if we knew for sure that this was the problem.

I think that other things may also be taking longer, but I haven&apos;t fully investigated those yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223238</commentid>
    <comment_count>175</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-08-25 14:36:24 -0700</bug_when>
    <thetext>&gt; I&apos;m really sympathetic to using malloc under the collector. But if I start
&gt; messing with the lifecycle of MarkedBlocks, I think we will want to go back
&gt; to using PageAllocation or similar.

Sure -- but even then, you&apos;ll want to know if returning memory to the OS is an important bottleneck, since you&apos;ll have to reproduce that behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223239</commentid>
    <comment_count>176</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-08-25 14:37:44 -0700</bug_when>
    <thetext>64bytes * 8bitsperbyte * 16bytesperatom = 8kB.

So, any block size less than 8kB wastes part of the mark bit cache line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223271</commentid>
    <comment_count>177</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-25 15:12:23 -0700</bug_when>
    <thetext>Here&apos;s a basic stat that demonstrates the problem with small blockSizes:

Time to full GC in Octane/splay with 64KB blocks: about 11ms.
Time to walk all blocks to read their hasAnyMarked bit with 4KB blocks: about 4ms.

This is why 4KB is slower.  Basically any scan of the marked blocks takes a super long time.

On the other hand, the &quot;convergence&quot; part of GC - where we do the bulk of our marking - still takes almost exactly the same amount of time as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223275</commentid>
    <comment_count>178</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-25 15:13:55 -0700</bug_when>
    <thetext>(In reply to comment #177)
&gt; Here&apos;s a basic stat that demonstrates the problem with small blockSizes:
&gt; 
&gt; Time to full GC in Octane/splay with 64KB blocks: about 11ms.
&gt; Time to walk all blocks to read their hasAnyMarked bit with 4KB blocks:
&gt; about 4ms.

With 64KB blocks, this takes about 0.347162 ms.  That&apos;s about right.  4ms * 4KB / 64KB = 0.25.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223280</commentid>
    <comment_count>179</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-25 15:22:55 -0700</bug_when>
    <thetext>All of these problems happen when we enumerate over all MarkedBlocks, not when we find a MarkedBlock by way of some owning object - that part is just as fast with 4KB as 64KB.

The solution is clear: move all, or almost all, of the MarkedBlock meta-data into a table on the side.

MarkedBlock would no longer be a doubly-linked list node.  That part probably contributes to the badness.  MarkedBlocks would instead be listed in a Vector&lt;&gt; or similar.

This Vector&lt;&gt; would not directly hold MarkedBlock*.  Instead it would hold a MetaMarkedBlock, which would contain most of what MarkedBlock currently has in its header: the mark bits, the WeakSet, etc.  MarkedBlock would have a pointer back to its MetaMarkedBlock.  In this world, MarkedBlock would also have a direct pointer to VM, so that those queries can still be fast.

This way, the random-access case of touching MarkedBlocks would be penalized by one indirection but in return it would get some locality.  I think this will make no difference in that code, since that code is bottlenecked on function calls, some random checks, and a CAS.

But the MarkedBlock scans would become a lot faster.  Everything would be in one place!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223281</commentid>
    <comment_count>180</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-25 15:25:21 -0700</bug_when>
    <thetext>Oh, and we should have a list of active WeakSets.  Right now we pay a big price to walk all MarkedBlocks just to find the ones with WeakSets.  That&apos;s silly!  When a WeakSet becomes non-empty, it should shove itself into the global list of active WeakSets.  That list can be pruned during collection.

In splay, this would make a huge difference.  We pay a big price for walking those MarkedBlocks to find WeakSets, even though there are only about 30 active WeakSets and over 50,000 blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223522</commentid>
    <comment_count>181</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-26 09:08:08 -0700</bug_when>
    <thetext>I&apos;ve implemented a m_activeWeakSets vector.  That speeds things up significantly.

However, we still have the following problems:
- Clearing mark bits takes a long time.
- Snapshotting marked space takes a long time.

I believe that snapshotting takes a long time because the way we find marked blocks is by traversing a doubly-linked list, which means that each step along the way is a TLB and cache miss, or even a page fault if we&apos;re under stress.

All of this can be wished away if we store the meta-data for a MarkedBlock separately from the bock itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223549</commentid>
    <comment_count>182</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-26 09:45:29 -0700</bug_when>
    <thetext>Unfortunately, accessing the mark bits via an indirection appears to be a 5% slow-down over base 4KB.  It increases GC time significantly.  So, I&apos;m not sure we want this.

I&apos;m considering this approach:

- MarkedBlock is split into &quot;MarkedBlock&quot; and &quot;MarkedBlock::Meta&quot;.  The block itself holds the mark bits, a version number, a pointer to the meta, a VM pointer, and the cells themselves.  The meta holds all other information.  We could put hasAnyMarked in either place, but maybe the block itself would be best.

- We reset mark bits lazily.  The first step of marking will be to compare the block&apos;s version to the current heap version.  If different, perform the clearMarks step before proceeding.

The use of data-on-the-side would speed up all block walks, which includes:
- Block snapshotting.
- Eden markbit clearing.

The use of the version number would speed up full markbit clearing.  Hopefully, by avoiding the pointer-chasing inherent in mark-bits-in-meta, this will not slow down marking as much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223562</commentid>
    <comment_count>183</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-26 10:05:26 -0700</bug_when>
    <thetext>Fantastic news!  Adding a version check in testAndSetMarked is perf-neutral!

I added a compare-branch in the testAndSetMarked path that does basically this:

if (markedBlock-&gt;m_version != slotVisitor-&gt;m_version)
    callSlowPath();

We execute this on all paths leading into this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223650</commentid>
    <comment_count>184</comment_count>
      <attachid>287135</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-26 13:18:53 -0700</bug_when>
    <thetext>Created attachment 287135
splitting MarkedBlock&apos;s meta-data out into a handle

Work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223736</commentid>
    <comment_count>185</comment_count>
      <attachid>287156</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-26 15:05:00 -0700</bug_when>
    <thetext>Created attachment 287156
I think that the versioning is done

I haven&apos;t tried compiling it yet.  It&apos;s a scary change!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223743</commentid>
    <comment_count>186</comment_count>
      <attachid>287159</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-26 15:22:57 -0700</bug_when>
    <thetext>Created attachment 287159
got some things to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223810</commentid>
    <comment_count>187</comment_count>
      <attachid>287178</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-26 17:22:37 -0700</bug_when>
    <thetext>Created attachment 287178
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223842</commentid>
    <comment_count>188</comment_count>
      <attachid>287186</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-26 19:00:32 -0700</bug_when>
    <thetext>Created attachment 287186
compiles and passes some tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223843</commentid>
    <comment_count>189</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-26 19:01:41 -0700</bug_when>
    <thetext>(In reply to comment #183)
&gt; Fantastic news!  Adding a version check in testAndSetMarked is perf-neutral!
&gt; 
&gt; I added a compare-branch in the testAndSetMarked path that does basically
&gt; this:
&gt; 
&gt; if (markedBlock-&gt;m_version != slotVisitor-&gt;m_version)
&gt;     callSlowPath();
&gt; 
&gt; We execute this on all paths leading into this code.

The crappy thing about this is that callSlowPath() needs to do locking, and the whole thingy needs a load-load fence:

if (condition)
    slowPath()
loadLoadFence()

Otherwise, you get crazy race conditions.

Hopefully this doesn&apos;t get in the way of perf.  I&apos;m still testing this code in Debug, so I don&apos;t have any perf data yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224099</commentid>
    <comment_count>190</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-28 17:14:37 -0700</bug_when>
    <thetext>It looks like even with a log of hacks, the 4KB version of the code still underperforms the 64KB by a lot, especially on splay.

I think I found one area that could be improved a ton.  We spend a lot of time sweeping blocks that are 100% full!  Probably, sweeping those blocks is much cheaper when the work is amortized.

We can get around this by having the SlotVisitor track the number of objects marked in each block.  When the count reaches a certain threshold, it can remove the block from the list of blocks that we would sweep.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224102</commentid>
    <comment_count>191</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-28 17:19:13 -0700</bug_when>
    <thetext>(In reply to comment #190)
&gt; It looks like even with a log of hacks, the 4KB version of the code still
&gt; underperforms the 64KB by a lot, especially on splay.
&gt; 
&gt; I think I found one area that could be improved a ton.  We spend a lot of
&gt; time sweeping blocks that are 100% full!  Probably, sweeping those blocks is
&gt; much cheaper when the work is amortized.
&gt; 
&gt; We can get around this by having the SlotVisitor track the number of objects
&gt; marked in each block.  When the count reaches a certain threshold, it can
&gt; remove the block from the list of blocks that we would sweep.

And the obvious problem with this is that we&apos;d now have two atomic memory operations in MarkedBlock, rather than just one.  Ouch!

We could actually make this count racy.  This is intriguing.  It would at worst undercount the population in the block, but with some useful rules:

- If a block is empty then the count will definitely be zero.
- If a block is non-empty then the count will definitely be non-zero.
- The reported count for a non-empty block with N live objects will be between 1 and N, inclusive.

This means that we can rely on the count to do what m_hasAnyMarked does currently and we can rely on it for retirement, without using any atomic operations.  At worst, the count will be too low, causing us to not retire a block that we should have retired.  That&apos;s totally fine!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224103</commentid>
    <comment_count>192</comment_count>
      <attachid>287244</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-28 17:19:55 -0700</bug_when>
    <thetext>Created attachment 287244
even more things

I said I would rewrite the GC.  I didn&apos;t realize how true this statement would be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224422</commentid>
    <comment_count>193</comment_count>
      <attachid>287346</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-29 16:28:44 -0700</bug_when>
    <thetext>Created attachment 287346
sooooooper fast MarkedSpace

This amends the code that previously landed with many optimizations to MarkedSpace. Basically, most of the GC is O(num MarkedBlocks). It&apos;s funny, and surprising, but true. Of course there is the actual marking phase, which is O(live objects). Usually, the marking phase is long compared to all of the O(num MarkedBlocks) phases, so you don&apos;t notice those other phases.

Those per-block phases can become expensive because they mean cache+TLB misses on each block!  In trunk, this isn&apos;t a problem, but moving butterflies into MarkedSpace increases the number of MarkedBlocks without increasing the number of objects. This led to slow-downs that I observed throughout the development of this patch, but that seemed to resolve themselves when I moved to 64KB MarkedBlocks. Of course, that all makes sense. CopiedBlocks were already 64KB. So although CopiedSpace has various algorithms that are O(num CopiedBlocks), you didn&apos;t notice it because there were 1/4 as many CopiedBlocks as MarkedBlocks per unit data. Moving that data into MarkedSpace meant quadrupling the amount of per-block overhead for that data. Obviously, benchmarks that allocated a lot of butterflies suffered as a result, but often got faster (due to other optimizations in this patch) if you switches to 64KB. Moving data from CopiedSpace into a super-optimized MarkedSpace is a speed-up when the number of blocks stays the same, but a slow-down when the number of blocks increases.

This new patch attacks the problem of per-block costs directly, to enable us to use smaller blocks in MarkedSpace without nearly the same kinds of slow-downs. The optimizations are:

- MarkedBlock meta-data is allocated on the side using fastMalloc, so that it can enjoy better cache locality with respect to other MarkedBlock meta-datas, to the extent that the malloc feels it&apos;s OK to do it. This makes looping over all MarkedBlocks about 2x faster.
- We no longer loop over MarkedBlocks to get to WeakSets. We track the set of active WeakSets: those that have at least one Weak in them. In that set, we separately track those active WeakSets that belong to a MarkedBlock that may have new objects from those that don&apos;t. This enables super fast WeakSet scans.
- We no longer do anything to clear mark bits! Holy cow! We used block the mark bits and block state behind a 64-bit version number. When the version is older than the current Heap version, we lazily clear the mark bits and set the block state to Marked. So, to clear all mark bits, we increment the version. This removes one of the block scans.
- We no longer sort all marked blocks for snapshotting. We know which blocks are in the snapshot, so eden snapshotting only has to walk the blocks with new objects.
- We no longer have to sweep retired blocks when allocating! Marking will now track the number of objects in a block on the fly, and when it saturates, it will retire the block. This was a big win because it&apos;s common to find a ton of blocks that are full or almost full. The allocator may end up spending lots of time just noting that the blocks are full. Remember, each block is a TLB miss and cache miss all the way to RAM! So, having the marker do it when it already had to touch the darn block for other reasons causes the VM to run faster.

I haven&apos;t run all benchmarks, but on benchmarks like splay, this seems to basically run as fast as 64KB blocks in the previous patch while using 16KB blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224782</commentid>
    <comment_count>194</comment_count>
      <attachid>287454</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-30 16:45:28 -0700</bug_when>
    <thetext>Created attachment 287454
fixed a debug assert

This is take #1 at fixing a debug assert.  I got it wrong.  I&apos;ll have a new patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224792</commentid>
    <comment_count>195</comment_count>
      <attachid>287458</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-30 17:09:16 -0700</bug_when>
    <thetext>Created attachment 287458
fixed the debug assert for real

This contains the correct fix. The problem is that previously, we made sweep() put the block in the Marked state if it did not yield a free-list.  I think I just did this to make it easier to retire the block. But this is wrong in case sweep() is called with non-null newlyAllocated, for example if we had done stopAllocating() to iterate the heap. In that case, if the sweep() puts the block in the Marked state then it had better preserve the newlyAllocated bits. But sweep() clears those bits. I probably could have fixed that, for example by not clearing the bits if we put the block in the Marked state, but that felt like too much crazy. Instead, I realized that MarkedAllocator should just call didConsumeFreeList() between sweep() and retire(), and if I do this, then I can make sweep() always put the block in the FreeListed state just like before. This felt like a smaller and safer change, so that&apos;s what this new version does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225034</commentid>
    <comment_count>196</comment_count>
      <attachid>287528</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-31 12:36:24 -0700</bug_when>
    <thetext>Created attachment 287528
pretty good patch

It&apos;s still slower on Speedometer.

It&apos;s still slower on Kraken.

The Kraken regression is huge, so I&apos;ll investigate that first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225077</commentid>
    <comment_count>197</comment_count>
      <attachid>287538</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-31 13:52:18 -0700</bug_when>
    <thetext>Created attachment 287538
fixing the forgotten butterfly bug

This is adding another change: fixing how we forget about a butterfly if it was allocated just before we took a slow path on cell allocation.

I&apos;m not done with it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225121</commentid>
    <comment_count>198</comment_count>
      <attachid>287552</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-31 15:38:00 -0700</bug_when>
    <thetext>Created attachment 287552
fixing the forgotten butterfly bug, passing tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225242</commentid>
    <comment_count>199</comment_count>
      <attachid>287595</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-31 21:12:21 -0700</bug_when>
    <thetext>Created attachment 287595
fast MarkedSpace might be complete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225373</commentid>
    <comment_count>200</comment_count>
      <attachid>287629</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-01 10:32:19 -0700</bug_when>
    <thetext>Created attachment 287629
rebased with bugs

This accidentally revealed a nasty object allocation sinking bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225475</commentid>
    <comment_count>201</comment_count>
      <attachid>287660</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-01 12:55:01 -0700</bug_when>
    <thetext>Created attachment 287660
rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225478</commentid>
    <comment_count>202</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-01 12:58:36 -0700</bug_when>
    <thetext>Attachment 287660 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5367:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5383:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:797:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5440:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5452:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5454:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1760:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:643:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2785:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2786:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/SuperSampler.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:451:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:54:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:98:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:89:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 42 in 299 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>1225492</commentid>
    <comment_count>203</comment_count>
      <attachid>287666</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-01 13:17:45 -0700</bug_when>
    <thetext>Created attachment 287666
fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225496</commentid>
    <comment_count>204</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-01 13:22:16 -0700</bug_when>
    <thetext>Attachment 287666 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5367:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5383:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:797:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5440:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5452:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5454:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1760:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:643:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2785:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2786:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/SuperSampler.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:451:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:54:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:98:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:47:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:89:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 42 in 300 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>1225670</commentid>
    <comment_count>205</comment_count>
      <attachid>287718</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-01 20:05:26 -0700</bug_when>
    <thetext>Created attachment 287718
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225672</commentid>
    <comment_count>206</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-01 20:07:40 -0700</bug_when>
    <thetext>A lot of the performance pathologies that I&apos;m still seeing seem to happen around phase-changes, where we may be switching from using one set of sizes to another. This is bad for our GC right now, since we only rebalance size classes under certain conditions.

The next thing I&apos;ll try is some way of tracking the set of empty blocks and freeing them at end of GC.  Maybe this will work well!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225682</commentid>
    <comment_count>207</comment_count>
      <attachid>287723</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-01 20:39:43 -0700</bug_when>
    <thetext>Created attachment 287723
rebased again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225685</commentid>
    <comment_count>208</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-01 20:43:33 -0700</bug_when>
    <thetext>Attachment 287723 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5367:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5383:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:797:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5440:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5452:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5454:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1760:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:643:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:61:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2785:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2786:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/SuperSampler.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:451:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:54:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:98:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSArray.cpp:48:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:38:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:40:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:55:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:89:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 56 in 300 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>1226148</commentid>
    <comment_count>209</comment_count>
      <attachid>287723</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-09-03 12:07:29 -0700</bug_when>
    <thetext>Comment on attachment 287723
rebased again

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

Made some comments on the Changelog. I&apos;m going to start on the code.

&gt; Source/JavaScriptCore/ChangeLog:58
&gt; +          turn hyperbolic for large sizes. The size class configuration happens at VM start-up, so
&gt; +          can be controlled with runtime options. I found that a base of 1.4 works pretty well.

so can =&gt; so it can

&gt; Source/JavaScriptCore/ChangeLog:94
&gt; +        - Copied space uses 64KB blocks, while marked space used to use 16KB blocks. Allocating a lot
&gt; +          of stuff in 16KB blocks was slower than allocating it in 64KB blocks because the GC had a
&gt; +          log of per-block overhead. I removed this overhead. It&apos;s now 2x faster to scan all

What was the cause of the overhead and what did you do to get rid of it, out of curiosity?

&gt; Source/JavaScriptCore/ChangeLog:99
&gt; +          bits because we now used versioned mark bits: to clear then, just increment the 64-bit

used =&gt; use.

&gt; Source/JavaScriptCore/ChangeLog:102
&gt; +          the IncrementalSweeper&apos;s snapshot because blocks now known if they are in the snapshot.

known =&gt; know.

I&apos;m not sure I totally follow this section. It feels a little like a brain dump.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226155</commentid>
    <comment_count>210</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-03 12:42:11 -0700</bug_when>
    <thetext>I have another idea: what if there is some non-trivial cost that we pay for retirement during marking?  There was with 4KB marked blocks.  What if that is mostly due to the linked list logic, and the need to grab a lock?  The cost here could be significant since we need to touch the two adjacent blocks in order to complete the linked-list removal, and then we need to touch one random block in the retired list.  That&apos;s lots of spread-out memory!

If so, we could change the MarkedBlock list into an array rather than a doubly-linked list.  Since it has indices, we could use a bitvector to track &quot;retirement&quot;.  A block would be &quot;retired&quot; if it&apos;s free.  In other words, the bitvector should probably have a 1 for blocks that are worth allocating in, and a 0 for those that don&apos;t qualify (too full or it&apos;s a free index).

This would greatly simplify the retirement slow path logic.

It may also speed up sweeping in general to have the MarkedBlocks in an array rather than linked together.  This isn&apos;t totally guaranteed, since we load next() as we&apos;re sweeping the block, so the linked list logic during lazy sweep gets the benefit of free cache locality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226183</commentid>
    <comment_count>211</comment_count>
      <attachid>287723</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-09-03 15:54:11 -0700</bug_when>
    <thetext>Comment on attachment 287723
rebased again

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

I&apos;m about halfway through the patch, it looks good so far. I have some errands I need to run but I&apos;ll post the comments that I have for now.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1761
&gt; +    //if (m_currentIndex == 225)
&gt; +    //    return false;

delete plox.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5367
&gt; +    m_jit.move(TrustedImmPtr(0), storageGPR);
&gt; +            

Does this do anything? It looks like you just store to storageGPR in m_jit.emitAllocateVariableSized(). You do this in a bunch of places.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1433
&gt; +        negPtr(resultGPR);

Why not move 0?

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1437
&gt; +            addPtr(payloadEndAddr, resultGPR);

Couldn&apos;t this just be a move?

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1440
&gt; +            loadPtr(payloadEndAddr, scratchGPR);
&gt; +            addPtr(scratchGPR, resultGPR);

Why does this load on non-x86 but not on x86?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226313</commentid>
    <comment_count>212</comment_count>
      <attachid>287723</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-09-04 15:02:46 -0700</bug_when>
    <thetext>Comment on attachment 287723
rebased again

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

r=me with some comments and a CMake build fix. I guess I read more of the interesting bits yesterday than I thought. I made comments on things that I thought seemed weird, if my comments are wrong feel free to ignore them.

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:62
&gt; +#if 0
&gt; +#define LOGIT() dataLog(RawPointer(this), &quot;: &quot;, WTF_PRETTY_FUNCTION, &quot;\n&quot;);
&gt; +#else
&gt; +#define LOGIT() do { } while(false)
&gt; +#endif

Maybe these LOGIT macros should be in a shared header somewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226320</commentid>
    <comment_count>213</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-04 18:39:40 -0700</bug_when>
    <thetext>(In reply to comment #209)
&gt; Comment on attachment 287723 [details]
&gt; rebased again
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=287723&amp;action=review
&gt; 
&gt; Made some comments on the Changelog. I&apos;m going to start on the code.

Thank you for looking at this huge patch!

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:58
&gt; &gt; +          turn hyperbolic for large sizes. The size class configuration happens at VM start-up, so
&gt; &gt; +          can be controlled with runtime options. I found that a base of 1.4 works pretty well.
&gt; 
&gt; so can =&gt; so it can

Today I learned that an ordinary Emacs search (Ctrl-S) for &quot;so can&quot; matches &quot;so\n        can&quot;. Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:94
&gt; &gt; +        - Copied space uses 64KB blocks, while marked space used to use 16KB blocks. Allocating a lot
&gt; &gt; +          of stuff in 16KB blocks was slower than allocating it in 64KB blocks because the GC had a
&gt; &gt; +          log of per-block overhead. I removed this overhead. It&apos;s now 2x faster to scan all
&gt; 
&gt; What was the cause of the overhead and what did you do to get rid of it, out
&gt; of curiosity?

That&apos;s the rest of this paragraph.  I changed &quot;I removed this overhead.&quot; to &quot;I removed this overhead:&quot; to make this a little clearer.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:99
&gt; &gt; +          bits because we now used versioned mark bits: to clear then, just increment the 64-bit
&gt; 
&gt; used =&gt; use.

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:102
&gt; &gt; +          the IncrementalSweeper&apos;s snapshot because blocks now known if they are in the snapshot.
&gt; 
&gt; known =&gt; know.

Fixed.

&gt; 
&gt; I&apos;m not sure I totally follow this section. It feels a little like a brain
&gt; dump.

Each of those braindumpy sentences summarizes one of the optimizations towards removing the overhead of having many blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226323</commentid>
    <comment_count>214</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-04 18:59:55 -0700</bug_when>
    <thetext>(In reply to comment #210)
&gt; I have another idea: what if there is some non-trivial cost that we pay for
&gt; retirement during marking?  There was with 4KB marked blocks.  What if that
&gt; is mostly due to the linked list logic, and the need to grab a lock?  The
&gt; cost here could be significant since we need to touch the two adjacent
&gt; blocks in order to complete the linked-list removal, and then we need to
&gt; touch one random block in the retired list.  That&apos;s lots of spread-out
&gt; memory!
&gt; 
&gt; If so, we could change the MarkedBlock list into an array rather than a
&gt; doubly-linked list.  Since it has indices, we could use a bitvector to track
&gt; &quot;retirement&quot;.  A block would be &quot;retired&quot; if it&apos;s free.  In other words, the
&gt; bitvector should probably have a 1 for blocks that are worth allocating in,
&gt; and a 0 for those that don&apos;t qualify (too full or it&apos;s a free index).
&gt; 
&gt; This would greatly simplify the retirement slow path logic.
&gt; 
&gt; It may also speed up sweeping in general to have the MarkedBlocks in an
&gt; array rather than linked together.  This isn&apos;t totally guaranteed, since we
&gt; load next() as we&apos;re sweeping the block, so the linked list logic during
&gt; lazy sweep gets the benefit of free cache locality.

I think that I don&apos;t need to do this in this patch, but I should do it in the future.  Filed: https://bugs.webkit.org/show_bug.cgi?id=161581</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226341</commentid>
    <comment_count>215</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-04 21:54:03 -0700</bug_when>
    <thetext>(In reply to comment #211)
&gt; Comment on attachment 287723 [details]
&gt; rebased again
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=287723&amp;action=review
&gt; 
&gt; I&apos;m about halfway through the patch, it looks good so far. I have some
&gt; errands I need to run but I&apos;ll post the comments that I have for now.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1761
&gt; &gt; +    //if (m_currentIndex == 225)
&gt; &gt; +    //    return false;
&gt; 
&gt; delete plox.

Deleted.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5367
&gt; &gt; +    m_jit.move(TrustedImmPtr(0), storageGPR);
&gt; &gt; +            
&gt; 
&gt; Does this do anything? It looks like you just store to storageGPR in
&gt; m_jit.emitAllocateVariableSized(). You do this in a bunch of places.

Yeah, this is part of avoiding forgetting successful butterfly allocations.  The control flow here looks like this:

void* storage = 0;
if (!(storage = tryAllocateButterfly(...)))
    goto slow;
void* result;
if (!(result = tryAllocateObject(..., storage))
    goto slow;
goto done;
slow:
result = operationCreateNewThingy(storage);
storage = result-&gt;butterfly;
done:

Notice that there are two jumps to the slow path, one where the storageGPR is zero, and another when it isn&apos;t.  This lets the slow path know if we had already succeeded at allocating the butterfly.  If we had (storage not null), then it will use that butterfly instead of wastefully allocating another one.  If we hadn&apos;t (storage is null) then it will allocate one.

Hence this move.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1433
&gt; &gt; +        negPtr(resultGPR);
&gt; 
&gt; Why not move 0?

Not the same thing.  negPtr(resultGPR) means:

resultGPR := -resultGPR

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1437
&gt; &gt; +            addPtr(payloadEndAddr, resultGPR);
&gt; 
&gt; Couldn&apos;t this just be a move?

Not the same thing.  This means:

resultGPR := resultGPR + *(payloadEndAddr)

So, combined with the statement above, we&apos;re doing:

resultGPR := *(payloadEndAddr) - resultGPR

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1440
&gt; &gt; +            loadPtr(payloadEndAddr, scratchGPR);
&gt; &gt; +            addPtr(scratchGPR, resultGPR);
&gt; 
&gt; Why does this load on non-x86 but not on x86?

The addPtr(payloadEndAddr, resultGPR) is a load.  The load is part of the add.

That&apos;s something that x86 can do but other instruction sets can&apos;t do.  Since this code is meant to be used from B3 without blocking off scratch registers, the MacroAssembler&apos;s built-in emulation of addPtr(Address, RegisterID) will fail (it needs at least one scratch register).  So, we side-step that emulation and do the load/add separately while using our own scratch register.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226342</commentid>
    <comment_count>216</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-04 21:54:55 -0700</bug_when>
    <thetext>(In reply to comment #212)
&gt; Comment on attachment 287723 [details]
&gt; rebased again
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=287723&amp;action=review
&gt; 
&gt; r=me with some comments and a CMake build fix. I guess I read more of the
&gt; interesting bits yesterday than I thought. I made comments on things that I
&gt; thought seemed weird, if my comments are wrong feel free to ignore them.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSObject.cpp:62
&gt; &gt; +#if 0
&gt; &gt; +#define LOGIT() dataLog(RawPointer(this), &quot;: &quot;, WTF_PRETTY_FUNCTION, &quot;\n&quot;);
&gt; &gt; +#else
&gt; &gt; +#define LOGIT() do { } while(false)
&gt; &gt; +#endif
&gt; 
&gt; Maybe these LOGIT macros should be in a shared header somewhere?

I removed them!  Geoff asked me to remove them, and I forgot.

They were only useful during very early stages of testing this patch, so long ago that it feels like a century.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226345</commentid>
    <comment_count>217</comment_count>
      <attachid>287928</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-04 22:02:14 -0700</bug_when>
    <thetext>Created attachment 287928
patch for landing

It probably needs to be rebased, but this is pretty ready:

- Neutral on membuster with 64% certainty.
- Ever-so-tiny speed-up on PLT with 76% certainty.
- Definite JetStream speed-up.
- Slow-down on Kraken and Speedometer, which we&apos;ve agreed to allow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226370</commentid>
    <comment_count>218</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-05 00:07:33 -0700</bug_when>
    <thetext>Attachment 287928 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5367:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5383:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:797:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5440:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5452:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5454:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:643:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2775:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2776:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/SuperSampler.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:451:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:54:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:98:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:38:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:40:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:55:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:89:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 53 in 301 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>1226484</commentid>
    <comment_count>219</comment_count>
      <attachid>287970</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 11:45:39 -0700</bug_when>
    <thetext>Created attachment 287970
patch for landing

Fixed builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226502</commentid>
    <comment_count>220</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-05 13:18:26 -0700</bug_when>
    <thetext>Attachment 287970 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5367:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5383:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:797:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5440:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5452:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5454:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:643:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2775:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2776:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/SuperSampler.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:451:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:54:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:98:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:38:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:40:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:55:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:89:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 53 in 301 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>1226509</commentid>
    <comment_count>221</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 13:42:17 -0700</bug_when>
    <thetext>I&apos;m just running through a bunch of tests.

- I&apos;ve run debug+release webkit tests.
- I&apos;ve run debug+release JSC tests.

Now I&apos;m running release asan tests.

I still have to test 32-bit and ARM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226510</commentid>
    <comment_count>222</comment_count>
      <attachid>287982</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 13:52:24 -0700</bug_when>
    <thetext>Created attachment 287982
patch for landing

Fixed more build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226516</commentid>
    <comment_count>223</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-05 13:57:42 -0700</bug_when>
    <thetext>Attachment 287982 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5367:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5383:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:797:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5440:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5452:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5454:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:643:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2775:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2776:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/SuperSampler.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:451:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:54:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:98:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:38:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:40:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:55:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:89:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 53 in 302 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>1226518</commentid>
    <comment_count>224</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 16:08:23 -0700</bug_when>
    <thetext>Asan tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226519</commentid>
    <comment_count>225</comment_count>
      <attachid>287982</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-09-05 16:34:14 -0700</bug_when>
    <thetext>Comment on attachment 287982
patch for landing

Attachment 287982 did not pass mac-debug-ews (mac):
Output: http://webkit-queues.webkit.org/results/2014205

New failing tests:
http/tests/security/contentSecurityPolicy/worker-csp-blocks-xhr-redirect-cross-origin.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226520</commentid>
    <comment_count>226</comment_count>
      <attachid>287985</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-09-05 16:34:25 -0700</bug_when>
    <thetext>Created attachment 287985
Archive of layout-test-results from ews116 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews116  Port: mac-yosemite  Platform: Mac OS X 10.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226526</commentid>
    <comment_count>227</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 17:10:35 -0700</bug_when>
    <thetext>(In reply to comment #226)
&gt; Created attachment 287985 [details]
&gt; Archive of layout-test-results from ews116 for mac-yosemite
&gt; 
&gt; The attached test failures were seen while running run-webkit-tests on the
&gt; mac-debug-ews.
&gt; Bot: ews116  Port: mac-yosemite  Platform: Mac OS X 10.10.5

Does not look related at all:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x00000001100096a7 WTFCrash + 39
1   com.apple.WebCore             	0x0000000115b380be WebCore::FrameView::paintContents(WebCore::GraphicsContext&amp;, WebCore::IntRect const&amp;) + 462 (FrameView.cpp:4152)
2   com.apple.WebKitLegacy        	0x000000011df0cf33 -[WebFrame(WebInternal) _drawRect:contentsOnly:] + 803</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226527</commentid>
    <comment_count>228</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 17:21:18 -0700</bug_when>
    <thetext>(In reply to comment #225)
&gt; Comment on attachment 287982 [details]
&gt; patch for landing
&gt; 
&gt; Attachment 287982 [details] did not pass mac-debug-ews (mac):
&gt; Output: http://webkit-queues.webkit.org/results/2014205
&gt; 
&gt; New failing tests:
&gt; http/tests/security/contentSecurityPolicy/worker-csp-blocks-xhr-redirect-
&gt; cross-origin.html

Also does not look related, the failure is this extra console message:

CONSOLE MESSAGE: Origin http://127.0.0.1:8000 is not allowed by Access-Control-Allow-Origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226528</commentid>
    <comment_count>229</comment_count>
      <attachid>287987</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 17:24:09 -0700</bug_when>
    <thetext>Created attachment 287987
patch for landing

Rebased again.  Hopefully the last time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226529</commentid>
    <comment_count>230</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-05 17:33:04 -0700</bug_when>
    <thetext>Attachment 287987 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapUtil.h:31:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:32:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:37:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapUtil.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:196:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5367:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5383:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/ObjCCallbackFunction.mm:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:797:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5440:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5452:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5454:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:643:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:277:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:376:  The parameter name &quot;codeId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2775:  Declaration has space between type name and * in oldVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2776:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JIT.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/parser/Nodes.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/FreeList.h:35:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/SuperSampler.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkInfo.h:48:  The parameter name &quot;opcodeID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:451:  Alphabetical sorting problem. &quot;heap/FreeList.cpp&quot; should be before &quot;heap/FullGCActivityCallback.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:54:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:98:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/profiler/ProfilerBytecode.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/js/JSDOMBinding.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:38:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:40:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:55:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayConventions.cpp:56:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/PropertyTable.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:89:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/Opcode.h:58:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:143:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:149:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 53 in 302 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>1226530</commentid>
    <comment_count>231</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 18:05:05 -0700</bug_when>
    <thetext>Landed!  http://trac.webkit.org/changeset/205462</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226531</commentid>
    <comment_count>232</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 18:13:36 -0700</bug_when>
    <thetext>I think I fixed cloop build in r205463.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226534</commentid>
    <comment_count>233</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-09-05 19:00:10 -0700</bug_when>
    <thetext>CC&apos;ing Ryan for the many false positives.

But looking at EWS machines, I see a number of flaky assertions that do seem to be caused by this change (and I couldn&apos;t quickly find the same on regular bots):

Thread 10 Crashed:: WTF Parallel Helper Thread
0   com.apple.JavaScriptCore      	0x00000001084676a7 WTFCrash + 39
1   com.apple.JavaScriptCore      	0x0000000108070e92 JSC::MarkedBlock::flipIfNecessarySlow() + 114
2   com.apple.JavaScriptCore      	0x0000000107648350 JSC::MarkedBlock::flipIfNecessary(unsigned long long) + 64
3   com.apple.JavaScriptCore      	0x0000000107647ead JSC::Heap::isMarked(void const*) + 141
4   com.apple.JavaScriptCore      	0x000000010766f105 JSC::CodeBlock::visitWeakly(JSC::SlotVisitor&amp;) + 85
5   com.apple.JavaScriptCore      	0x0000000107baa2f0 JSC::FunctionExecutable::visitChildren(JSC::JSCell*, JSC::SlotVisitor&amp;) + 368
6   com.apple.JavaScriptCore      	0x000000010827b04f JSC::SlotVisitor::visitChildren(JSC::JSCell const*) + 335
7   com.apple.JavaScriptCore      	0x00000001082798e5 JSC::SlotVisitor::drain() + 229
8   com.apple.JavaScriptCore      	0x0000000108279dc4 JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode) + 1124
9   com.apple.JavaScriptCore      	0x0000000107cd243e JSC::Heap::markRoots(double, void*, void*, int (&amp;) [37])::$_0::operator()() const + 734
10  com.apple.JavaScriptCore      	0x0000000107cd212c WTF::SharedTaskFunctor&lt;void (), JSC::Heap::markRoots(double, void*, void*, int (&amp;) [37])::$_0&gt;::run() + 28</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226537</commentid>
    <comment_count>234</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 19:03:37 -0700</bug_when>
    <thetext>(In reply to comment #233)
&gt; CC&apos;ing Ryan for the many false positives.
&gt; 
&gt; But looking at EWS machines, I see a number of flaky assertions that do seem
&gt; to be caused by this change (and I couldn&apos;t quickly find the same on regular
&gt; bots):
&gt; 
&gt; Thread 10 Crashed:: WTF Parallel Helper Thread
&gt; 0   com.apple.JavaScriptCore      	0x00000001084676a7 WTFCrash + 39
&gt; 1   com.apple.JavaScriptCore      	0x0000000108070e92
&gt; JSC::MarkedBlock::flipIfNecessarySlow() + 114
&gt; 2   com.apple.JavaScriptCore      	0x0000000107648350
&gt; JSC::MarkedBlock::flipIfNecessary(unsigned long long) + 64
&gt; 3   com.apple.JavaScriptCore      	0x0000000107647ead
&gt; JSC::Heap::isMarked(void const*) + 141
&gt; 4   com.apple.JavaScriptCore      	0x000000010766f105
&gt; JSC::CodeBlock::visitWeakly(JSC::SlotVisitor&amp;) + 85
&gt; 5   com.apple.JavaScriptCore      	0x0000000107baa2f0
&gt; JSC::FunctionExecutable::visitChildren(JSC::JSCell*, JSC::SlotVisitor&amp;) + 368
&gt; 6   com.apple.JavaScriptCore      	0x000000010827b04f
&gt; JSC::SlotVisitor::visitChildren(JSC::JSCell const*) + 335
&gt; 7   com.apple.JavaScriptCore      	0x00000001082798e5
&gt; JSC::SlotVisitor::drain() + 229
&gt; 8   com.apple.JavaScriptCore      	0x0000000108279dc4
&gt; JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode) + 1124
&gt; 9   com.apple.JavaScriptCore      	0x0000000107cd243e
&gt; JSC::Heap::markRoots(double, void*, void*, int (&amp;) [37])::$_0::operator()()
&gt; const + 734
&gt; 10  com.apple.JavaScriptCore      	0x0000000107cd212c
&gt; WTF::SharedTaskFunctor&lt;void (), JSC::Heap::markRoots(double, void*, void*,
&gt; int (&amp;) [37])::$_0&gt;::run() + 28

Whoa, where did you get this stack trace? :-)  Was this from EWS running my patch for landing?  It would be great if EWS made it easier to see crash logs!

I know what is going wrong.  I will post a fix shortly.  Bug here: https://bugs.webkit.org/show_bug.cgi?id=161613</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226545</commentid>
    <comment_count>235</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-09-05 19:11:56 -0700</bug_when>
    <thetext>&gt; Whoa, where did you get this stack trace? :-)

I VNC&apos;ed into a EWS bot to find some other crash, and saw this. It occurred a few minutes ago, so it was some new patch running into this crash after the patch was landed.

Also, builtin generator test failure: https://build.webkit.org/builders/Apple%20Yosemite%20Release%20WK2%20%28Tests%29/builds/17636/steps/builtins-generator-tests/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226546</commentid>
    <comment_count>236</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 19:14:36 -0700</bug_when>
    <thetext>(In reply to comment #235)
&gt; &gt; Whoa, where did you get this stack trace? :-)
&gt; 
&gt; I VNC&apos;ed into a EWS bot to find some other crash, and saw this. It occurred
&gt; a few minutes ago, so it was some new patch running into this crash after
&gt; the patch was landed.
&gt; 
&gt; Also, builtin generator test failure:
&gt; https://build.webkit.org/builders/
&gt; Apple%20Yosemite%20Release%20WK2%20%28Tests%29/builds/17636/steps/builtins-
&gt; generator-tests/logs/stdio

I&apos;m on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226547</commentid>
    <comment_count>237</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 19:18:09 -0700</bug_when>
    <thetext>(In reply to comment #236)
&gt; (In reply to comment #235)
&gt; &gt; &gt; Whoa, where did you get this stack trace? :-)
&gt; &gt; 
&gt; &gt; I VNC&apos;ed into a EWS bot to find some other crash, and saw this. It occurred
&gt; &gt; a few minutes ago, so it was some new patch running into this crash after
&gt; &gt; the patch was landed.
&gt; &gt; 
&gt; &gt; Also, builtin generator test failure:
&gt; &gt; https://build.webkit.org/builders/
&gt; &gt; Apple%20Yosemite%20Release%20WK2%20%28Tests%29/builds/17636/steps/builtins-
&gt; &gt; generator-tests/logs/stdio
&gt; 
&gt; I&apos;m on it.

Fixed in r205465.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226551</commentid>
    <comment_count>238</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 19:45:44 -0700</bug_when>
    <thetext>(In reply to comment #234)
&gt; (In reply to comment #233)
&gt; &gt; CC&apos;ing Ryan for the many false positives.
&gt; &gt; 
&gt; &gt; But looking at EWS machines, I see a number of flaky assertions that do seem
&gt; &gt; to be caused by this change (and I couldn&apos;t quickly find the same on regular
&gt; &gt; bots):
&gt; &gt; 
&gt; &gt; Thread 10 Crashed:: WTF Parallel Helper Thread
&gt; &gt; 0   com.apple.JavaScriptCore      	0x00000001084676a7 WTFCrash + 39
&gt; &gt; 1   com.apple.JavaScriptCore      	0x0000000108070e92
&gt; &gt; JSC::MarkedBlock::flipIfNecessarySlow() + 114
&gt; &gt; 2   com.apple.JavaScriptCore      	0x0000000107648350
&gt; &gt; JSC::MarkedBlock::flipIfNecessary(unsigned long long) + 64
&gt; &gt; 3   com.apple.JavaScriptCore      	0x0000000107647ead
&gt; &gt; JSC::Heap::isMarked(void const*) + 141
&gt; &gt; 4   com.apple.JavaScriptCore      	0x000000010766f105
&gt; &gt; JSC::CodeBlock::visitWeakly(JSC::SlotVisitor&amp;) + 85
&gt; &gt; 5   com.apple.JavaScriptCore      	0x0000000107baa2f0
&gt; &gt; JSC::FunctionExecutable::visitChildren(JSC::JSCell*, JSC::SlotVisitor&amp;) + 368
&gt; &gt; 6   com.apple.JavaScriptCore      	0x000000010827b04f
&gt; &gt; JSC::SlotVisitor::visitChildren(JSC::JSCell const*) + 335
&gt; &gt; 7   com.apple.JavaScriptCore      	0x00000001082798e5
&gt; &gt; JSC::SlotVisitor::drain() + 229
&gt; &gt; 8   com.apple.JavaScriptCore      	0x0000000108279dc4
&gt; &gt; JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode) + 1124
&gt; &gt; 9   com.apple.JavaScriptCore      	0x0000000107cd243e
&gt; &gt; JSC::Heap::markRoots(double, void*, void*, int (&amp;) [37])::$_0::operator()()
&gt; &gt; const + 734
&gt; &gt; 10  com.apple.JavaScriptCore      	0x0000000107cd212c
&gt; &gt; WTF::SharedTaskFunctor&lt;void (), JSC::Heap::markRoots(double, void*, void*,
&gt; &gt; int (&amp;) [37])::$_0&gt;::run() + 28
&gt; 
&gt; Whoa, where did you get this stack trace? :-)  Was this from EWS running my
&gt; patch for landing?  It would be great if EWS made it easier to see crash
&gt; logs!
&gt; 
&gt; I know what is going wrong.  I will post a fix shortly.  Bug here:
&gt; https://bugs.webkit.org/show_bug.cgi?id=161613

This should be fixed as of http://trac.webkit.org/changeset/205466</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226555</commentid>
    <comment_count>239</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-05 20:23:19 -0700</bug_when>
    <thetext>It triggered an huge amount of compiler warnings with GCC (all the same warning, being #included into a bunch of different source files):

In file included from ../../Source/WTF/wtf/StdLibExtras.h:33:0,
                 from ../../Source/WTF/wtf/FastMalloc.h:26,
                 from ../../Source/JavaScriptCore/config.h:54,
                 from ../../Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:26:
../../Source/JavaScriptCore/bytecode/Opcode.h:78:54: warning: comparison of unsigned expression &gt;= 0 is always true [-Wtype-limits]
 #define VERIFY_OPCODE_ID(id, size) COMPILE_ASSERT(id &lt;= numOpcodeIDs, ASSERT_THAT_JS_OPCODE_IDS_ARE_VALID);
                                                       
../../Source/WTF/wtf/Assertions.h:366:50: note: in definition of macro ‘COMPILE_ASSERT’
 #define COMPILE_ASSERT(exp, name) static_assert((exp), #name)
                                                  ^~~
DerivedSources/JavaScriptCore/Bytecodes.h:33:5: note: in expansion of macro ‘VERIFY_OPCODE_ID’
     macro(op_enter, 1) \
     ^~~~~
../../Source/JavaScriptCore/bytecode/Opcode.h:44:5: note: in expansion of macro ‘FOR_EACH_BYTECODE_ID’
     FOR_EACH_BYTECODE_ID(macro) \
     ^~~~~~~~~~~~~~~~~~~~
../../Source/JavaScriptCore/bytecode/Opcode.h:51:5: note: in expansion of macro ‘FOR_EACH_CORE_OPCODE_ID_WITH_EXTENSION’
     FOR_EACH_CORE_OPCODE_ID_WITH_EXTENSION( \
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../Source/JavaScriptCore/bytecode/Opcode.h:79:5: note: in expansion of macro ‘FOR_EACH_OPCODE_ID’
     FOR_EACH_OPCODE_ID(VERIFY_OPCODE_ID);
     ^~~~~~~~~~~~~~~~~~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226560</commentid>
    <comment_count>240</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-05 20:31:07 -0700</bug_when>
    <thetext>It looks hard to fix. One option is to just silence the warning:

#if COMPILER(GCC)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored &quot;-Wtype-limits&quot;
#endif

#define VERIFY_OPCODE_ID(id, size) COMPILE_ASSERT(id &lt;= numOpcodeIDs, ASSERT_THAT_JS_OPCODE_IDS_ARE_VALID);
    FOR_EACH_OPCODE_ID(VERIFY_OPCODE_ID);
#undef VERIFY_OPCODE_ID

#if COMPILER(GCC)
#pragma GCC diagnostic pop
#endif

That looks like a mess, but it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226562</commentid>
    <comment_count>241</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-05 20:34:19 -0700</bug_when>
    <thetext>(In reply to comment #240)
&gt; It looks hard to fix. One option is to just silence the warning:
&gt; 
&gt; #if COMPILER(GCC)
&gt; #pragma GCC diagnostic push
&gt; #pragma GCC diagnostic ignored &quot;-Wtype-limits&quot;
&gt; #endif
&gt; 
&gt; #define VERIFY_OPCODE_ID(id, size) COMPILE_ASSERT(id &lt;= numOpcodeIDs,
&gt; ASSERT_THAT_JS_OPCODE_IDS_ARE_VALID);
&gt;     FOR_EACH_OPCODE_ID(VERIFY_OPCODE_ID);
&gt; #undef VERIFY_OPCODE_ID
&gt; 
&gt; #if COMPILER(GCC)
&gt; #pragma GCC diagnostic pop
&gt; #endif
&gt; 
&gt; That looks like a mess, but it works.

This isn&apos;t bad at all.  I think we want to keep the assertion but the presence of the assertion combined with the layout of opcodes guarantees that this assertion will cause the GCC warning.

So, I think it makes sense to disable the warning like this.

RS=me for this fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226670</commentid>
    <comment_count>242</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-06 07:32:15 -0700</bug_when>
    <thetext>(In reply to comment #241)
&gt; This isn&apos;t bad at all.  I think we want to keep the assertion but the
&gt; presence of the assertion combined with the layout of opcodes guarantees
&gt; that this assertion will cause the GCC warning.
&gt; 
&gt; So, I think it makes sense to disable the warning like this.
&gt; 
&gt; RS=me for this fix.

OK then, it&apos;s certainly the easiest solution. http://trac.webkit.org/changeset/205477</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273080</commentid>
    <comment_count>243</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-02-03 15:22:44 -0800</bug_when>
    <thetext>&lt;rdar://problem/30358070&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284422</attachid>
            <date>2016-07-23 14:43:27 -0700</date>
            <delta_ts>2016-07-23 16:43:39 -0700</delta_ts>
            <desc>it begins!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>12104</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjAsNiAr
MjUyMiw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjA5LDYgKzU2MTMsOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc3NCw3ICs1NzgwLDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3ODQsNiArNTc4OSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjY3LDYgKzcyNzMsNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODI0LDYgKzc4MzEsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJp
ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhp
bGlhcnlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworY2xh
c3MgVk07CisKKy8vIEFuIEF1eGlsaWFyeSBiYXJyaWVyIGlzIGEgYmFycmllciB0aGF0IGRvZXMg
bm90IHRyeSB0byByZWFzb24gYWJvdXQgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBpbnRvCisvLyBp
dCwgb3RoZXIgdGhhbiBpbnRlcnByZXRpbmcgYSBmYWxzaXNoIHZhbHVlIGFzIG5vdCBuZWVkIGEg
YmFycmllci4gSXQncyBPSyB0byB1c2UgdGhpcyBmb3IgZWl0aGVyCisvLyBKU0NlbGxzIG9yIGFu
eSBvdGhlciBraW5kIG9mIGRhdGEsIHNvIGxvbmcgYXMgaXQgcmVzcG9uZHMgdG8gb3BlcmF0b3Ih
KCkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CitwdWJs
aWM6CisgICAgQXV4aWxpYXJ5QmFycmllcigpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgQXV4aWxpYXJ5QmFycmllcihWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisg
ICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IFQoKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+CisgICAgdm9pZCBzZXQoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIGNv
bnN0IFQmIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBzbG90
KCkgeyByZXR1cm4gJm1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICB2b2lkIHNldFdpdGhvdXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBtX3ZhbHVlID0g
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUIG1fdmFsdWU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVT4K
K0F1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJpZXIoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7
CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7Cisg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAyMDM2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAj
aW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgor
I2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJD
b21tb25JZGVudGlmaWVycy5oIgotI2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAi
Q3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhl
YXAuaCIKQEAgLTc5Nyw3ICs3OTcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBT
dHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgIHZvaWQgdmlzaXRCdXR0
ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGNv
cHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUp
OwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBh
IG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2Vy
dCBvdGhlcndpc2UuCkBAIC05NDksNyArOTQ4LDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRf
UFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coVk0mKTsKIAogcHJv
dGVjdGVkOgotICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CisgICAgQXV4
aWxpYXJ5QmFycmllcjxCdXR0ZXJmbHkqPiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3BhZGRpbmc7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjAz
NjUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpZm5kZWYgSlNPYmplY3RJbmxpbmVz
X2gKICNkZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJp
ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgog
I2luY2x1ZGUgIkxvb2t1cC5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284428</attachid>
            <date>2016-07-23 16:43:39 -0700</date>
            <delta_ts>2016-07-24 16:23:46 -0700</delta_ts>
            <desc>I think that JSObject.cpp handles butterflies correctly now</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>24364</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjAsNiAr
MjUyMiw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjA5LDYgKzU2MTMsOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc3NCw3ICs1NzgwLDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3ODQsNiArNTc4OSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjY3LDYgKzcyNzMsNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODI0LDYgKzc4MzEsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJp
ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhp
bGlhcnlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworY2xh
c3MgVk07CisKKy8vIEFuIEF1eGlsaWFyeSBiYXJyaWVyIGlzIGEgYmFycmllciB0aGF0IGRvZXMg
bm90IHRyeSB0byByZWFzb24gYWJvdXQgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBpbnRvCisvLyBp
dCwgb3RoZXIgdGhhbiBpbnRlcnByZXRpbmcgYSBmYWxzaXNoIHZhbHVlIGFzIG5vdCBuZWVkIGEg
YmFycmllci4gSXQncyBPSyB0byB1c2UgdGhpcyBmb3IgZWl0aGVyCisvLyBKU0NlbGxzIG9yIGFu
eSBvdGhlciBraW5kIG9mIGRhdGEsIHNvIGxvbmcgYXMgaXQgcmVzcG9uZHMgdG8gb3BlcmF0b3Ih
KCkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CitwdWJs
aWM6CisgICAgQXV4aWxpYXJ5QmFycmllcigpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgQXV4aWxpYXJ5QmFycmllcihWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisg
ICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IFQoKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+CisgICAgdm9pZCBzZXQoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIGNv
bnN0IFQmIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBzbG90
KCkgeyByZXR1cm4gJm1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICB2b2lkIHNldFdpdGhvdXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBtX3ZhbHVlID0g
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUIG1fdmFsdWU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVT4K
K0F1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJpZXIoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7
CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7Cisg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2
aXNpb24gMjAzNjUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3NyArODgsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
Z2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OmNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0
dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCi17Ci0gICAgQVNTRVJUKGJ1dHRlcmZseSk7Ci0g
ICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKLSAgICAK
LSAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKLSAgICBzaXplX3QgcHJlQ2FwYWNpdHk7Ci0gICAgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzOwotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0aGlzLT5oYXNJbmRl
eGluZ0hlYWRlcigpOwotICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKLSAg
ICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFj
aXR5KHN0cnVjdHVyZSk7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1
Y3R1cmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gMDsKLSAgICAgICAg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLSAgICBzaXplX3QgY2FwYWNp
dHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0g
ICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSkpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKHZpc2l0
b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotCi0gICAgICAgIC8vIENvcHkgdGhlIHByb3BlcnRp
ZXMuCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3Vy
Y2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBj
b3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykKLSAgICAgICAgICAgICgtLWN1cnJlbnRUYXJn
ZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKCgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAg
ICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ29weSB0aGUgYXJy
YXkgaWYgYXBwcm9wcmlhdGUuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogY3VycmVudFRhcmdldDsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogY3VycmVudFNvdXJjZTsKLSAgICAgICAgICAgIHNpemVfdCBjb3VudDsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAg
ICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0lO
VDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5H
X1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+
Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0
dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gbmV3QnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzogewotICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmNvcHlI
ZWFkZXJGcm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwotICAgICAgICAg
ICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcjsKLSAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IDA7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dFNvdXJjZSA9IDA7Ci0gICAgICAgICAgICAgICAgY291bnQgPSAwOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtZW1jcHkoY3VycmVudFRhcmdl
dCwgY3VycmVudFNvdXJjZSwgY291bnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIobmV3
QnV0dGVyZmx5KTsKLSAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7Ci0gICAgfSAKLX0K
LQogQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRv
ciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogICAgIEFTU0VSVChidXR0ZXJmbHkpOwpAQCAtMTc5LDkgKzEwOCw2IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKIAogICAgIC8vIE1hcmsgdGhlIHByb3BlcnRp
ZXMuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgdmlzaXRvci5jb3B5TGF0
ZXIoCi0gICAgICAgIHRoaXMsIEJ1dHRlcmZseUNvcHlUb2tlbiwKLSAgICAgICAgYnV0dGVyZmx5
LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsK
ICAgICAKICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICBzd2l0Y2gg
KHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7CkBAIC0yMjUsMTkgKzE1MSw2IEBAIHZvaWQgSlNPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICNlbmRpZgogfQogCi12b2lkIEpTT2JqZWN0
Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENv
cHlUb2tlbiB0b2tlbikKLXsKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKLQotICAgIGlmICh0b2tlbiAhPSBCdXR0ZXJmbHlDb3B5VG9rZW4pCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1f
YnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3Qt
PmNvcHlCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLX0KLQogdm9pZCBKU09iamVjdDo6aGVhcFNuYXBzaG90KEpT
Q2VsbCogY2VsbCwgSGVhcFNuYXBzaG90QnVpbGRlciYgYnVpbGRlcikKIHsKICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtODA3LDYgKzcyMCw4
IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKIHsKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVh
dGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsg
aS0tOykKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gbmV3
QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKQEAgLTgyNyw2ICs3NDIsOCBAQCBDb250aWd1
b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbElu
ZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAg
ICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
SlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OkFsbG9jYXRlQ29udGlndW91cyk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+
Y29udGlndW91cygpOwpAQCAtODQ5LDYgKzc2Niw4IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNyZWF0ZUFycmF5U3RvcmEKICAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAg
cmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICByZXN1bHQtPm1faW5kZXhCaWFz
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gdmVjdG9yTGVuZ3RoOyBpLS07KQorICAgICAgICBy
ZXN1bHQtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUsIHN0cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbigpKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwg
bmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODYyLDYgKzc4MSwxMSBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyCiBDb250aWd1b3VzSlNWYWx1
ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKFZNJiB2bSkKIHsKICAgICBBU1NF
UlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0lu
dDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOworCiAgICAgc2V0U3Ry
dWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKSk7CiAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzSW50MzIoKTsKIH0KQEAgLTg4MSw2ICs4MDUs
MTEgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlYwogQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkK
IHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CisKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAg
IHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKSk7
CiAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7CiB9CkBAIC05MTcs
NyArODQ2LDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogCiAg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0
aCgpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5
U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgLy8g
Tm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHZl
Y3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91
dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSks
IHRyYW5zaXRpb24pOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0
dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CkBAIC05NjYsMTMgKzg5NywxMSBAQCBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgdW5zaWduZWQgdmVjdG9yTGVu
Z3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFn
ZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5
aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3U3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3
U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAg
aWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ld
LmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSks
IHRyYW5zaXRpb24pOwpAQCAtMTAxNCwxMyArOTQzLDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRl
cmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdl
ID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2
bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3Ro
OyBpKyspIHsKICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKClbaV07Ci0gICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkgewotICAgICAgICAgICAgbmV3
U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3Vi
bGUsIHZhbHVlKSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkKICAgICAgICAgICAgIG5l
d1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAg
ICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0xMDQx
LDEzICs5NjgsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQog
ICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5n
dGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRB
cnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBKU1Zh
bHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYp
IHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChu
ZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTI3NTQsNiArMjY3OSw4IEBA
IGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
bmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7
IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLnNldChKU1ZhbHVlKCkpOwogICAgICAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsK
ICAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0
ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3NjgsNiArMjY5NSw4IEBAIGJvb2wg
SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgbmV3SW5kZXhCaWFz
LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgaWYg
KCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uc2V0KEpTVmFsdWUoKSk7CiAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMg
PSBuZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KHZtLCBuZXdCdXR0ZXJmbHkpOwpAQCAtMjc5MywxNCArMjcyMiwxNyBAQCBib29sIEpTT2JqZWN0
OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIGlmICghYnV0dGVyZmx5KQogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3Ro
OyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisgICAgfQogICAg
IG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIAogICAgIGJ1dHRlcmZseS0+
c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAKLSAgICBpZiAoaGFzRG91YmxlKGlu
ZGV4aW5nVHlwZSgpKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5n
dGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47Ci0gICAgfQogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDIwMzY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgIkFyZ0xpc3Qu
aCIKICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQXJyYXlTdG9yYWdl
LmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5o
IgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1
ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNs
dWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJEZWZlckdDLmgiCiAjaW5jbHVk
ZSAiSGVhcC5oIgpAQCAtNzk3LDcgKzc5Nyw2IEBAIHByb3RlY3RlZDoKICAgICBKU09iamVjdChW
TSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKICAgICAgICAgCiAgICAgdm9pZCB2aXNp
dEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSopOwotICAgIHZv
aWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdl
U2l6ZSk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlz
IGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwg
YXNzZXJ0IG90aGVyd2lzZS4KQEAgLTk0OSw3ICs5NDgsNyBAQCBwcml2YXRlOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhWTSYpOwog
CiBwcm90ZWN0ZWQ6Ci0gICAgQ29weUJhcnJpZXI8QnV0dGVyZmx5PiBtX2J1dHRlcmZseTsKKyAg
ICBBdXhpbGlhcnlCYXJyaWVyPEJ1dHRlcmZseSo+IG1fYnV0dGVyZmx5OwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fcGFkZGluZzsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lv
biAyMDM2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBKU09iamVjdElu
bGluZXNfaAogI2RlZmluZSBKU09iamVjdElubGluZXNfaAogCisjaW5jbHVkZSAiQXV4aWxpYXJ5
QmFycmllcklubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284455</attachid>
            <date>2016-07-24 16:23:46 -0700</date>
            <delta_ts>2016-07-25 11:23:50 -0700</delta_ts>
            <desc>audited JSObject.cpp again and audited JSArray.cpp</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26943</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjAsNiAr
MjUyMiw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjA5LDYgKzU2MTMsOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc3NCw3ICs1NzgwLDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3ODQsNiArNTc4OSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjY3LDYgKzcyNzMsNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODI0LDYgKzc4MzEsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJp
ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhp
bGlhcnlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworY2xh
c3MgVk07CisKKy8vIEFuIEF1eGlsaWFyeSBiYXJyaWVyIGlzIGEgYmFycmllciB0aGF0IGRvZXMg
bm90IHRyeSB0byByZWFzb24gYWJvdXQgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBpbnRvCisvLyBp
dCwgb3RoZXIgdGhhbiBpbnRlcnByZXRpbmcgYSBmYWxzaXNoIHZhbHVlIGFzIG5vdCBuZWVkIGEg
YmFycmllci4gSXQncyBPSyB0byB1c2UgdGhpcyBmb3IgZWl0aGVyCisvLyBKU0NlbGxzIG9yIGFu
eSBvdGhlciBraW5kIG9mIGRhdGEsIHNvIGxvbmcgYXMgaXQgcmVzcG9uZHMgdG8gb3BlcmF0b3Ih
KCkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CitwdWJs
aWM6CisgICAgQXV4aWxpYXJ5QmFycmllcigpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgQXV4aWxpYXJ5QmFycmllcihWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisg
ICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IFQoKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+CisgICAgdm9pZCBzZXQoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIGNv
bnN0IFQmIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBzbG90
KCkgeyByZXR1cm4gJm1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICB2b2lkIHNldFdpdGhvdXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBtX3ZhbHVlID0g
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUIG1fdmFsdWU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVT4K
K0F1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJpZXIoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7
CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7Cisg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlz
aW9uIDIwMzY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRTbG93Q2FzZShWTSYgdgogICAgIC8vICAqIGRlc2lyZWRDYXBhY2l0eSAtIGhvdyBsYXJn
ZSBzaG91bGQgd2UgbGlrZSB0byBncm93IHRoZSB2ZWN0b3IgdG8gLSBiYXNlZCBvbiAyeCByZXF1
aXJlZFZlY3Rvckxlbmd0aC4KIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOwotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCksIGxlbmd0aCk7CisgICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihv
bGRWZWN0b3JMZW5ndGgsIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0b3JMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhhdCByZXF1aXJlZCB2
ZWN0b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZlIGZhc2hpb24uCiAg
ICAgaWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVzZWRWZWN0b3JMZW5n
dGgpCkBAIC0zMTQsMTIgKzMxNSwxMiBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dD
YXNlKFZNJiB2CiAgICAgfSBlbHNlIGlmICgobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFz
ZShzdHJ1Y3R1cmUodm0pKSkgfHwgKG5ld0luZGV4QmlhcyAhPSBzdG9yYWdlLT5tX2luZGV4Qmlh
cykpIHsKICAgICAgICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlTaXplLCBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXpl
LCBzaXplb2YoSlNWYWx1ZSkgKiBwcm9wZXJ0eVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
ICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKICAgICAgICAgbWVtbW92ZShuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvciwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihK
U1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogbmV3VmVjdG9yID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3
VmVjdG9yTGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBuZXdWZWN0b3JbaV0uY2xlYXIoKTsKICAg
ICB9CiAKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG5ld1ZlY3RvciA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgIGZvciAodW5zaWduZWQgaSA9IHVzZWRW
ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7IGkrKykKKyAgICAgICAgbmV3VmVjdG9y
W2ldLmNsZWFyKCk7CisKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0
b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0
Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMDM2NTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw2ICsy
NTEsOSBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgICAg
IGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkK
ICAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFs
TGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAg
ICAgIHZvaWQqIHRlbXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDM2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDc3ICs4OCw2IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKU09iamVjdDo6Y29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYgdmlzaXRvciwg
QnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKLXsKLSAgICBBU1NFUlQo
YnV0dGVyZmx5KTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVj
dHVyZSgpOwotICAgIAotICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKLSAgICBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7Ci0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9
IHRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5n
SGVhZGVyKSkgewotICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKLSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKHN0cnVjdHVyZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkg
PSAwOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotICAg
IHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShidXR0ZXJmbHkt
PmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpKSkgewotICAgICAgICBCdXR0ZXJm
bHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0Nv
bGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0KLSAgICAgICAgLy8gQ29w
eSB0aGUgcHJvcGVydGllcy4KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQg
PSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICBQcm9wZXJ0eVN0b3Jh
Z2UgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KQotICAgICAgICAgICAg
KC0tY3VycmVudFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKC0tY3VycmVudFNvdXJj
ZSktPmdldCgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hl
YWRlcikpIHsKLSAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAq
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBDb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0OwotICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlOwotICAgICAgICAgICAgc2l6ZV90IGNv
dW50OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5nVHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9E
T1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0g
bmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAgICAgIGN1cnJl
bnRTb3VyY2UgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBuZXdCdXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBjb3VudCA9
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gMDsKLSAgICAgICAg
ICAgICAgICBjdXJyZW50U291cmNlID0gMDsKLSAgICAgICAgICAgICAgICBjb3VudCA9IDA7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1lbWNw
eShjdXJyZW50VGFyZ2V0LCBjdXJyZW50U291cmNlLCBjb3VudCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRo
b3V0QmFycmllcihuZXdCdXR0ZXJmbHkpOwotICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVy
Zmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVz
KTsKLSAgICB9IAotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVy
Zmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKGJ1dHRlcmZseSk7CkBAIC0xNzksOSArMTA4LDYg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogCiAgICAgLy8gTWFy
ayB0aGUgcHJvcGVydGllcy4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICB2
aXNpdG9yLmNvcHlMYXRlcigKLSAgICAgICAgdGhpcywgQnV0dGVyZmx5Q29weVRva2VuLAotICAg
ICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBh
Y2l0eUluQnl0ZXMpOwogICAgIAogICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRl
LgogICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTIyNSwxOSArMTUxLDYg
QEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogI2VuZGlmCiB9CiAK
LXZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRv
ciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQotewotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotCi0gICAgaWYgKHRva2VuICE9IEJ1dHRlcmZseUNvcHlU
b2tlbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
dGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAg
ICAgdGhpc09iamVjdC0+Y29weUJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCkpOwotfQotCiB2b2lkIEpTT2JqZWN0Ojpo
ZWFwU25hcHNob3QoSlNDZWxsKiBjZWxsLCBIZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVyKQog
ewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBA
IC04MDcsNiArNzIwLDggQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0
aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQz
MigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIpOwogICAgIHNl
dFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwog
ICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOwpAQCAtODI3LDYgKzc0
Miw4IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKIHsKICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBj
cmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsgaS0tOykKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91
dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblBy
b3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKICAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4g
bmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CkBAIC04NDksNiArNzY2LDggQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAu
Y2xlYXIoKTsKICAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3Vs
dC0+bV9pbmRleEJpYXMgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSB2ZWN0b3JMZW5ndGg7IGkt
LTspCisgICAgICAgIHJlc3VsdC0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihK
U1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJh
eVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NjIs
NiArNzgxLDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIKIENv
bnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvSW50MzIoVk0mIHZt
KQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5
LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7
CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIp
KTsKICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQpA
QCAtODgxLDYgKzgwNSwxMSBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVu
ZGVjCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRp
Z3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkp
KTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1Zh
bHVlKCkpOworCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0
ZUNvbnRpZ3VvdXMpKTsKICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMo
KTsKIH0KQEAgLTkxNyw3ICs4NDYsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
VW5kZWNpZGVkCiAKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQo
KS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3RydWN0
Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVu
Z3RoKTsKLSAgICAvLyBObyBuZWVkIHRvIGNvcHkgZWxlbWVudHMuCisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpLS07KQorICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKQEAgLTk2NiwxMyArODk3
LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAg
ICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9y
YWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0g
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAg
ICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYp
OworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KHYpOworICAgICAgICBpZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0xMDE0LDEzICs5NDMsMTEgQEAgQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3Jh
Z2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29w
eWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKSB7Ci0g
ICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIG5ld1N0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVl
OjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKQog
ICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5p
c0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0
aW9uKTsKQEAgLTEwNDEsMTMgKzk2OCwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0Q29udGlndW91CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0
KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0
cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rv
ckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsg
aSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7
CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwot
ICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBu
ZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAg
ICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMjc1
NCw2ICsyNjc5LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAog
ICAgICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdCdXR0ZXJm
bHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uc2V0KEpTVmFsdWUoKSk7CiAg
ICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdW
ZWN0b3JMZW5ndGgpOwogICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1
cmUodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc2OCw2ICsy
Njk1LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAg
ICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5n
dGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytp
KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5zZXQo
SlNWYWx1ZSgpKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JM
ZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CkBAIC0yNzkzLDE0ICsyNzIyLDE3IEBA
IGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKICAgICAgICAgbmV3VmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgaWYgKCFidXR0ZXJmbHkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgp
KSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdW
ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldID0gUE5hTjsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBv
bGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgp
KTsKKyAgICB9CiAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwogCiAg
ICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKIAotICAgIGlm
IChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpW2ldID0gUE5hTjsKLSAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkocmV2aXNpb24gMjAzNjUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5j
bHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKICNpbmNsdWRl
ICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCiAjaW5jbHVk
ZSAiQnV0dGVyZmx5LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xhc3NJ
bmZvLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJDb3B5QmFy
cmllci5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVy
R0MuaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC03OTcsNyArNzk3LDYgQEAgcHJvdGVjdGVkOgog
ICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAK
ICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0
dXJlKik7Ci0gICAgdm9pZCBjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiwgQnV0dGVyZmx5Kiwg
c2l6ZV90IHN0b3JhZ2VTaXplKTsKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0
IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0b3Jh
Z2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtOTQ5LDcgKzk0OCw3IEBAIHByaXZh
dGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3Jh
Z2VTbG93KFZNJik7CiAKIHByb3RlY3RlZDoKLSAgICBDb3B5QmFycmllcjxCdXR0ZXJmbHk+IG1f
YnV0dGVyZmx5OworICAgIEF1eGlsaWFyeUJhcnJpZXI8QnV0dGVyZmx5Kj4gbV9idXR0ZXJmbHk7
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9wYWRkaW5n
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmgJKHJldmlzaW9uIDIwMzY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZu
ZGVmIEpTT2JqZWN0SW5saW5lc19oCiAjZGVmaW5lIEpTT2JqZWN0SW5saW5lc19oCiAKKyNpbmNs
dWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMb29rdXAuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284506</attachid>
            <date>2016-07-25 11:23:50 -0700</date>
            <delta_ts>2016-07-25 16:17:48 -0700</delta_ts>
            <desc>started working on ButterflyInlines.h</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43866</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjAsNiAr
MjUyMiw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjA5LDYgKzU2MTMsOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc3NCw3ICs1NzgwLDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3ODQsNiArNTc4OSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjY3LDYgKzcyNzMsNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODI0LDYgKzc4MzEsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjAzNjUxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNiAr
MTUxLDggQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0
V2l0aERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmRlc3Ry
dWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NU
eXBlPiBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0
ZXMpOwogICAgIENvcGllZEFsbG9jYXRvciYgc3RvcmFnZUFsbG9jYXRvcigpIHsgcmV0dXJuIG1f
c3RvcmFnZVNwYWNlLmFsbG9jYXRvcigpOyB9CisgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlhcnko
SlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4
aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKICAgICBDaGVja2VkQm9vbGVh
biB0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QsIHZvaWQq
Kik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCB2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKICAgICB2b2lkIGFzY3JpYmVPd25l
cihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjAzNjUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIz
MSwyOCBAQCBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9iamVjCiAgICAgcmV0
dXJuIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGJ5dGVzKTsKIH0KIAordm9p
ZCogSGVhcDo6YWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3Qg
Ynl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZUF1eGls
aWFyeShieXRlcyk7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9n
RigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxu
IiwgYnl0ZXMsIGludGVuZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShpbnRlbmRlZE93bmVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQq
IEhlYXA6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90
IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVB
dXhpbGlhcnkoYnl0ZXMpOworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0
YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAl
cC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBp
bmxpbmUgQ2hlY2tlZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewogICAgIENoZWNrZWRC
b29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCShyZXZpc2lvbiAyMDM2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgTWFy
a2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+ZGlkUmV0aXJlQmxv
Y2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0
cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMpCiB7CiAgICAgaWYg
KG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayA9PSBtX25l
eHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtl
ZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQogCi1pbmxpbmUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCBi
eXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAgIG1faGVhcC0+bV9v
cGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlB
bGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRo
b3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFtX2N1cnJlbnRCbG9j
ayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0
b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNpemVf
dCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWl1cmUgPSB0cnVlOworICAgIHJldHVybiBh
bGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1hcmtl
ZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCit7CisgICAgYm9v
bCBjcmFzaE9uRmFpdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoYnl0
ZXMsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlSW1wbChzaXplX3QgYnl0ZXMsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit7CiAgICAg
QVNTRVJUKG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAg
ICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogCkBAIC0xNTUsMjkgKzE2NywzNCBAQCB2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoCiAgICAgQVNTRVJUKCFtX2Zy
ZWVMaXN0LmhlYWQpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5ieXRlcyk7
CiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgIHZvaWQq
IHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwogICAgIAogICAg
IGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAog
ICAgIGlmIChtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKSkgewotICAgICAgICBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRl
V2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBBU1NFUlQoIW1faGVhcC0+c2hvdWxkQ29s
bGVjdCgpKTsKICAgICAKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBhbGxvY2F0ZUJsb2NrKGJ5
dGVzKTsKLSAgICBBU1NFUlQoYmxvY2spOworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IHRyeUFs
bG9jYXRlQmxvY2soYnl0ZXMpOworICAgIGlmICghYmxvY2spIHsKKyAgICAgICAgaWYgKGNyYXNo
T25GYWlsdXJlKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogICAgIGFkZEJs
b2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwor
ICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwogICAgIEFT
U0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU1hcmtlZEJsb2NrKiBNYXJr
ZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2soc2l6ZV90IGJ5dGVzKQorTWFya2VkQmxvY2sqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jayhzaXplX3QgYnl0ZXMpCiB7CiAgICAgc2l6
ZV90IG1pbkJsb2NrU2l6ZSA9IE1hcmtlZEJsb2NrOjpibG9ja1NpemU7CiAgICAgc2l6ZV90IG1p
bkFsbG9jYXRpb25TaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjph
dG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSkgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8
TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7CkBAIC0xODYsNyArMjAzLDcgQEAgTWFya2Vk
QmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVCbAogCiAgICAgc2l6ZV90IGNlbGxTaXpl
ID0gbV9jZWxsU2l6ZSA/IG1fY2VsbFNpemUgOiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFy
a2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7CiAKLSAgICByZXR1cm4gTWFya2VkQmxvY2s6OmNy
ZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwor
ICAgIHJldHVybiBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKCptX2hlYXAsIHRoaXMsIGJsb2NrU2l6
ZSwgY2VsbFNpemUsIG1fYXR0cmlidXRlcyk7CiB9CiAKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjph
ZGRCbG9jayhNYXJrZWRCbG9jayogYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjAzNjUxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDYgKzUzLDcgQEAgcHVibGljOgogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpL
aW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9CiAg
ICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3Qp
OwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KICAgICBNYXJrZWRCbG9jayog
dGFrZUxhc3RBY3RpdmVCbG9jaygpCiAgICAgewpAQCAtNzEsMTAgKzcyLDEyIEBAIHB1YmxpYzoK
ICAgIAogcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dD
YXNlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKLSAgICB2b2lkKiB0
cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRy
eUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1w
bChzaXplX3QsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3Rpbmcoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xs
ZWN0aW5nSW1wbChzaXplX3QpOwogICAgIHZvaWQqIHRyeVBvcEZyZWVMaXN0KHNpemVfdCk7Ci0g
ICAgTWFya2VkQmxvY2sqIGFsbG9jYXRlQmxvY2soc2l6ZV90KTsKKyAgICBNYXJrZWRCbG9jayog
dHJ5QWxsb2NhdGVCbG9jayhzaXplX3QpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RD
b2xsZWN0aW9uc0lmTmVlZGVkKCk7CiAgICAgdm9pZCByZXRpcmUoTWFya2VkQmxvY2sqLCBNYXJr
ZWRCbG9jazo6RnJlZUxpc3QmKTsKICAgICAKQEAgLTExMywyMSArMTE2LDM1IEBAIGlubGluZSB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiAKICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRy
aWJ1dGVzOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShz
aXplX3QgYnl0ZXMpCit7CisgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVl
TGlzdC5oZWFkOworICAgIGlmIChVTkxJS0VMWSghaGVhZCkpIHsKKyAgICAgICAgdm9pZCogcmVz
dWx0ID0gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcyk7CisgICAgICAgIGlmIChyZXN1bHQgJiYg
IUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIG1fZnJlZUxpc3QuaGVh
ZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNl
dChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0dXJuIGhlYWQ7Cit9CisKIGlubGluZSB2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBieXRlcykKIHsKICAgICBNYXJrZWRC
bG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZ
KCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVz
KTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsK
LSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNl
dChoZWFkLCAweENELCBieXRlcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0jaWZuZGVmIE5ERUJVRwotICAg
IG1lbXNldChoZWFkLCAweENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKKyAgICAgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKICAgICByZXR1cm4gaGVh
ZDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNw
cAkocmV2aXNpb24gMjAzNjUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTcgQEAgbmFtZXNwYWNlIEpT
QyB7CiBzdGF0aWMgY29uc3QgYm9vbCBjb21wdXRlQmFsYW5jZSA9IGZhbHNlOwogc3RhdGljIHNp
emVfdCBiYWxhbmNlOwogCi1NYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwJiBo
ZWFwLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3Qg
Y2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCitNYXJrZWRC
bG9jayogTWFya2VkQmxvY2s6OnRyeUNyZWF0ZShIZWFwJiBoZWFwLCBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9j
YXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgaWYgKGNvbXB1dGVCYWxhbmNlKSB7
CiAgICAgICAgIGJhbGFuY2UrKzsKICAgICAgICAgaWYgKCEoYmFsYW5jZSAlIDEwKSkKICAgICAg
ICAgICAgIGRhdGFMb2coIk1hcmtlZEJsb2NrIEJhbGFuY2U6ICIsIGJhbGFuY2UsICJcbiIpOwog
ICAgIH0KLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGZhc3RBbGlnbmVk
TWFsbG9jKGJsb2NrU2l6ZSwgY2FwYWNpdHkpKSBNYXJrZWRCbG9jayhhbGxvY2F0b3IsIGNhcGFj
aXR5LCBjZWxsU2l6ZSwgYXR0cmlidXRlcyk7CisgICAgdm9pZCogYmxvY2tTcGFjZSA9IHRyeUZh
c3RBbGlnbmVkTWFsbG9jKGJsb2NrU2l6ZSwgY2FwYWNpdHkpOworICAgIGlmICghYmxvY2tTcGFj
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbmV3
IChOb3ROdWxsLCBibG9ja1NwYWNlKSBNYXJrZWRCbG9jayhhbGxvY2F0b3IsIGNhcGFjaXR5LCBj
ZWxsU2l6ZSwgYXR0cmlidXRlcyk7CiAgICAgaGVhcC5kaWRBbGxvY2F0ZUJsb2NrKGNhcGFjaXR5
KTsKICAgICByZXR1cm4gYmxvY2s7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIwMzY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG11dGFibGUgUmV0dXJuVHlwZSBtX2NvdW50Owog
ICAgICAgICB9OwogCi0gICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRlKEhlYXAmLCBN
YXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3Qg
QWxsb2NhdG9yQXR0cmlidXRlcyYpOworICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIHRyeUNy
ZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2Vs
bFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKICAgICAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShIZWFwJiwgTWFya2VkQmxvY2sqKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0F0
b21BbGlnbmVkKGNvbnN0IHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjAzNjUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQq
IGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZUF1
eGlsaWFyeShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7
CiAKICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7IHJl
dHVybiBtX2Rlc3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVj
dHNXaXRob3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KQEAgLTE4Miw2
ICsxODMsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUF1eGlsaQogICAg
IHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKGJ5dGVzKTsKIH0K
IAoraW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3Qg
Ynl0ZXMpCit7CisgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcykudHJ5QWxs
b2NhdGUoYnl0ZXMpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZv
aWQgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewog
ICAgIGZvckVhY2hTdWJzcGFjZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0F1eGlsaWFyeUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFZNOworCisvLyBBbiBBdXhpbGlhcnkgYmFycmllciBp
cyBhIGJhcnJpZXIgdGhhdCBkb2VzIG5vdCB0cnkgdG8gcmVhc29uIGFib3V0IHRoZSB2YWx1ZSBi
ZWluZyBzdG9yZWQgaW50bworLy8gaXQsIG90aGVyIHRoYW4gaW50ZXJwcmV0aW5nIGEgZmFsc2lz
aCB2YWx1ZSBhcyBub3QgbmVlZCBhIGJhcnJpZXIuIEl0J3MgT0sgdG8gdXNlIHRoaXMgZm9yIGVp
dGhlcgorLy8gSlNDZWxscyBvciBhbnkgb3RoZXIga2luZCBvZiBkYXRhLCBzbyBsb25nIGFzIGl0
IHJlc3BvbmRzIHRvIG9wZXJhdG9yISgpLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEF1
eGlsaWFyeUJhcnJpZXIgeworcHVibGljOgorICAgIEF1eGlsaWFyeUJhcnJpZXIoKSB7IH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEF1eGlsaWFyeUJhcnJpZXIoVk0mLCBK
U0NlbGwqLCBVJiYpOworICAgIAorICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSBUKCk7IH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0KFZNJiwgSlNDZWxs
KiwgVSYmKTsKKyAgICAKKyAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisgICAgCisgICAgVCogc2xvdCgpIHsgcmV0dXJuICZtX3ZhbHVlOyB9CisgICAgCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXRXaXRob3V0QmFycmllcihV
JiYgdmFsdWUpIHsgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7IH0KKyAgICAKK3By
aXZhdGU6CisgICAgVCBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFy
cmllcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkhlYXAuaCIKKyNp
bmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3RlbXBsYXRlPHR5cGVuYW1lIFU+CitBdXhpbGlhcnlCYXJyaWVyPFQ+OjpBdXhpbGlhcnlCYXJy
aWVyKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVSYmIHZhbHVlKQoreworICAgIG1fdmFsdWUgPSBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQXV4aWxpYXJ5QmFycmllcjxUPjo6c2V0
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVSYmIHZhbHVlKQoreworICAgIG1fdmFsdWUgPSBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzY1MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzcsMTAgKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25l
ciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJ
bmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewotICAg
IHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW50
ZW5kZWRPd25lciwgc2l6ZSwgJnRlbXApKTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21C
YXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICB2b2lkKiBiYXNl
ID0gdm0uaGVhcC5hbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCBzaXplKTsKKyAgICBC
dXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjAzNjUxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3
ICsyNTQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAg
Ly8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxhcmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cg
dGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJlcXVpcmVkVmVjdG9yTGVuZ3RoLgogCiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKKyAgICB1
bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1
bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG9sZFZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsK
ICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUs
IGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTMxNCwxMiArMzE1LDEyIEBA
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICB9IGVsc2UgaWYg
KChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSh2bSkpKSB8fCAobmV3
SW5kZXhCaWFzICE9IHN0b3JhZ2UtPm1faW5kZXhCaWFzKSkgewogICAgICAgICBtZW1tb3ZlKG5l
d0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIGJ1dHRlcmZseS0+
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1ZhbHVlKSAqIHByb3Bl
cnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
MCkpOwogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yLCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0
aCk7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBuZXdWZWN0b3IgPSBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7IGkrKykKLSAgICAg
ICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAorICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogbmV3VmVjdG9yID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3I7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdXNlZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rv
ckxlbmd0aDsgaSsrKQorICAgICAgICBuZXdWZWN0b3JbaV0uY2xlYXIoKTsKKwogICAgIG5ld0J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgp
OwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5k
ZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3
QnV0dGVyZmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHJldmlzaW9uIDIwMzY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSw5IEBAIGlubGluZSBKU0FycmF5KiBK
U0FycmF5Ojp0cnlDcmVhdGVVbmluaXQKICAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlh
bExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgIGJ1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7
ICsraSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgdm9pZCogdGVtcDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwMzY1
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODgsNzcgKzg4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJv
cGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5
QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6
ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFTU0VSVChidXR0ZXJmbHkpOwotICAgIAotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAgCi0gICAgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAg
c2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
czsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIo
KTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAgIHByZUNh
cGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1
cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9
IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJ
bmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICh2aXNp
dG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzLgotICAgICAg
ICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVy
Zmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9y
YWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50U291cmNlKS0+Z2V0KCkpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewotICAgICAgICAgICAgKm5l
d0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENvcHkgdGhlIGFycmF5IGlmIGFwcHJv
cHJpYXRlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJl
bnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2Ug
QUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElO
R19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewot
ICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29u
dGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwot
ICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAg
ICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1
cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBjdXJy
ZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSAw
OwotICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5KGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRT
b3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKG5ld0J1dHRlcmZseSk7
Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwotICAgIH0gCi19Ci0KIEFMV0FZU19J
TkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NF
UlQoYnV0dGVyZmx5KTsKQEAgLTE3OSw5ICsxMDgsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OnZpc2l0QnV0dGVyCiAKICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBz
dG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIHZpc2l0b3IuY29weUxhdGVyKAotICAgICAg
ICB0aGlzLCBCdXR0ZXJmbHlDb3B5VG9rZW4sCi0gICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAgCiAgICAg
Ly8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgc3dpdGNoICh0aGlzLT5pbmRl
eGluZ1R5cGUoKSkgewpAQCAtMjI1LDE5ICsxNTEsNiBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYKIH0KIAotdm9pZCBKU09iamVjdDo6Y29weUJhY2tp
bmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9r
ZW4pCi17Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxs
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0K
LSAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5n
ZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVy
Zmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGlu
ZVNpemUoKSk7Ci19Ci0KIHZvaWQgSlNPYmplY3Q6OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNlbGws
IEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxkZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTgwNyw2ICs3MjAsOCBAQCBDb250aWd1
b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbElu
ZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAg
ICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+
Y29udGlndW91c0ludDMyKCk7CkBAIC04MjcsNiArNzQyLDggQEAgQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0OjpjcmVhdGVJbml0aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsK
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFn
ZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7
CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0
ZUNvbnRpZ3VvdXMpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0
dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KTsKQEAgLTg0OSw2ICs3NjYsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJh
eVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAg
Zm9yIChzaXplX3QgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3Zl
Y3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAg
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg2Miw2ICs3ODEsMTEgQEAgQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycgogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0
Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVj
aWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwg
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblBy
b3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVybiBtX2J1dHRlcmZs
eS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiB9CkBAIC04ODEsNiArODA1LDExIEBAIENvbnRp
Z3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWMKIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNT
RVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVy
biBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOwogfQpAQCAtOTE3LDcgKzg0Niw5IEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKIAogICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRo
b3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIC8vIE5vIG5lZWQgdG8g
Y29weSBlbGVtZW50cy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7
IGktLTspCisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9u
KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFn
ZS0+YnV0dGVyZmx5KCkpOwpAQCAtOTY2LDEzICs4OTcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydEludDMyVG9BcgogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3Jh
Z2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRz
KHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5n
dGg7IGkrKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAg
ICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0Vt
cHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9u
KTsKQEAgLTEwMTQsMTMgKzk0MywxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
RG91YmxlVG9BCiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCkt
PnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVj
dENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxl
bmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsr
KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwot
ICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVB
c0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0
aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkp
OworICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJU
KG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMTA0MSwxMyArOTY4LDEx
IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAg
QXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdl
V2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAg
ICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwor
ICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYp
OworICAgICAgICBpZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+
bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0yNzU0LDYgKzI2NzksOCBAQCBib29sIEpTT2Jq
ZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgICAgICBBcnJheVN0b3JhZ2U6
OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxl
bmd0aCkpOwogICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVj
dG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3ZlY3RvcltpXS5zZXQoSlNWYWx1ZSgpKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIHNl
dEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzY4LDYgKzI2OTUsOCBAQCBib29sIEpTT2JqZWN0Ojpp
bmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3QnV0dGVy
Zmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9y
TGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLnNldChKU1ZhbHVlKCkpOwogICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwog
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhC
aWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0
dGVyZmx5KTsKQEAgLTI3OTMsMTQgKzI3MjIsMTcgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVu
Z3RoU2xvdyhWTSYgdm0sIAogICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKICAgICBpZiAoIWJ1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1Zl
Y3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOworICAgIH0KICAgICBtX2J1dHRlcmZs
eS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CiAKICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxl
bmd0aChuZXdWZWN0b3JMZW5ndGgpOwogCi0gICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUo
KSkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3
VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKS5kYXRhKClbaV0gPSBQTmFOOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDM2
NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVk
ZSAiQXJyYXlDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1
ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRl
ICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25J
ZGVudGlmaWVycy5oIgotI2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9t
R2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIK
QEAgLTc5Nyw3ICs3OTcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1
cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHko
U2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGNvcHlCdXR0
ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOwogCiAg
ICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUg
d2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhl
cndpc2UuCkBAIC05NDksNyArOTQ4LDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coVk0mKTsKIAogcHJvdGVjdGVk
OgotICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CisgICAgQXV4aWxpYXJ5
QmFycmllcjxCdXR0ZXJmbHkqPiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
cHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3BhZGRpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjAzNjUxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKICNk
ZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1
ZGUgIkxvb2t1cC5oIgpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHJldmlzaW9uIDIwMzY1MSkK
KysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2
ICs5NywxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAg
cmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOwogfQogCit2b2lkKiB0cnlG
YXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAg
cmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOworfQorCiB2b2lkIGZhc3RB
bGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBfYWxpZ25lZF9mcmVlKHApOwpAQCAtMTExLDYg
KzExNiwxMyBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAg
cmV0dXJuIHA7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICB2b2lkKiBwID0gbnVsbHB0cjsKKyAgICBwb3NpeF9t
ZW1hbGlnbigmcCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gcDsKK30KKwogdm9pZCBm
YXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgZnJlZShwKTsKQEAgLTIzMSw2ICsyNDMs
MTEgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVy
biBibWFsbG9jOjphcGk6Om1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKK3ZvaWQqIHRy
eUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAg
ICByZXR1cm4gYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworfQor
CiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBibWFsbG9jOjphcGk6OmZy
ZWUocCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMDM2NTEpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEZyZWUodm9pZCopOwogCiAvLyBBbGxvY2F0aW9ucyBm
cm9tIGZhc3RBbGlnbmVkTWFsbG9jKCkgbXVzdCBiZSBmcmVlZCB1c2luZyBmYXN0QWxpZ25lZEZy
ZWUoKS4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUZhc3RBbGln
bmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCopOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90
IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fs
bG9jYXRvci5jcHAJKHJldmlzaW9uIDIwMzY1MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTggQEAgdm9pZCogQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZQogCiB2b2lkKiBBbGxvY2F0b3I6OmFsbG9j
YXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogeworICAgIGJvb2wgY3Jhc2hPbkZh
aWx1cmUgPSB0cnVlOworICAgIHJldHVybiBjYWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6ZSwg
Y3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBm
YWxzZTsKKyAgICByZXR1cm4gY2FsbG9jYXRlSW1wbChhbGlnbm1lbnQsIHNpemUsIGNyYXNoT25G
YWlsdXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUltcGwoc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90IHNpemUsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit7CiAgICAgQkFTU0VSVChp
c1Bvd2VyT2ZUd28oYWxpZ25tZW50KSk7CiAKICAgICBpZiAoIW1faXNCbWFsbG9jRW5hYmxlZCkg
ewpAQCAtODAsNyArOTIsMTAgQEAgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxp
Z25tZQogICAgICAgICByZXR1cm4gYWxsb2NhdGUocm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1l
bnQsIHNpemUpKTsKIAogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQ
cm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0
RmFzdENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgIEhl
YXAqIGhlYXAgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlmIChjcmFz
aE9uRmFpbHVyZSkKKyAgICAgICAgcmV0dXJuIGhlYXAtPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxp
Z25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gaGVhcC0+dHJ5QWxsb2NhdGVMYXJnZShsb2NrLCBh
bGlnbm1lbnQsIHNpemUpOwogfQogCiB2b2lkKiBBbGxvY2F0b3I6OnJlYWxsb2NhdGUodm9pZCog
b2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxs
b2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3Iu
aAkocmV2aXNpb24gMjAzNjUxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQq
IHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2
b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIGFs
bG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogcmVhbGxvY2F0ZSh2
b2lkKiwgc2l6ZV90KTsKIAogICAgIHZvaWQgc2NhdmVuZ2UoKTsKIAogcHJpdmF0ZToKKyAgICB2
b2lkKiBhbGxvY2F0ZUltcGwoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBib29sIGNyYXNoT25G
YWlsdXJlKTsKKyAgICAKICAgICBib29sIGFsbG9jYXRlRmFzdENhc2Uoc2l6ZV90LCB2b2lkKiYp
OwogICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0NhY2hlLmgJKHJldmlzaW9uIDIwMzY1MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCogYWxs
b2NhdGUoc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqKTsKICAgICBzdGF0
aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90KTsKQEAgLTc5LDYgKzgwLDE0IEBAIGlu
bGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUKICAgICByZXR1cm4gY2FjaGUt
PmFsbG9jYXRvcigpLmFsbG9jYXRlKHNpemUpOwogfQogCitpbmxpbmUgdm9pZCogQ2FjaGU6OnRy
eUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIENhY2hlKiBj
YWNoZSA9IFBlclRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CisgICAgaWYgKCFjYWNoZSkK
KyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoYWxpZ25tZW50LCBzaXpl
KTsKKyAgICByZXR1cm4gY2FjaGUtPmFsbG9jYXRvcigpLnRyeUFsbG9jYXRlKGFsaWdubWVudCwg
c2l6ZSk7Cit9CisKIGlubGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCiB7CiAgICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hlPjo6
Z2V0RmFzdENhc2UoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCShyZXZpc2lvbiAy
MDM2NTEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsMTIgQEAgaW5saW5lIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkKICAg
ICByZXR1cm4gQ2FjaGU6OmFsbG9jYXRlKHNpemUpOwogfQogCisvLyBSZXR1cm5zIG51bGwgb24g
ZmFpbHVyZS4KK2lubGluZSB2b2lkKiB0cnlNZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gQ2FjaGU6OnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6
ZSk7Cit9CisKIC8vIENyYXNoZXMgb24gZmFpbHVyZS4KIGlubGluZSB2b2lkKiBtZW1hbGlnbihz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284540</attachid>
            <date>2016-07-25 16:17:48 -0700</date>
            <delta_ts>2016-07-25 16:30:04 -0700</delta_ts>
            <desc>audited PolymorphicAccess.cpp and DFGSpeculativeJIT64.cpp</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53226</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4NTEsMjcgKzM4NTEsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAot
ICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3Jh
Z2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BS
KTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAg
ICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFy
eURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gy
R1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
LCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNp
emVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
VmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJs
ZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIs
IHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJH
UFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNj
cmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlu
a1RvKGxvb3AsICZtX2ppdCk7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1
ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5l
cmF0b3I+KAogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+
aW5kZXhpbmdUeXBlKCkpLAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0
b3JhZ2UpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjAzNjk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTAsNyArMTUwLDExIEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRv
ckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmpl
Y3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxv
Y2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2UuZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDbGFzc1R5cGU+IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0T2ZU
eXBlKHNpemVfdCBieXRlcyk7CisgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JBdXhp
bGlhcnlEYXRhKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlB
bGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2Nh
dG9yKCkgeyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KKyAgICB2b2lkKiBh
bGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOwor
ICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2
b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgIENoZWNr
ZWRCb29sZWFuIHRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVf
dCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgYXNj
cmliZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzEsNiArMjMxLDM3IEBAIE1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWMK
ICAgICByZXR1cm4gYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYnl0ZXMpOwog
fQogCit2b2lkKiBIZWFwOjphbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIs
IHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNwYWNlLmFsbG9j
YXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAg
IGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAl
cDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gbV9vYmplY3RTcGFjZS50cnlB
bGxvY2F0ZUF1eGlsaWFyeShieXRlcyk7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykK
KyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBm
b3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQqIEhlYXA6OnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRl
ZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7
CisgICAgdm9pZCogbmV3QmFzZSA9IHRyeUFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIs
IG5ld1NpemUpOworICAgIGlmICghbmV3QmFzZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2UsIG9sZFNpemUpOworICAgIHJldHVybiBuZXdCYXNl
OworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlKEpT
Q2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewogICAg
IENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5dGVz
LCBvdXRQdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+ZGlk
UmV0aXJlQmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMpCiB7
CiAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9j
ayA9PSBtX25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5lIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQogCi1p
bmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCitp
bmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5n
KHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAgIG1f
aGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiByZXN1
bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxs
b2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFtX2N1
cnJlbnRCbG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJr
ZWRBbGxvY2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlKHNpemVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWl1cmUgPSB0cnVlOworICAg
IHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3Zv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCit7
CisgICAgYm9vbCBjcmFzaE9uRmFpdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xv
d0Nhc2UoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3dDYXNlSW1wbChzaXplX3QgYnl0ZXMsIGJvb2wgY3Jhc2hPbkZhaWx1cmUp
Cit7CiAgICAgQVNTRVJUKG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxv
Y2soKSk7CiAgICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogCkBAIC0xNTUsMjkgKzE2
NywzNCBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoCiAgICAgQVNT
RVJUKCFtX2ZyZWVMaXN0LmhlYWQpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlz
dC5ieXRlcyk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwor
ICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwog
ICAgIAogICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIAogICAgIGlmIChtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKSkgewot
ICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgICAgIHJlc3VsdCA9IHRy
eUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwogICAgICAgICBpZiAocmVzdWx0KQog
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBBU1NFUlQoIW1faGVhcC0+
c2hvdWxkQ29sbGVjdCgpKTsKICAgICAKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBhbGxvY2F0
ZUJsb2NrKGJ5dGVzKTsKLSAgICBBU1NFUlQoYmxvY2spOworICAgIE1hcmtlZEJsb2NrKiBibG9j
ayA9IHRyeUFsbG9jYXRlQmxvY2soYnl0ZXMpOworICAgIGlmICghYmxvY2spIHsKKyAgICAgICAg
aWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQog
ICAgIGFkZEJsb2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUo
Ynl0ZXMpOworICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMp
OwogICAgIEFTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU1hcmtlZEJs
b2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2soc2l6ZV90IGJ5dGVzKQorTWFya2Vk
QmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jayhzaXplX3QgYnl0ZXMpCiB7
CiAgICAgc2l6ZV90IG1pbkJsb2NrU2l6ZSA9IE1hcmtlZEJsb2NrOjpibG9ja1NpemU7CiAgICAg
c2l6ZV90IG1pbkFsbG9jYXRpb25TaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtl
ZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSkgKyBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7CkBAIC0xODYsNyArMjAzLDcg
QEAgTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVCbAogCiAgICAgc2l6ZV90
IGNlbGxTaXplID0gbV9jZWxsU2l6ZSA/IG1fY2VsbFNpemUgOiBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7CiAKLSAgICByZXR1cm4gTWFya2Vk
QmxvY2s6OmNyZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJp
YnV0ZXMpOworICAgIHJldHVybiBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKCptX2hlYXAsIHRoaXMs
IGJsb2NrU2l6ZSwgY2VsbFNpemUsIG1fYXR0cmlidXRlcyk7CiB9CiAKIHZvaWQgTWFya2VkQWxs
b2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG9jayogYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjAzNjk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhl
YXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxL
aW5kOyB9CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0
ZShzaXplX3QpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KICAgICBNYXJr
ZWRCbG9jayogdGFrZUxhc3RBY3RpdmVCbG9jaygpCiAgICAgewpAQCAtNzEsMTAgKzcyLDEyIEBA
IHB1YmxpYzoKICAgIAogcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxv
Y2F0ZVNsb3dDYXNlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKLSAg
ICB2b2lkKiB0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVNs
b3dDYXNlSW1wbChzaXplX3QsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIHZvaWQqIHRyeUFs
bG9jYXRlV2l0aG91dENvbGxlY3Rpbmcoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdp
dGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QpOwogICAgIHZvaWQqIHRyeVBvcEZyZWVMaXN0KHNp
emVfdCk7Ci0gICAgTWFya2VkQmxvY2sqIGFsbG9jYXRlQmxvY2soc2l6ZV90KTsKKyAgICBNYXJr
ZWRCbG9jayogdHJ5QWxsb2NhdGVCbG9jayhzaXplX3QpOwogICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKCk7CiAgICAgdm9pZCByZXRpcmUoTWFya2VkQmxv
Y2sqLCBNYXJrZWRCbG9jazo6RnJlZUxpc3QmKTsKICAgICAKQEAgLTExMywyMSArMTE2LDM1IEBA
IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiAKICAgICBtX2F0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVzOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZShzaXplX3QgYnl0ZXMpCit7CisgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFk
ID0gbV9mcmVlTGlzdC5oZWFkOworICAgIGlmIChVTkxJS0VMWSghaGVhZCkpIHsKKyAgICAgICAg
dm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcyk7CisgICAgICAgIGlmIChy
ZXN1bHQgJiYgIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNldChoZWFkLCAweENE
LCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIG1fZnJl
ZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAg
ICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0dXJuIGhlYWQ7Cit9CisKIGlu
bGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBieXRlcykKIHsKICAg
ICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgaWYg
KFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0ZVNsb3dD
YXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0Qs
IGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAg
ICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0jaWZuZGVmIE5E
RUJVRwotICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkKKyAgICAgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKICAgICBy
ZXR1cm4gaGVhZDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBzdGF0aWMgY29uc3QgYm9vbCBjb21wdXRlQmFsYW5jZSA9IGZhbHNlOwog
c3RhdGljIHNpemVfdCBiYWxhbmNlOwogCi1NYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0
ZShIZWFwJiBoZWFwLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5
LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMp
CitNYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OnRyeUNyZWF0ZShIZWFwJiBoZWFwLCBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNv
bnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgaWYgKGNvbXB1dGVC
YWxhbmNlKSB7CiAgICAgICAgIGJhbGFuY2UrKzsKICAgICAgICAgaWYgKCEoYmFsYW5jZSAlIDEw
KSkKICAgICAgICAgICAgIGRhdGFMb2coIk1hcmtlZEJsb2NrIEJhbGFuY2U6ICIsIGJhbGFuY2Us
ICJcbiIpOwogICAgIH0KLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGZh
c3RBbGlnbmVkTWFsbG9jKGJsb2NrU2l6ZSwgY2FwYWNpdHkpKSBNYXJrZWRCbG9jayhhbGxvY2F0
b3IsIGNhcGFjaXR5LCBjZWxsU2l6ZSwgYXR0cmlidXRlcyk7CisgICAgdm9pZCogYmxvY2tTcGFj
ZSA9IHRyeUZhc3RBbGlnbmVkTWFsbG9jKGJsb2NrU2l6ZSwgY2FwYWNpdHkpOworICAgIGlmICgh
YmxvY2tTcGFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gbmV3IChOb3ROdWxsLCBibG9ja1NwYWNlKSBNYXJrZWRCbG9jayhhbGxvY2F0b3IsIGNh
cGFjaXR5LCBjZWxsU2l6ZSwgYXR0cmlidXRlcyk7CiAgICAgaGVhcC5kaWRBbGxvY2F0ZUJsb2Nr
KGNhcGFjaXR5KTsKICAgICByZXR1cm4gYmxvY2s7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsx
MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG11dGFibGUgUmV0dXJuVHlwZSBt
X2NvdW50OwogICAgICAgICB9OwogCi0gICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRl
KEhlYXAmLCBNYXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6
ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYpOworICAgICAgICBzdGF0aWMgTWFya2VkQmxv
Y2sqIHRyeUNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBz
aXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKICAgICAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShIZWFwJiwgTWFya2VkQmxvY2sqKTsKIAogICAgICAgICBzdGF0aWMg
Ym9vbCBpc0F0b21BbGlnbmVkKGNvbnN0IHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOwog
ICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBh
bGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5
KHNpemVfdCk7CiAKICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0
b3IoKSB7IHJldHVybiBtX2Rlc3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFj
ZUZvck9iamVjdHNXaXRob3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0K
QEAgLTE4Miw2ICsxODMsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUF1
eGlsaQogICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKGJ5
dGVzKTsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eGlsaWFy
eShzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRl
cykudHJ5QWxsb2NhdGUoYnl0ZXMpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQogewogICAgIGZvckVhY2hTdWJzcGFjZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFZNOworCisvLyBBbiBBdXhpbGlhcnkg
YmFycmllciBpcyBhIGJhcnJpZXIgdGhhdCBkb2VzIG5vdCB0cnkgdG8gcmVhc29uIGFib3V0IHRo
ZSB2YWx1ZSBiZWluZyBzdG9yZWQgaW50bworLy8gaXQsIG90aGVyIHRoYW4gaW50ZXJwcmV0aW5n
IGEgZmFsc2lzaCB2YWx1ZSBhcyBub3QgbmVlZCBhIGJhcnJpZXIuIEl0J3MgT0sgdG8gdXNlIHRo
aXMgZm9yIGVpdGhlcgorLy8gSlNDZWxscyBvciBhbnkgb3RoZXIga2luZCBvZiBkYXRhLCBzbyBs
b25nIGFzIGl0IHJlc3BvbmRzIHRvIG9wZXJhdG9yISgpLgordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2NsYXNzIEF1eGlsaWFyeUJhcnJpZXIgeworcHVibGljOgorICAgIEF1eGlsaWFyeUJhcnJpZXIo
KSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEF1eGlsaWFyeUJhcnJp
ZXIoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUg
PSBUKCk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0KFZN
JiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgCisgICAgVCogc2xvdCgpIHsgcmV0dXJuICZtX3ZhbHVlOyB9Cisg
ICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1
ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXRXaXRob3V0
QmFycmllcihVJiYgdmFsdWUpIHsgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7IH0K
KyAgICAKK3ByaXZhdGU6CisgICAgVCBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4
aWxpYXJ5QmFycmllcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkhl
YXAuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFU+CitBdXhpbGlhcnlCYXJyaWVyPFQ+OjpBdXhp
bGlhcnlCYXJyaWVyKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVSYmIHZhbHVlKQoreworICAgIG1f
dmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KG93bmVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQXV4aWxpYXJ5QmFycmll
cjxUPjo6c2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVSYmIHZhbHVlKQoreworICAgIG1fdmFs
dWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93
bmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzY5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzcsMTAgKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQogewotICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0
b3JhZ2UoaW50ZW5kZWRPd25lciwgc2l6ZSwgJnRlbXApKTsKLSAgICBCdXR0ZXJmbHkqIHJlc3Vs
dCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICB2
b2lkKiBiYXNlID0gdm0uaGVhcC5hbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCBzaXpl
KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTksNyArMTE4
LDggQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQq
IHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXpl
ID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNp
emUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOwotICAgIGlmICghdm0uaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93bmVy
LCAmdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgdGhlQmFzZSA9IHZtLmhlYXAudHJ5
UmVhbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCB0aGVCYXNlLCBvbGRTaXplLCBuZXdT
aXplKTsKKyAgICBpZiAoIXRoZUJhc2UpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBm
cm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU0LDcgKzI1NCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0m
IHYKICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2Ug
dG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGgu
CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKLSAgICB1bnNpZ25l
ZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgp
OworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
OworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4ob2xkVmVjdG9yTGVuZ3RoLCBs
ZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRoYXQgcmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBw
b3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBmYXNoaW9uLgogICAgIGlmIChjb3VudCA+IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2VkVmVjdG9yTGVuZ3RoKQpAQCAtMzE0LDEyICsz
MTUsMTIgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIH0g
ZWxzZSBpZiAoKG5ld0FsbG9jQmFzZSAhPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0dXJlKHZtKSkp
IHx8IChuZXdJbmRleEJpYXMgIT0gc3RvcmFnZS0+bV9pbmRleEJpYXMpKSB7CiAgICAgICAgIG1l
bW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9mKEpTVmFsdWUp
ICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcigwKSk7CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3IsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoSlNWYWx1ZSkgKiB1c2VkVmVj
dG9yTGVuZ3RoKTsKLQotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG5ld1ZlY3RvciA9
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSByZXF1aXJlZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgaSsr
KQotICAgICAgICAgICAgbmV3VmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQogCisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBuZXdWZWN0b3IgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3ZlY3RvcjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB1c2VkVmVjdG9yTGVuZ3RoOyBpIDwg
bmV3VmVjdG9yTGVuZ3RoOyBpKyspCisgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigpOworCiAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMg
PSBuZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KHZtLCBuZXdCdXR0ZXJmbHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDkgQEAgaW5saW5lIEpT
QXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdAogICAgICAgICBpZiAoaGFzRG91YmxlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rv
ckxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICB2b2lkKiB0ZW1wOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNp
b24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw3NyArODgsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0
Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmpl
Y3Q6OmNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVy
Zmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCi17Ci0gICAgQVNTRVJUKGJ1dHRlcmZseSk7Ci0gICAg
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKLSAgICAKLSAg
ICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKLSAgICBzaXplX3QgcHJlQ2FwYWNpdHk7Ci0gICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzOwotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0aGlzLT5oYXNJbmRleGlu
Z0hlYWRlcigpOwotICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKLSAgICAg
ICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5
KHN0cnVjdHVyZSk7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gYnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1
cmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gMDsKLSAgICAgICAgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLSAgICBzaXplX3QgY2FwYWNpdHlJ
bkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAg
aWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5KSkpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3Is
IHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotCi0gICAgICAgIC8vIENvcHkgdGhlIHByb3BlcnRpZXMu
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2Ug
PSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBjb3Vu
dCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykKLSAgICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQp
LT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKCgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKSk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAg
ICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ29weSB0aGUgYXJyYXkg
aWYgYXBwcm9wcmlhdGUuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogY3VycmVudFRhcmdldDsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogY3VycmVudFNvdXJjZTsKLSAgICAgICAgICAgIHNpemVfdCBjb3VudDsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICAg
ICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMy
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZ
UEVTOiB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+Y29u
dGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7Ci0gICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzog
ewotICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFk
ZXJGcm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwotICAgICAgICAgICAg
ICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cjsKLSAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IDA7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNv
dXJjZSA9IDA7Ci0gICAgICAgICAgICAgICAgY291bnQgPSAwOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtZW1jcHkoY3VycmVudFRhcmdldCwg
Y3VycmVudFNvdXJjZSwgY291bnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIobmV3QnV0
dGVyZmx5KTsKLSAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7Ci0gICAgfSAKLX0KLQog
QUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYg
dmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewog
ICAgIEFTU0VSVChidXR0ZXJmbHkpOwpAQCAtMTc5LDkgKzEwOCw2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKIAogICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMu
CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgdmlzaXRvci5jb3B5TGF0ZXIo
Ci0gICAgICAgIHRoaXMsIEJ1dHRlcmZseUNvcHlUb2tlbiwKLSAgICAgICAgYnV0dGVyZmx5LT5i
YXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKICAg
ICAKICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICBzd2l0Y2ggKHRo
aXMtPmluZGV4aW5nVHlwZSgpKSB7CkBAIC0yMjUsMTkgKzE1MSw2IEBAIHZvaWQgSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICNlbmRpZgogfQogCi12b2lkIEpTT2JqZWN0Ojpj
b3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlU
b2tlbiB0b2tlbikKLXsKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKLQotICAgIGlmICh0b2tlbiAhPSBCdXR0ZXJmbHlDb3B5VG9rZW4pCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LmdldCgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPmNv
cHlCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lU2l6ZSgpKTsKLX0KLQogdm9pZCBKU09iamVjdDo6aGVhcFNuYXBzaG90KEpTQ2Vs
bCogY2VsbCwgSGVhcFNuYXBzaG90QnVpbGRlciYgYnVpbGRlcikKIHsKICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtODA3LDYgKzcyMCw4IEBA
IENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKIHsKICAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJ
bml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0t
OykKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gbmV3QnV0
dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKQEAgLTgyNyw2ICs3NDIsOCBAQCBDb250aWd1b3Vz
SlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4
ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAg
IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNW
YWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246
OkFsbG9jYXRlQ29udGlndW91cyk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBu
ZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29u
dGlndW91cygpOwpAQCAtODQ5LDYgKzc2Niw4IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNy
ZWF0ZUFycmF5U3RvcmEKICAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgcmVz
dWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICByZXN1bHQtPm1faW5kZXhCaWFzID0g
MDsKKyAgICBmb3IgKHNpemVfdCBpID0gdmVjdG9yTGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1
bHQtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUsIHN0cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlv
bigpKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
QnV0dGVyZmx5KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODYyLDYgKzc4MSwxMSBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyCiBDb250aWd1b3VzSlNWYWx1ZXMg
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKFZNJiB2bSkKIHsKICAgICBBU1NFUlQo
aGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0ludDMy
KClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOworCiAgICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKSk7CiAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzSW50MzIoKTsKIH0KQEAgLTg4MSw2ICs4MDUsMTEg
QEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlYwogQ29udGlndW91c0pT
VmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkKIHsK
ICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CisKKyAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNl
dFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKSk7CiAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7CiB9CkBAIC05MTcsNyAr
ODQ2LDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogCiAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgp
OwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3Rv
cmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgLy8gTm8g
bmVlZCB0byBjb3B5IGVsZW1lbnRzLgorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rv
ckxlbmd0aDsgaS0tOykKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRy
YW5zaXRpb24pOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJl
LCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CkBAIC05NjYsMTMgKzg5NywxMSBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
ID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSog
bmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5n
RWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZl
Y3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGln
dW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3U3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3U3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgaWYg
KHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRy
YW5zaXRpb24pOwpAQCAtMTAxNCwxMyArOTQzLDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNvbnZlcnREb3VibGVUb0EKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZs
eS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0g
Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwg
dmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBp
KyspIHsKICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV07Ci0gICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkgewotICAgICAgICAgICAgbmV3U3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHZhbHVlKSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkKICAgICAgICAgICAgIG5ld1N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9
CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0xMDQxLDEz
ICs5NjgsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQogICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgo
KTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJh
eVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBKU1ZhbHVl
IHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsK
LSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdT
dG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTI3NTQsNiArMjY3OSw4IEBAIGJv
b2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgICAgIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3
VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkg
PCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yW2ldLnNldChKU1ZhbHVlKCkpOwogICAgICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAg
ICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJm
bHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3NjgsNiArMjY5NSw4IEBAIGJvb2wgSlNP
YmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgbmV3SW5kZXhCaWFzLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgaWYgKCFu
ZXdCdXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uc2V0KEpTVmFsdWUoKSk7CiAgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxl
bmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBu
ZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZt
LCBuZXdCdXR0ZXJmbHkpOwpAQCAtMjc5MywxNCArMjcyMiwxNyBAQCBib29sIEpTT2JqZWN0Ojpl
bnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIGlmICghYnV0dGVyZmx5KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kp
CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBp
IDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisgICAgfQogICAgIG1f
YnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIAogICAgIGJ1dHRlcmZseS0+c2V0
VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAKLSAgICBpZiAoaGFzRG91YmxlKGluZGV4
aW5nVHlwZSgpKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7
IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGln
dW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47Ci0gICAgfQogICAgIHJldHVybiB0cnVlOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlz
aW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIK
ICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgi
CisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUg
IkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRl
ICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJEZWZlckdDLmgiCiAjaW5jbHVkZSAi
SGVhcC5oIgpAQCAtNzk3LDcgKzc5Nyw2IEBAIHByb3RlY3RlZDoKICAgICBKU09iamVjdChWTSYs
IFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKICAgICAgICAgCiAgICAgdm9pZCB2aXNpdEJ1
dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSopOwotICAgIHZvaWQg
Y29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6
ZSk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGlu
IGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNz
ZXJ0IG90aGVyd2lzZS4KQEAgLTk0OSw3ICs5NDgsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhWTSYpOwogCiBw
cm90ZWN0ZWQ6Ci0gICAgQ29weUJhcnJpZXI8QnV0dGVyZmx5PiBtX2J1dHRlcmZseTsKKyAgICBB
dXhpbGlhcnlCYXJyaWVyPEJ1dHRlcmZseSo+IG1fYnV0dGVyZmx5OwogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fcGFkZGluZzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAy
MDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBKU09iamVjdElubGlu
ZXNfaAogI2RlZmluZSBKU09iamVjdElubGluZXNfaAogCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFy
cmllcklubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTG9va3VwLmgiCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw2IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwg
MjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpAQCAt
OTcsNiArOTYsMTEgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAog
ICAgIHJldHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKIH0KIAordm9pZCog
dHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAorewor
ICAgIHJldHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKK30KKwogdm9pZCBm
YXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgX2FsaWduZWRfZnJlZShwKTsKQEAgLTEx
MSw2ICsxMTUsMTMgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAog
ICAgIHJldHVybiBwOwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgdm9pZCogcCA9IG51bGxwdHI7CisgICAgcG9z
aXhfbWVtYWxpZ24oJnAsIGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7Cit9CisKIHZv
aWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIGZyZWUocCk7CkBAIC0yMzEsNiAr
MjQyLDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQKICAgICBy
ZXR1cm4gYm1hbGxvYzo6YXBpOjptZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOwogfQogCit2b2lk
KiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7
CisgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsK
K30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgYm1hbGxvYzo6YXBp
OjpmcmVlKHApOwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291
cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTMs
NiArNTMsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0RnJlZSh2b2lkKik7CiAKIC8v
IEFsbG9jYXRpb25zIGZyb20gZmFzdEFsaWduZWRNYWxsb2MoKSBtdXN0IGJlIGZyZWVkIHVzaW5n
IGZhc3RBbGlnbmVkRnJlZSgpLgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIGZhc3RBbGlnbmVk
TWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKik7CiAKIFdURl9FWFBPUlRf
UFJJVkFURSBzaXplX3QgZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCopOwpJbmRleDogU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0
LDE4IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNpemUKIAogdm9pZCog
QWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKKyAg
ICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gY2FsbG9jYXRlSW1wbChh
bGlnbm1lbnQsIHNpemUsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjp0
cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBib29sIGNy
YXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGNhbGxvY2F0ZUltcGwoYWxpZ25tZW50
LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVJ
bXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBib29sIGNyYXNoT25GYWlsdXJlKQor
ewogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCiAgICAgaWYgKCFtX2lz
Qm1hbGxvY0VuYWJsZWQpIHsKQEAgLTgwLDcgKzkyLDEwIEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxs
b2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKHJvdW5kVXBUb011
bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplKSk7CiAKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIFBlclBy
b2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50
LCBzaXplKTsKKyAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2Uo
KTsKKyAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisgICAgICAgIHJldHVybiBoZWFwLT5hbGxvY2F0
ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGhlYXAtPnRyeUFsbG9j
YXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKIH0KIAogdm9pZCogQWxsb2NhdG9yOjpy
ZWFsbG9jYXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDEyICs0MywxNSBAQCBwdWJsaWM6
CiAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlKHNp
emVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsK
ICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQq
IHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7CiAKICAgICB2b2lkIHNjYXZlbmdlKCk7CiAKIHBy
aXZhdGU6CisgICAgdm9pZCogYWxsb2NhdGVJbXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwg
Ym9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgCiAgICAgYm9vbCBhbGxvY2F0ZUZhc3RDYXNlKHNp
emVfdCwgdm9pZComKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAg
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDYgKzQxLDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgc3RhdGlj
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKik7
CiAgICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7CkBAIC03OSw2ICs4
MCwxNCBAQCBpbmxpbmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBzaXplCiAgICAgcmV0
dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKIH0KIAoraW5saW5lIHZvaWQq
IENhY2hlOjp0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAg
ICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlm
ICghY2FjaGUpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKGFsaWdu
bWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShh
bGlnbm1lbnQsIHNpemUpOworfQorCiBpbmxpbmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIENhY2hlKiBjYWNoZSA9IFBlclRocmVh
ZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2Jt
YWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMsMTIgQEAgaW5saW5lIHZvaWQqIG1hbGxvYyhzaXpl
X3Qgc2l6ZSkKICAgICByZXR1cm4gQ2FjaGU6OmFsbG9jYXRlKHNpemUpOwogfQogCisvLyBSZXR1
cm5zIG51bGwgb24gZmFpbHVyZS4KK2lubGluZSB2b2lkKiB0cnlNZW1hbGlnbihzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gQ2FjaGU6OnRyeUFsbG9jYXRlKGFs
aWdubWVudCwgc2l6ZSk7Cit9CisKIC8vIENyYXNoZXMgb24gZmFpbHVyZS4KIGlubGluZSB2b2lk
KiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284543</attachid>
            <date>2016-07-25 16:30:04 -0700</date>
            <delta_ts>2016-07-25 17:04:48 -0700</delta_ts>
            <desc>started working on DFGSpeculativeJIT.cpp</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55810</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4NTEsMjcgKzM4NTEsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAot
ICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3Jh
Z2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BS
KTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAg
ICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFy
eURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gy
R1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
LCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNp
emVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
VmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJs
ZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIs
IHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJH
UFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNj
cmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlu
a1RvKGxvb3AsICZtX2ppdCk7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1
ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5l
cmF0b3I+KAogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+
aW5kZXhpbmdUeXBlKCkpLAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0
b3JhZ2UpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywx
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSAr
PSBvdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7
Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNp
Y1N0b3JhZ2UoVHJ1c3RlZEltbTMyKHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmICho
YXNJbmRleGluZ0hlYWRlcikKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIo
dmVjdG9yTGVuZ3RoICogc2l6ZW9mKEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHN0b3JhZ2VHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
Jm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQ
dHIoCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VH
UFIpOwogICAgIH0gZWxzZQogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0
b3JhZ2VHUFIpOwogCkBAIC0xMjcsMTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QWxsb2NhdGVSYXdPYmplCiAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3
UmF3T2JqZWN0LCByZXN1bHRHUFIsIHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVj
dG9yTGVuZ3RoKSk7CiAKLSAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpICYmIG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRz
IDwgdmVjdG9yTGVuZ3RoKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5h
TikpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsr
aSkKICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAg
ICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsK
KyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAg
ICAgICAgIHZhbHVlLmFzSW50NjQgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpF
bmNvZGVBc0RvdWJsZSwgUE5hTikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5h
c0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihUcnVzdGVkSW1tMzIodmFsdWUuYXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCwxMSBAQCBwdWJsaWM6CiAgICAgTWFya2Vk
QWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0
ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIE1h
cmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aERlc3RydWN0b3Ioc2l6ZV90IGJ5
dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmRlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMp
OyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPiBNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpOworICAgIE1hcmtlZEFsbG9jYXRv
ciYgYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2UuYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIENvcGllZEFsbG9j
YXRvciYgc3RvcmFnZUFsbG9jYXRvcigpIHsgcmV0dXJuIG1fc3RvcmFnZVNwYWNlLmFsbG9jYXRv
cigpOyB9CisgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5k
ZWRPd25lciwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2Vs
bCogaW50ZW5kZWRPd25lciwgdm9pZCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBu
ZXdTaXplKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBp
bnRlbmRlZE93bmVyLCBzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVh
bGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiosIHNpemVfdCwgc2l6
ZV90KTsKICAgICB2b2lkIGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNp
b24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSwzNyBAQCBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6
OmFsbG9jYXRvckZvck9iamVjCiAgICAgcmV0dXJuIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXRE
ZXN0cnVjdG9yKGJ5dGVzKTsKIH0KIAordm9pZCogSGVhcDo6YWxsb2NhdGVBdXhpbGlhcnkoSlND
ZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0g
bV9vYmplY3RTcGFjZS5hbGxvY2F0ZUF1eGlsaWFyeShieXRlcyk7CisjaWYgRU5BQkxFKEFMTE9D
QVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVz
IG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsIHJlc3Vs
dCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKKyNlbmRpZgorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpT
Q2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9
IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoYnl0ZXMpOworI2lmIEVOQUJMRShB
TExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBi
eXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCBy
ZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5kaWYK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBIZWFwOjp0cnlSZWFsbG9jYXRlQXV4aWxp
YXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKQoreworICAgIHZvaWQqIG5ld0Jhc2UgPSB0cnlBbGxvY2F0ZUF1eGls
aWFyeShpbnRlbmRlZE93bmVyLCBuZXdTaXplKTsKKyAgICBpZiAoIW5ld0Jhc2UpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIG1lbWNweShuZXdCYXNlLCBvbGRCYXNlLCBvbGRTaXplKTsK
KyAgICByZXR1cm4gbmV3QmFzZTsKK30KKwogaW5saW5lIENoZWNrZWRCb29sZWFuIEhlYXA6OnRy
eUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcywgdm9p
ZCoqIG91dFB0cikKIHsKICAgICBDaGVja2VkQm9vbGVhbiByZXN1bHQgPSBtX3N0b3JhZ2VTcGFj
ZS50cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmV0aXJlKE1hcmtlZEJs
b2NrCiAgICAgYmxvY2stPmRpZFJldGlyZUJsb2NrKGZyZWVMaXN0KTsKIH0KIAotaW5saW5lIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90IGJ5dGVzKQoraW5s
aW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0lt
cGwoc2l6ZV90IGJ5dGVzKQogewogICAgIGlmIChtX2N1cnJlbnRCbG9jaykgewogICAgICAgICBB
U1NFUlQobV9jdXJyZW50QmxvY2sgPT0gbV9uZXh0QmxvY2tUb1N3ZWVwKTsKQEAgLTEyMCwxMSAr
MTIwLDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeVBvcEZyZWUKICAgICBy
ZXR1cm4gaGVhZDsKIH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGUoc2l6ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZyhzaXplX3QgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKCFtX2hlYXAt
PmlzQnVzeSgpKTsKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEFsbG9jYXRp
b247Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVIZWxwZXIoYnl0ZXMpOworICAgIHZv
aWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJbXBsKGJ5dGVzKTsKIAog
ICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247CiAgICAgQVNT
RVJUKHJlc3VsdCB8fCAhbV9jdXJyZW50QmxvY2spOwpAQCAtMTQ4LDYgKzE0OCwxOCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAKIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCiB7CisgICAgYm9vbCBjcmFzaE9u
RmFpdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShieXRlcywgY3Jhc2hP
bkZhaWx1cmUpOworfQorCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nh
c2Uoc2l6ZV90IGJ5dGVzKQoreworICAgIGJvb2wgY3Jhc2hPbkZhaXVyZSA9IGZhbHNlOworICAg
IHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3Zv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBi
b29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQo
KTsKIApAQCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKAogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRp
ZEFsbG9jYXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRy
eUFsbG9jYXRlKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRD
b2xsZWN0aW5nKGJ5dGVzKTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwor
ICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAg
ICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgQVNTRVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxv
Y2sqIGJsb2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAg
ICBNYXJrZWRCbG9jayogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAo
IWJsb2NrKSB7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJl
c3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhv
dXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1NYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNp
emVfdCBieXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxv
Y2soc2l6ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9j
azo6YmxvY2tTaXplOwogICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykp
ICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMp
OwpAQCAtMTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9j
YXRlQmwKIAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDog
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwog
Ci0gICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXpl
LCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNy
ZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwog
fQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0
cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVz
dHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4g
bV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsK
QEAgLTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFs
bG9jYXRlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7Cisg
ICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJl
KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAg
dm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lk
KiB0cnlQb3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2Nr
KHNpemVfdCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZv
aWQgcmV0aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBA
IC0xMTMsMjEgKzExNiwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVh
cCogCiAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJs
b2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFko
IWhlYWQpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0
ZXMpOworICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAg
ICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OworICAgIGlmICghQVNT
RVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOworICAgIHJl
dHVybiBoZWFkOworfQorCiBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3QgYnl0ZXMpCiB7CiAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVl
TGlzdC5oZWFkOwogICAgIGlmIChVTkxJS0VMWSghaGVhZCkpIHsKICAgICAgICAgdm9pZCogcmVz
dWx0ID0gYWxsb2NhdGVTbG93Q2FzZShieXRlcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBt
ZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICAgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpCisgICAgICAgICAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFk
LT5uZXh0OwotI2lmbmRlZiBOREVCVUcKLSAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOwot
I2VuZGlmCisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAw
eENELCBieXRlcyk7CiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMTQgKzM1LDE3IEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIGNvbnN0IGJvb2wgY29tcHV0
ZUJhbGFuY2UgPSBmYWxzZTsKIHN0YXRpYyBzaXplX3QgYmFsYW5jZTsKIAotTWFya2VkQmxvY2sq
IE1hcmtlZEJsb2NrOjpjcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzKQorTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUo
SGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHNpemVfdCBjYXBhY2l0eSwg
c2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQog
ewogICAgIGlmIChjb21wdXRlQmFsYW5jZSkgewogICAgICAgICBiYWxhbmNlKys7CiAgICAgICAg
IGlmICghKGJhbGFuY2UgJSAxMCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJNYXJrZWRCbG9jayBC
YWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsKICAgICB9Ci0gICAgTWFya2VkQmxvY2sqIGJsb2Nr
ID0gbmV3IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1hbGxvYyhibG9ja1NpemUsIGNhcGFjaXR5KSkg
TWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMpOwor
ICAgIHZvaWQqIGJsb2NrU3BhY2UgPSB0cnlGYXN0QWxpZ25lZE1hbGxvYyhibG9ja1NpemUsIGNh
cGFjaXR5KTsKKyAgICBpZiAoIWJsb2NrU3BhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IG5ldyAoTm90TnVsbCwgYmxvY2tTcGFjZSkgTWFya2Vk
QmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMpOwogICAgIGhl
YXAuZGlkQWxsb2NhdGVCbG9jayhjYXBhY2l0eSk7CiAgICAgcmV0dXJuIGJsb2NrOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMDM2
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
dXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMg
TWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAg
ICAgc3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvcios
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1
dGVzJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7
CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIwMzY5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDYgKzY4LDcgQEAgcHVibGljOgogICAgIHZvaWQqIGFsbG9jYXRlV2l0aERl
c3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNp
emVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0
cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOwogCiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9y
T2JqZWN0c1dpdGhEZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2U7IH0KICAg
ICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aG91dERlc3RydWN0b3IoKSB7IHJldHVy
biBtX25vcm1hbFNwYWNlOyB9CkBAIC0xODIsNiArMTgzLDExIEBAIGlubGluZSB2b2lkKiBNYXJr
ZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGkKICAgICByZXR1cm4gYXV4aWxpYXJ5QWxsb2NhdG9yRm9y
KGJ5dGVzKS5hbGxvY2F0ZShieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6
dHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhdXhpbGlh
cnlBbGxvY2F0b3JGb3IoYnl0ZXMpLnRyeUFsbG9jYXRlKGJ5dGVzKTsKK30KKwogdGVtcGxhdGUg
PHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2so
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBmb3JFYWNoU3Vic3BhY2UoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJh
cnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsK
KworLy8gQW4gQXV4aWxpYXJ5IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBub3QgdHJ5
IHRvIHJlYXNvbiBhYm91dCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0LCBvdGhl
ciB0aGFuIGludGVycHJldGluZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBiYXJyaWVy
LiBJdCdzIE9LIHRvIHVzZSB0aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55IG90aGVy
IGtpbmQgb2YgZGF0YSwgc28gbG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEoKS4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1YmxpYzoKKyAg
ICBBdXhpbGlhcnlCYXJyaWVyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBBdXhpbGlhcnlCYXJyaWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICB2b2lk
IGNsZWFyKCkgeyBtX3ZhbHVlID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICB2b2lkIHNldChWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29uc3QgVCYg
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3QoKSB7IHJl
dHVybiAmbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
ICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpOyB9CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQXV4aWxp
YXJ5QmFycmllcjxUPjo6QXV4aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUm
JiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2
b2lkIEF1eGlsaWFyeUJhcnJpZXI8VD46OnNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2
YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5o
ZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5o
CShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEwICszNyw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
Vk0mIHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKIHsKLSAgICB2b2lkKiB0ZW1wOwogICAgIHNpemVfdCBzaXpl
ID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIFJFTEVBU0VfQVNTRVJUKHZt
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIsIHNpemUsICZ0ZW1wKSk7Ci0g
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmhlYXAuYWxsb2NhdGVBdXhpbGlhcnko
aW50ZW5kZWRPd25lciwgc2l6ZSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShi
YXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtMTE5LDcgKzExOCw4IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jv
d0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsK
ICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJ
bmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVf
dCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBpZiAoIXZtLmhlYXAudHJ5UmVhbGxvY2F0ZVN0
b3JhZ2UoaW50ZW5kZWRPd25lciwgJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQorICAgIHRo
ZUJhc2UgPSB2bS5oZWFwLnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgdGhl
QmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgaWYgKCF0aGVCYXNlKQogICAgICAgICByZXR1
cm4gMDsKICAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2
aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hp
ZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxh
cmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJl
cXVpcmVkVmVjdG9yTGVuZ3RoLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWlu
KG9sZFZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVk
IHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4K
ICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxl
bmd0aCkKQEAgLTMxNCwxMiArMzE1LDEyIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xv
d0Nhc2UoVk0mIHYKICAgICB9IGVsc2UgaWYgKChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5i
YXNlKHN0cnVjdHVyZSh2bSkpKSB8fCAobmV3SW5kZXhCaWFzICE9IHN0b3JhZ2UtPm1faW5kZXhC
aWFzKSkgewogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkg
LSBwcm9wZXJ0eVNpemUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNp
emUsIHNpemVvZihKU1ZhbHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRl
cikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9m
KEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBuZXdWZWN0b3IgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBu
ZXdWZWN0b3JMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigpOwog
ICAgIH0KIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogbmV3VmVjdG9yID0gbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdXNl
ZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgaSsrKQorICAgICAgICBuZXdWZWN0
b3JbaV0uY2xlYXIoKTsKKwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZl
Y3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhv
dXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYg
KzI1MSw5IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXQKICAgICAg
ICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytp
KQogICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5h
TjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRp
YWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgdm9pZCogdGVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNzcgKzg4LDYgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9y
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFTU0VS
VChidXR0ZXJmbHkpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3Ry
dWN0dXJlKCk7Ci0gICAgCi0gICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVy
ID0gdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhp
bmdIZWFkZXIpKSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hl
YWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0
eSA9IDA7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0g
ICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZs
eS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5n
Q29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5k
ZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAvLyBD
b3B5IHRoZSBwcm9wZXJ0aWVzLgotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdl
dCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5U3Rv
cmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAgICAg
ICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50U291
cmNlKS0+Z2V0KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5n
SGVhZGVyKSkgewotICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9
ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIENvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXplX3Qg
Y291bnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdU
eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
ICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxM
X0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQg
PSBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGNvdW50
ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAgICAg
ICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSAwOwotICAgICAgICAgICAgICAgIGNvdW50ID0gMDsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVt
Y3B5KGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdp
dGhvdXRCYXJyaWVyKG5ld0J1dHRlcmZseSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0
ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0
ZXMpOwotICAgIH0gCi19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0
ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKQEAgLTE3OSw5ICsxMDgs
NiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAKICAgICAvLyBN
YXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAg
IHZpc2l0b3IuY29weUxhdGVyKAotICAgICAgICB0aGlzLCBCdXR0ZXJmbHlDb3B5VG9rZW4sCi0g
ICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNh
cGFjaXR5SW5CeXRlcyk7CiAgICAgCiAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlh
dGUuCiAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewpAQCAtMjI1LDE5ICsxNTEs
NiBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYKIH0K
IAotdm9pZCBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNp
dG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5Q29w
eVRva2VuKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAg
ICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09i
amVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7Ci19Ci0KIHZvaWQgSlNPYmplY3Q6
OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxkZXIp
CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsK
QEAgLTgwNyw2ICs3MjAsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUlu
aXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0lu
dDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7CiAgICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CkBAIC04MjcsNiAr
NzQyLDggQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogewogICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVy
biBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTg0OSw2ICs3NjYsOCBAQCBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1h
cC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVz
dWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IHZlY3Rvckxlbmd0aDsg
aS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dlc3RlZEFy
cmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg2
Miw2ICs3ODEsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycgog
Q29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihWTSYg
dm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgp
KTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQz
MikpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiB9
CkBAIC04ODEsNiArODA1LDExIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0
VW5kZWMKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29u
dGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUo
KSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpT
VmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9j
YXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91
cygpOwogfQpAQCAtOTE3LDcgKzg0Niw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRVbmRlY2lkZWQKIAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5Lmdl
dCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1
Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JM
ZW5ndGgpOwotICAgIC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50cy4KKyAgICAKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOwpAQCAtOTY2LDEzICs4
OTcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcgogICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsK
ICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0
b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBKU1ZhbHVlIHYg
PSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAg
ICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
dik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIodik7CisgICAgICAgIGlmICh2KQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEwMTQsMTMgKzk0MywxMSBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3Rv
cmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRD
b3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsK
LSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgbmV3
U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUp
CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
LmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5z
aXRpb24pOwpAQCAtMTA0MSwxMyArOTY4LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnZlcnRDb250aWd1b3UKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5n
ZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29u
c3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVj
dG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKysp
IHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBpZiAodikKICAgICAgICAgICAg
IG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsK
ICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0y
NzU0LDYgKzI2NzksOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYg
CiAgICAgICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgICAgICBpZiAoIW5ld0J1dHRl
cmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5zZXQoSlNWYWx1ZSgpKTsK
ICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5l
d1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVj
dHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzY4LDYg
KzI2OTUsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAg
ICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxl
bmd0aCkpOwogICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyAr
K2kpCisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLnNl
dChKU1ZhbHVlKCkpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhvdXRD
aGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKQEAgLTI3OTMsMTQgKzI3MjIsMTcg
QEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIAogICAgICAgICBuZXdW
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICBpZiAoIWJ1dHRlcmZs
eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBl
KCkpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5l
d1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKClbaV0gPSBQTmFOOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVl
KCkpOworICAgIH0KICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CiAK
ICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogCi0gICAg
aWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKClbaV0gPSBQTmFOOwotICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTEgQEAKICNp
bmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgogI2luY2x1
ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKICNpbmNs
dWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbGFz
c0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgotI2luY2x1ZGUgIkNvcHlC
YXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRGVm
ZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTc5Nyw3ICs3OTcsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAg
IAogICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1
Y3R1cmUqKTsKLSAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkq
LCBzaXplX3Qgc3RvcmFnZVNpemUpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRo
YXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3Rv
cmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC05NDksNyArOTQ4LDcgQEAgcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3Rv
cmFnZVNsb3coVk0mKTsKIAogcHJvdGVjdGVkOgotICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4g
bV9idXR0ZXJmbHk7CisgICAgQXV4aWxpYXJ5QmFycmllcjxCdXR0ZXJmbHkqPiBtX2J1dHRlcmZs
eTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3BhZGRp
bmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElu
bGluZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNp
Zm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKICNkZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gKIAorI2lu
Y2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpJbmRleDogU291cmNlL1dU
Ri93dGYvRmFzdE1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1h
bGxvYy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDA1
LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA1LTIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTEsIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwogICogYXJlIG1ldDoKQEAgLTk3LDYgKzk2LDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9j
KHNpemVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdu
bWVudCk7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCBzaXplKSAKK3sKKyAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdu
bWVudCk7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIF9hbGln
bmVkX2ZyZWUocCk7CkBAIC0xMTEsNiArMTE1LDEzIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9j
KHNpemVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4gcDsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWdu
ZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHZvaWQqIHAg
PSBudWxscHRyOworICAgIHBvc2l4X21lbWFsaWduKCZwLCBhbGlnbm1lbnQsIHNpemUpOworICAg
IHJldHVybiBwOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBm
cmVlKHApOwpAQCAtMjMxLDYgKzI0MiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXpl
X3QgYWxpZ25tZW50CiAgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6bWVtYWxpZ24oYWxpZ25tZW50
LCBzaXplKTsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpIAoreworICAgIHJldHVybiBibWFsbG9jOjphcGk6OnRyeU1lbWFsaWdu
KGFsaWdubWVudCwgc2l6ZSk7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAog
ewogICAgIGJtYWxsb2M6OmFwaTo6ZnJlZShwKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RN
YWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlz
aW9uIDIwMzY5OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNS0y
MDA5LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTUzLDYgKzUzLDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFz
dEZyZWUodm9pZCopOwogCiAvLyBBbGxvY2F0aW9ucyBmcm9tIGZhc3RBbGlnbmVkTWFsbG9jKCkg
bXVzdCBiZSBmcmVlZCB1c2luZyBmYXN0QWxpZ25lZEZyZWUoKS4KIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9p
ZCopOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZv
aWQqKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02NCw2ICs2NCwxOCBAQCB2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNp
emVfdCBzaXplCiAKIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IHNpemUpCiB7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7CisgICAgcmV0
dXJuIGNhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisK
K3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNp
emUpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOworICAgIHJldHVybiBjYWxs
b2NhdGVJbXBsKGFsaWdubWVudCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBB
bGxvY2F0b3I6OmFsbG9jYXRlSW1wbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgYm9v
bCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQp
KTsKIAogICAgIGlmICghbV9pc0JtYWxsb2NFbmFibGVkKSB7CkBAIC04MCw3ICs5MiwxMCBAQCB2
b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lCiAgICAgICAgIHJldHVybiBh
bGxvY2F0ZShyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc2l6ZSkpOwogCiAgICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkp
OwotICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZUxh
cmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgSGVhcCogaGVhcCA9IFBlclByb2Nlc3M8
SGVhcD46OmdldEZhc3RDYXNlKCk7CisgICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAgICBy
ZXR1cm4gaGVhcC0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJl
dHVybiBoZWFwLT50cnlBbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiB9CiAK
IHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxvY2F0ZSh2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXpl
KQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM2OTkpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Mywx
MiArNDMsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAg
ICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90KTsKICAgICB2b2lkKiByZWFsbG9jYXRlKHZvaWQqLCBzaXplX3QpOwogCiAgICAgdm9p
ZCBzY2F2ZW5nZSgpOwogCiBwcml2YXRlOgorICAgIHZvaWQqIGFsbG9jYXRlSW1wbChzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3QsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIAogICAgIGJvb2wg
YWxsb2NhdGVGYXN0Q2FzZShzaXplX3QsIHZvaWQqJik7CiAgICAgdm9pZCogYWxsb2NhdGVTbG93
Q2FzZShzaXplX3QpOwogICAgIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShz
aXplX3QpOwogICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHN0YXRpYyB2
b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2
b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2b2lk
IGRlYWxsb2NhdGUodm9pZCopOwogICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqLCBz
aXplX3QpOwpAQCAtNzksNiArODAsMTQgQEAgaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0ZShz
aXplX3Qgc2l6ZQogICAgIHJldHVybiBjYWNoZS0+YWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6ZSk7
CiB9CiAKK2lubGluZSB2b2lkKiBDYWNoZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IHNpemUpCit7CisgICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hlPjo6Z2V0
RmFzdENhc2UoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93
Q2FzZU51bGxDYWNoZShhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBjYWNoZS0+YWxsb2Nh
dG9yKCkudHJ5QWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKK30KKwogaW5saW5lIHZvaWQqIENh
Y2hlOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBDYWNo
ZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOwpJbmRleDogU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9ibWFsbG9jLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvYm1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDEyIEBAIGlubGlu
ZSB2b2lkKiBtYWxsb2Moc2l6ZV90IHNpemUpCiAgICAgcmV0dXJuIENhY2hlOjphbGxvY2F0ZShz
aXplKTsKIH0KIAorLy8gUmV0dXJucyBudWxsIG9uIGZhaWx1cmUuCitpbmxpbmUgdm9pZCogdHJ5
TWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIENh
Y2hlOjp0cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiAvLyBDcmFzaGVzIG9uIGZh
aWx1cmUuCiBpbmxpbmUgdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNp
emUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284550</attachid>
            <date>2016-07-25 17:04:48 -0700</date>
            <delta_ts>2016-07-26 13:28:46 -0700</delta_ts>
            <desc>audited DFGSpeculativeJIT.cpp, 64.cpp, and 32_64.cpp.</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61798</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCwxMSBAQCBwdWJsaWM6CiAgICAgTWFy
a2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3Qg
Ynl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAg
IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aERlc3RydWN0b3Ioc2l6ZV90
IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmRlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0
ZXMpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPiBNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpOworICAgIE1hcmtlZEFsbG9j
YXRvciYgYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1f
b2JqZWN0U3BhY2UuYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIENvcGllZEFs
bG9jYXRvciYgc3RvcmFnZUFsbG9jYXRvcigpIHsgcmV0dXJuIG1fc3RvcmFnZVNwYWNlLmFsbG9j
YXRvcigpOyB9CisgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93
bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KEpT
Q2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVf
dCBuZXdTaXplKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxs
KiBpbnRlbmRlZE93bmVyLCBzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5
UmVhbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiosIHNpemVfdCwg
c2l6ZV90KTsKICAgICB2b2lkIGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZv
aWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2
aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSwzNyBAQCBNYXJrZWRBbGxvY2F0b3ImIEhl
YXA6OmFsbG9jYXRvckZvck9iamVjCiAgICAgcmV0dXJuIGFsbG9jYXRvckZvck9iamVjdFdpdGhv
dXREZXN0cnVjdG9yKGJ5dGVzKTsKIH0KIAordm9pZCogSGVhcDo6YWxsb2NhdGVBdXhpbGlhcnko
SlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0
ID0gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZUF1eGlsaWFyeShieXRlcyk7CisjaWYgRU5BQkxFKEFM
TE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5
dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsIHJl
c3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKKyNlbmRpZgor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5
KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3Vs
dCA9IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoYnl0ZXMpOworI2lmIEVOQUJM
RShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVs
dSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVy
LCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5k
aWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBIZWFwOjp0cnlSZWFsbG9jYXRlQXV4
aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogb2xkQmFzZSwgc2l6ZV90IG9sZFNp
emUsIHNpemVfdCBuZXdTaXplKQoreworICAgIHZvaWQqIG5ld0Jhc2UgPSB0cnlBbGxvY2F0ZUF1
eGlsaWFyeShpbnRlbmRlZE93bmVyLCBuZXdTaXplKTsKKyAgICBpZiAoIW5ld0Jhc2UpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIG1lbWNweShuZXdCYXNlLCBvbGRCYXNlLCBvbGRTaXpl
KTsKKyAgICByZXR1cm4gbmV3QmFzZTsKK30KKwogaW5saW5lIENoZWNrZWRCb29sZWFuIEhlYXA6
OnRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcywg
dm9pZCoqIG91dFB0cikKIHsKICAgICBDaGVja2VkQm9vbGVhbiByZXN1bHQgPSBtX3N0b3JhZ2VT
cGFjZS50cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmV0aXJlKE1hcmtl
ZEJsb2NrCiAgICAgYmxvY2stPmRpZFJldGlyZUJsb2NrKGZyZWVMaXN0KTsKIH0KIAotaW5saW5l
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90IGJ5dGVzKQor
aW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGlu
Z0ltcGwoc2l6ZV90IGJ5dGVzKQogewogICAgIGlmIChtX2N1cnJlbnRCbG9jaykgewogICAgICAg
ICBBU1NFUlQobV9jdXJyZW50QmxvY2sgPT0gbV9uZXh0QmxvY2tUb1N3ZWVwKTsKQEAgLTEyMCwx
MSArMTIwLDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeVBvcEZyZWUKICAg
ICByZXR1cm4gaGVhZDsKIH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGUoc2l6ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGVXaXRob3V0Q29sbGVjdGluZyhzaXplX3QgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKCFtX2hl
YXAtPmlzQnVzeSgpKTsKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEFsbG9j
YXRpb247Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVIZWxwZXIoYnl0ZXMpOworICAg
IHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJbXBsKGJ5dGVzKTsK
IAogICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247CiAgICAg
QVNTRVJUKHJlc3VsdCB8fCAhbV9jdXJyZW50QmxvY2spOwpAQCAtMTQ4LDYgKzE0OCwxOCBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAKIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCiB7CisgICAgYm9vbCBjcmFz
aE9uRmFpdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShieXRlcywgY3Jh
c2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xv
d0Nhc2Uoc2l6ZV90IGJ5dGVzKQoreworICAgIGJvb2wgY3Jhc2hPbkZhaXVyZSA9IGZhbHNlOwor
ICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisK
K3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVz
LCBib29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVk
ZWQoKTsKIApAQCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlKAogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAt
PmRpZEFsbG9jYXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9
IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhv
dXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZO
ZWNlc3NhcnlPckRlZmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMp
OworICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsK
ICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
CiAgICAgQVNTRVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2Vk
QmxvY2sqIGJsb2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsK
KyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBp
ZiAoIWJsb2NrKSB7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAg
IHJlc3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdp
dGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1NYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2Nr
KHNpemVfdCBieXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
QmxvY2soc2l6ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRC
bG9jazo6YmxvY2tTaXplOwogICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9j
aykpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0
ZXMpOwpAQCAtMTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlQmwKIAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXpl
IDogV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMp
OwogCi0gICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tT
aXplLCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRy
eUNyZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMp
OwogfQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2Nr
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBE
ZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMu
ZGVzdHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7
CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1
cm4gbV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAg
IHsKQEAgLTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRy
eUFsbG9jYXRlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7
CisgICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWls
dXJlKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2
b2lkKiB0cnlQb3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJs
b2NrKHNpemVfdCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsK
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAg
IHZvaWQgcmV0aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAg
CkBAIC0xMTMsMjEgKzExNiwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQo
SGVhcCogCiAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtl
ZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtF
TFkoIWhlYWQpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2Uo
Ynl0ZXMpOworICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAg
ICAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OworICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOworICAg
IHJldHVybiBoZWFkOworfQorCiBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9m
cmVlTGlzdC5oZWFkOwogICAgIGlmIChVTkxJS0VMWSghaGVhZCkpIHsKICAgICAgICAgdm9pZCog
cmVzdWx0ID0gYWxsb2NhdGVTbG93Q2FzZShieXRlcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAg
ICBtZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICAgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBo
ZWFkLT5uZXh0OwotI2lmbmRlZiBOREVCVUcKLSAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMp
OwotI2VuZGlmCisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFk
LCAweENELCBieXRlcyk7CiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTQgKzM1LDE3IEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIGNvbnN0IGJvb2wgY29t
cHV0ZUJhbGFuY2UgPSBmYWxzZTsKIHN0YXRpYyBzaXplX3QgYmFsYW5jZTsKIAotTWFya2VkQmxv
Y2sqIE1hcmtlZEJsb2NrOjpjcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JB
dHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQorTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjp0cnlDcmVh
dGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVz
KQogewogICAgIGlmIChjb21wdXRlQmFsYW5jZSkgewogICAgICAgICBiYWxhbmNlKys7CiAgICAg
ICAgIGlmICghKGJhbGFuY2UgJSAxMCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJNYXJrZWRCbG9j
ayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsKICAgICB9Ci0gICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gbmV3IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1hbGxvYyhibG9ja1NpemUsIGNhcGFjaXR5
KSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMp
OworICAgIHZvaWQqIGJsb2NrU3BhY2UgPSB0cnlGYXN0QWxpZ25lZE1hbGxvYyhibG9ja1NpemUs
IGNhcGFjaXR5KTsKKyAgICBpZiAoIWJsb2NrU3BhY2UpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IG5ldyAoTm90TnVsbCwgYmxvY2tTcGFjZSkgTWFy
a2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMpOwogICAg
IGhlYXAuZGlkQWxsb2NhdGVCbG9jayhjYXBhY2l0eSk7CiAgICAgcmV0dXJuIGJsb2NrOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAy
MDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBtdXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0
aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNh
cGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAg
ICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRv
ciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2Nr
Kik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgcHVibGljOgogICAgIHZvaWQqIGFsbG9jYXRlV2l0
aERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9y
KHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKKyAgICB2b2lk
KiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOwogCiAgICAgU3Vic3BhY2UmIHN1YnNwYWNl
Rm9yT2JqZWN0c1dpdGhEZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2U7IH0K
ICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aG91dERlc3RydWN0b3IoKSB7IHJl
dHVybiBtX25vcm1hbFNwYWNlOyB9CkBAIC0xODIsNiArMTgzLDExIEBAIGlubGluZSB2b2lkKiBN
YXJrZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGkKICAgICByZXR1cm4gYXV4aWxpYXJ5QWxsb2NhdG9y
Rm9yKGJ5dGVzKS5hbGxvY2F0ZShieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFj
ZTo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhdXhp
bGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLnRyeUFsbG9jYXRlKGJ5dGVzKTsKK30KKwogdGVtcGxh
dGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxv
Y2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBmb3JFYWNoU3Vic3BhY2UoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFy
eUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBW
TTsKKworLy8gQW4gQXV4aWxpYXJ5IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBub3Qg
dHJ5IHRvIHJlYXNvbiBhYm91dCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0LCBv
dGhlciB0aGFuIGludGVycHJldGluZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBiYXJy
aWVyLiBJdCdzIE9LIHRvIHVzZSB0aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55IG90
aGVyIGtpbmQgb2YgZGF0YSwgc28gbG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEoKS4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1YmxpYzoK
KyAgICBBdXhpbGlhcnlCYXJyaWVyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBBdXhpbGlhcnlCYXJyaWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICB2
b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICB2b2lkIHNldChWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29uc3Qg
VCYgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3QoKSB7
IHJldHVybiAmbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpOyB9CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQXV4
aWxpYXJ5QmFycmllcjxUPjo6QXV4aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFUmJiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAg
ICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit2b2lkIEF1eGlsaWFyeUJhcnJpZXI8VD46OnNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUm
JiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5l
cy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEwICszNyw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQoVk0mIHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKLSAgICB2b2lkKiB0ZW1wOwogICAgIHNpemVfdCBz
aXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGlu
Z0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIsIHNpemUsICZ0ZW1wKSk7
Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmhlYXAuYWxsb2NhdGVBdXhpbGlh
cnkoaW50ZW5kZWRPd25lciwgc2l6ZSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFz
ZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtMTE5LDcgKzExOCw4IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Z3Jvd0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5
KTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBo
YWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNp
emVfdCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBpZiAoIXZtLmhlYXAudHJ5UmVhbGxvY2F0
ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQorICAg
IHRoZUJhc2UgPSB2bS5oZWFwLnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwg
dGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgaWYgKCF0aGVCYXNlKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0
eSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsOCBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93
IGxhcmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4
IHJlcXVpcmVkVmVjdG9yTGVuZ3RoLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0g
bWluKG9sZFZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVp
cmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlv
bi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rv
ckxlbmd0aCkKQEAgLTMxNCwxMiArMzE1LDEyIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UoVk0mIHYKICAgICB9IGVsc2UgaWYgKChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5
LT5iYXNlKHN0cnVjdHVyZSh2bSkpKSB8fCAobmV3SW5kZXhCaWFzICE9IHN0b3JhZ2UtPm1faW5k
ZXhCaWFzKSkgewogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdl
KCkgLSBwcm9wZXJ0eVNpemUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0
eVNpemUsIHNpemVvZihKU1ZhbHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hl
YWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwogICAgICAgICBtZW1tb3ZlKG5ld0J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6
ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBuZXdWZWN0b3IgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkg
PCBuZXdWZWN0b3JMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigp
OwogICAgIH0KIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogbmV3VmVjdG9yID0gbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
dXNlZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgaSsrKQorICAgICAgICBuZXdW
ZWN0b3JbaV0uY2xlYXIoKTsKKwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNl
dFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdp
dGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUx
LDYgKzI1MSw5IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXQKICAg
ICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsg
KytpKQogICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0g
UE5hTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlu
aXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgdm9pZCogdGVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNzcgKzg4LDYgQEAg
c3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNp
dG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFT
U0VSVChidXR0ZXJmbHkpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+
c3RydWN0dXJlKCk7Ci0gICAgCi0gICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNp
emVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVh
ZGVyID0gdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5k
ZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBh
Y2l0eSA9IDA7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9
Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRl
cmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVy
aW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAv
LyBDb3B5IHRoZSBwcm9wZXJ0aWVzLgotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRh
cmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5
U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAg
ICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50
U291cmNlKS0+Z2V0KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4
aW5nSGVhZGVyKSkgewotICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIENvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXpl
X3QgY291bnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhp
bmdUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2Ug
QUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJn
ZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAg
Y3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5l
d0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3
QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9
IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGNv
dW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAg
ICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSAwOwotICAgICAgICAgICAgICAgIGNvdW50ID0g
MDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bWVtY3B5KGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNl
dFdpdGhvdXRCYXJyaWVyKG5ld0J1dHRlcmZseSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShi
dXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUlu
Qnl0ZXMpOwotICAgIH0gCi19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRC
dXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKQEAgLTE3OSw5ICsx
MDgsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAKICAgICAv
LyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1
dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwot
ICAgIHZpc2l0b3IuY29weUxhdGVyKAotICAgICAgICB0aGlzLCBCdXR0ZXJmbHlDb3B5VG9rZW4s
Ci0gICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSks
IGNhcGFjaXR5SW5CeXRlcyk7CiAgICAgCiAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9w
cmlhdGUuCiAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewpAQCAtMjI1LDE5ICsx
NTEsNiBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYK
IH0KIAotdm9pZCBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlW
aXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5
Q29weVRva2VuKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQot
ICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhp
c09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7Ci19Ci0KIHZvaWQgSlNPYmpl
Y3Q6OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxk
ZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxs
KTsKQEAgLTgwNyw2ICs3MjAsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0
ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91
c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7CiAg
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CkBAIC04Mjcs
NiArNzQyLDggQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogewog
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJl
dHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTg0OSw2ICs3NjYsOCBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJz
ZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAg
cmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IHZlY3Rvckxlbmd0
aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTg2Miw2ICs3ODEsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFy
cgogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihW
TSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1
ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJ
bnQzMikpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7
CiB9CkBAIC04ODEsNiArODA1LDExIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWMKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRv
Q29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5
cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQor
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFs
bG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGln
dW91cygpOwogfQpAQCAtOTE3LDcgKzg0Niw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnZlcnRVbmRlY2lkZWQKIAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5
LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25z
dHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0
b3JMZW5ndGgpOwotICAgIC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50cy4KKyAgICAKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOwpAQCAtOTY2LDEz
ICs4OTcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcgogICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgo
KTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJh
eVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBKU1ZhbHVl
IHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsK
LSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdT
dG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEwMTQsMTMgKzk0MywxMSBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5
U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUp
IHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAg
bmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgICAgICBpZiAodmFsdWUgPT0gdmFs
dWUpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRy
YW5zaXRpb24pOwpAQCAtMTA0MSwxMyArOTY4LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNvbnZlcnRDb250aWd1b3UKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZs
eS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0g
Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwg
dmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBp
KyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0
KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBpZiAodikKICAgICAgICAg
ICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgp
KTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBA
IC0yNzU0LDYgKzI2NzksOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChW
TSYgCiAgICAgICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgICAgICBpZiAoIW5ld0J1
dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5zZXQoSlNWYWx1ZSgp
KTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3Ro
KG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0
cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzY4
LDYgKzI2OTUsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAg
ICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rv
ckxlbmd0aCkpOwogICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3Ro
OyArK2kpCisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ld
LnNldChKU1ZhbHVlKCkpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZl
Y3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhv
dXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKQEAgLTI3OTMsMTQgKzI3MjIs
MTcgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIAogICAgICAgICBu
ZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICBpZiAoIWJ1dHRl
cmZseSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdU
eXBlKCkpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8
IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV0gPSBQTmFOOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1Zh
bHVlKCkpOworICAgIH0KICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7
CiAKICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogCi0g
ICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKClbaV0gPSBQTmFOOwotICAg
IH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTEgQEAK
ICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgogI2lu
Y2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKICNp
bmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJD
bGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgotI2luY2x1ZGUgIkNv
cHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAi
RGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTc5Nyw3ICs3OTcsNiBAQCBwcm90ZWN0
ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAg
ICAgIAogICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBT
dHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJm
bHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93
IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8g
c3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC05NDksNyArOTQ4LDcgQEAg
cHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5
U3RvcmFnZVNsb3coVk0mKTsKIAogcHJvdGVjdGVkOgotICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZs
eT4gbV9idXR0ZXJmbHk7CisgICAgQXV4aWxpYXJ5QmFycmllcjxCdXR0ZXJmbHkqPiBtX2J1dHRl
cmZseTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3Bh
ZGRpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dElubGluZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAK
ICNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKICNkZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gKIAor
I2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpJbmRleDogU291cmNl
L1dURi93dGYvRmFzdE1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFz
dE1hbGxvYy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxs
b2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAotLy8gQ29weXJpZ2h0IChjKSAy
MDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTEsIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwogICogYXJlIG1ldDoKQEAgLTk3LDYgKzk2LDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFs
bG9jKHNpemVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFs
aWdubWVudCk7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFs
aWdubWVudCk7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIF9h
bGlnbmVkX2ZyZWUocCk7CkBAIC0xMTEsNiArMTE1LDEzIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFs
bG9jKHNpemVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4gcDsKIH0KIAordm9pZCogdHJ5RmFzdEFs
aWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHZvaWQq
IHAgPSBudWxscHRyOworICAgIHBvc2l4X21lbWFsaWduKCZwLCBhbGlnbm1lbnQsIHNpemUpOwor
ICAgIHJldHVybiBwOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAg
ICBmcmVlKHApOwpAQCAtMjMxLDYgKzI0MiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhz
aXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6bWVtYWxpZ24oYWxpZ25t
ZW50LCBzaXplKTsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHJldHVybiBibWFsbG9jOjphcGk6OnRyeU1lbWFs
aWduKGFsaWdubWVudCwgc2l6ZSk7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHAp
IAogewogICAgIGJtYWxsb2M6OmFwaTo6ZnJlZShwKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zh
c3RNYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJl
dmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NS0yMDA5LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTUzLDYgKzUzLDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmFzdEZyZWUodm9pZCopOwogCiAvLyBBbGxvY2F0aW9ucyBmcm9tIGZhc3RBbGlnbmVkTWFsbG9j
KCkgbXVzdCBiZSBmcmVlZCB1c2luZyBmYXN0QWxpZ25lZEZyZWUoKS4KIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwor
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0QWxpZ25lZEZyZWUo
dm9pZCopOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0
IHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02NCw2ICs2NCwxOCBAQCB2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
KHNpemVfdCBzaXplCiAKIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCiB7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7CisgICAg
cmV0dXJuIGNhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9
CisKK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOworICAgIHJldHVybiBj
YWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lk
KiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwg
Ym9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1l
bnQpKTsKIAogICAgIGlmICghbV9pc0JtYWxsb2NFbmFibGVkKSB7CkBAIC04MCw3ICs5MiwxMCBA
QCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lCiAgICAgICAgIHJldHVy
biBhbGxvY2F0ZShyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc2l6ZSkpOwogCiAgICAg
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4
KCkpOwotICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0
ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgSGVhcCogaGVhcCA9IFBlclByb2Nl
c3M8SGVhcD46OmdldEZhc3RDYXNlKCk7CisgICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAg
ICByZXR1cm4gaGVhcC0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAg
IHJldHVybiBoZWFwLT50cnlBbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiB9
CiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxvY2F0ZSh2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdT
aXplKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM2OTkp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MywxMiArNDMsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsK
ICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90KTsKICAgICB2b2lkKiByZWFsbG9jYXRlKHZvaWQqLCBzaXplX3QpOwogCiAgICAg
dm9pZCBzY2F2ZW5nZSgpOwogCiBwcml2YXRlOgorICAgIHZvaWQqIGFsbG9jYXRlSW1wbChzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3QsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIAogICAgIGJv
b2wgYWxsb2NhdGVGYXN0Q2FzZShzaXplX3QsIHZvaWQqJik7CiAgICAgdm9pZCogYWxsb2NhdGVT
bG93Q2FzZShzaXplX3QpOwogICAgIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNo
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAkocmV2aXNp
b24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0
ZShzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHN0YXRp
YyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRp
YyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2
b2lkIGRlYWxsb2NhdGUodm9pZCopOwogICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQq
LCBzaXplX3QpOwpAQCAtNzksNiArODAsMTQgQEAgaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0
ZShzaXplX3Qgc2l6ZQogICAgIHJldHVybiBjYWNoZS0+YWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6
ZSk7CiB9CiAKK2lubGluZSB2b2lkKiBDYWNoZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCit7CisgICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hlPjo6
Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVT
bG93Q2FzZU51bGxDYWNoZShhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBjYWNoZS0+YWxs
b2NhdG9yKCkudHJ5QWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKK30KKwogaW5saW5lIHZvaWQq
IENhY2hlOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBD
YWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOwpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9ibWFsbG9jLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvYm1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDEyIEBAIGlu
bGluZSB2b2lkKiBtYWxsb2Moc2l6ZV90IHNpemUpCiAgICAgcmV0dXJuIENhY2hlOjphbGxvY2F0
ZShzaXplKTsKIH0KIAorLy8gUmV0dXJucyBudWxsIG9uIGZhaWx1cmUuCitpbmxpbmUgdm9pZCog
dHJ5TWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJu
IENhY2hlOjp0cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiAvLyBDcmFzaGVzIG9u
IGZhaWx1cmUuCiBpbmxpbmUgdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284621</attachid>
            <date>2016-07-26 13:28:46 -0700</date>
            <delta_ts>2016-07-26 14:54:01 -0700</delta_ts>
            <desc>possibly done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>72513</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA2Nyw5ICs0MDY3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRF
bmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5oZWFwLnN1YnNwYWNl
Rm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplKTsKKyAgICAgICAgICAgIExWYWx1ZSBz
dGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBmYWlsQ2FzZSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoZW5k
T2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0g
bV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhp
bmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBvYmplY3QgPSBh
bGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENhc2UpOwog
ICAgICAgICAgICAgCkBAIC02OTQ3LDExICs2OTQ5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNl
cnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVu
ZChidXR0ZXJmbHlTaXplLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGFsbG9j
YXRvciA9IGFsbG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgICAgIHZtKCkuaGVhcC5z
dWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgYnV0dGVyZmx5U2l6ZSk7CisgICAgICAgICAgICAg
ICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChhbGxvY2F0b3IsIHNs
b3dQYXRoKTsKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBt
X291dC5hZGQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6ZSkpOwor
ICAgICAgICAgICAgICAgICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsgc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0
b3JMZW5ndGgsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgICAgICAgICAKQEAgLTc3NDUsMTAgKzc3NDksMTEgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgaW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSwgTFZhbHVlIHZlY3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAg
ICAgIGlmICghaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBH
QyBhbHJlYWR5IGluaXRpYWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAg
ICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0
LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpOwogCiAgICAgICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFO
LgogICAgICAgICBMQmFzaWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03
NzYzLDkgKzc3NjgsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5w
aGkoSW50MzIsIG9yaWdpbmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0
LnBoaShwb2ludGVyVHlwZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAg
bV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0
PGludDY0X3Q+KFBOYU4pKSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4
ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291
dC5zdG9yZTY0KGhvbGUsIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0
aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5l
eHRJbmRleCA9IG1fb3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291
dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03
ODI2LDEyICs3ODI5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAg
IAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXpl
b2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0g
c2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5
dGVzKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCht
X291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAg
ICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwg
ZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIo
c2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CiAg
ICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAt
ODQwMSw3ICs4NDA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50
KTsKICAgICB9CiAKLSAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExC
YXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1ZSBhbGxvY2F0ZUhlYXBDZWxsKExWYWx1ZSBh
bGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgTEJhc2ljQmxv
Y2sgc3VjY2VzcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgCkBAIC04NDM2LDcgKzg0NDAsNyBA
QCBwcml2YXRlOgogCiAgICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewotICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgpOworICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVIZWFwQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRo
KTsKICAgICAgICAgc3RvcmVTdHJ1Y3R1cmUocmVzdWx0LCBzdHJ1Y3R1cmUpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTg0NjQsMTUgKzg0NjgsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIENsYXNzVHlwZTo6YWxsb2NhdGlvblNpemUoMCksIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5LCBzbG93UGF0aCk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNz
VHlwZT4KLSAgICBMVmFsdWUgYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KAotICAgICAgICBM
VmFsdWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1ZSBhbGxvY2F0b3JGb3JTaXplKExWYWx1ZSBzdWJz
cGFjZSwgTFZhbHVlIHNpemUpCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2Vk
U3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKSwgIk1h
cmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgJiAoTWFya2VkU3Bh
Y2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCBtdXN0
IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogCi0gICAgICAgIExWYWx1ZSBzdWJzcGFjZSA9IG1fb3V0
LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vic3BhY2VGb3JPYmplY3RPZlR5cGU8Q2xhc3NUeXBl
PigpKTsKLSAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIHNtYWxsQ2FzZUJsb2NrID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VPck92ZXJzaXplQ2FzZUJs
b2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VDYXNlQmxv
Y2sgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtODUwMiw4ICs4NTAyLDE5IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFsdWUgYWxsb2Nh
dG9yID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIHNtYWxsQWxsb2NhdG9yLCBsYXJnZUFsbG9j
YXRvcik7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCks
IHNtYWxsQWxsb2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBhbGxvY2F0b3JGb3JTaXplKE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1
ZSBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9vdXQuY29u
c3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENsYXNzVHlwZT4KKyAgICBMVmFsdWUgYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0
KAorICAgICAgICBMVmFsdWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0
ZXJmbHksIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGFsbG9j
YXRvciA9IGFsbG9jYXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBl
PENsYXNzVHlwZT4oKSwgc2l6ZSk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdChhbGxv
Y2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CiAgICAgfQogICAgIApAQCAt
ODU5MCwyNiArODYwMSwyNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBudW1FbGVtZW50cyk7CiAg
ICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3Jh
Z2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplb2YoSlNWYWx1
ZSkgKiB2ZWN0b3JMZW5ndGggKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwKLSAgICAgICAgICAg
IHNsb3dQYXRoKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSB2bSgpLmhl
YXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YSgKKyAgICAgICAgICAgIHNpemVvZihKU1ZhbHVl
KSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJbmRleGluZ0hlYWRlcikpOworICAgICAgICBMVmFs
dWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0SW50UHRyKCZh
bGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgYnV0dGVyZmx5
ID0gbV9vdXQuc3ViKAotICAgICAgICAgICAgZW5kT2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0
cihzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgTFZhbHVlIGJ1dHRl
cmZseSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7
CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJh
eT4oCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgICAg
ICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0
ZXJmbHksIHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQu
Y29uc3RJbnQzMihudW1FbGVtZW50cyksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVi
bGljTGVuZ3RoKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHZlY3Rv
ckxlbmd0aCksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkp
IHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9y
TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSks
Ci0gICAgICAgICAgICAgICAgICAgIGJ1dHRlcmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJv
cGVydGllc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKworICAgICAgICBMVmFsdWUg
aG9sZTsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkK
KyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90
PihQTmFOKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fb3V0
LnN0b3JlNjQoaG9sZSwgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVz
W2ldKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBBcnJheVZhbHVlcyhvYmplY3QsIGJ1dHRl
cmZseSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAg
IGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwogICAgIHN0YXRpYyBIZWFwKiBoZWFw
KGNvbnN0IEpTVmFsdWUpOyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCi0gICAgc3RhdGljIEhl
YXAqIGhlYXAoY29uc3QgSlNDZWxsKik7CisgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSGVh
cENlbGwqKTsKIAogICAgIC8vIFRoaXMgY29uc3RhbnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9j
a3Mgd2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBvZiBvdXIgCiAgICAgLy8gZGVhZGxpbmUgd2hl
biBjYWxsaW5nIEhlYXA6OmlzUGFnZWRPdXQuIERlY3JlYXNpbmcgaXQgd2lsbCBjYXVzZSB1cyB0
byBkZXRlY3QgCkBAIC0xNTAsNyArMTUwLDExIEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0
b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyBy
ZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgTWFya2VkQWxs
b2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsg
cmV0dXJuIG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihieXRlcyk7IH0KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
Rm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcyk7CisgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxv
Y2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFj
ZS5hdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgQ29waWVkQWxsb2NhdG9yJiBz
dG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0K
KyAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVf
dCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCBzaXplX3QpOworICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
OwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVk
T3duZXIsIHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRl
U3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwog
ICAgIHZvaWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMDM2
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBib29sIEhlYXA6OmlzQ29sbGVjdGluZygp
CiAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBt
X29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb247CiB9CiAKLWlubGluZSBIZWFw
KiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKK2lubGluZSBIZWFwKiBIZWFwOjpoZWFw
KGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tG
b3IoY2VsbCktPmhlYXAoKTsKIH0KQEAgLTIzMSw2ICsyMzEsMzcgQEAgTWFya2VkQWxsb2NhdG9y
JiBIZWFwOjphbGxvY2F0b3JGb3JPYmplYwogICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmplY3RX
aXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9CiAKK3ZvaWQqIEhlYXA6OmFsbG9jYXRlQXV4aWxp
YXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJl
c3VsdCA9IG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVBdXhpbGlhcnkoYnl0ZXMpOworI2lmIEVOQUJM
RShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVs
dSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVy
LCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5k
aWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUF1eGls
aWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiBy
ZXN1bHQgPSBtX29iamVjdFNwYWNlLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBF
TkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGlu
ZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRP
d25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogSGVhcDo6dHJ5UmVhbGxvY2F0
ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICB2b2lkKiBuZXdCYXNlID0gdHJ5QWxsb2Nh
dGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7CisgICAgaWYgKCFuZXdCYXNlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBtZW1jcHkobmV3QmFzZSwgb2xkQmFzZSwgb2xk
U2l6ZSk7CisgICAgcmV0dXJuIG5ld0Jhc2U7Cit9CisKIGlubGluZSBDaGVja2VkQm9vbGVhbiBI
ZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0
ZXMsIHZvaWQqKiBvdXRQdHIpCiB7CiAgICAgQ2hlY2tlZEJvb2xlYW4gcmVzdWx0ID0gbV9zdG9y
YWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJldGlyZShN
YXJrZWRCbG9jawogICAgIGJsb2NrLT5kaWRSZXRpcmVCbG9jayhmcmVlTGlzdCk7CiB9CiAKLWlu
bGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKHNpemVfdCBieXRl
cykKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxl
Y3RpbmdJbXBsKHNpemVfdCBieXRlcykKIHsKICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKICAg
ICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrID09IG1fbmV4dEJsb2NrVG9Td2VlcCk7CkBAIC0x
MjAsMTEgKzEyMCwxMSBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlQb3BGcmVl
CiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAKLWlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlV2l0aG91dENvbGxlY3Rpbmcoc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVCgh
bV9oZWFwLT5pc0J1c3koKSk7CiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBB
bGxvY2F0aW9uOwotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSGVscGVyKGJ5dGVzKTsK
KyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChieXRl
cyk7CiAKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwog
ICAgIEFTU0VSVChyZXN1bHQgfHwgIW1fY3VycmVudEJsb2NrKTsKQEAgLTE0OCw2ICsxNDgsMTgg
QEAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZQogCiB2b2lkKiBNYXJr
ZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5dGVzKQogeworICAgIGJvb2wg
Y3Jhc2hPbkZhaXVyZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMs
IGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKK3sKKyAgICBib29sIGNyYXNoT25GYWl1cmUgPSBmYWxz
ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShieXRlcywgY3Jhc2hPbkZhaWx1cmUpOwor
fQorCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBsKHNpemVfdCBi
eXRlcywgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBBU1NFUlQobV9oZWFwLT52bSgpLT5j
dXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBkb1Rlc3RDb2xsZWN0aW9uc0lm
TmVlZGVkKCk7CiAKQEAgLTE1NSwyOSArMTY3LDM0IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZSgKICAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAgbV9o
ZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0LmJ5dGVzKTsKICAgICAKLSAgICB2b2lkKiByZXN1
bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgCiAgICAgaWYgKExJS0VMWShyZXN1bHQgIT0g
MCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCiAgICAgaWYgKG1faGVhcC0+Y29sbGVj
dElmTmVjZXNzYXJ5T3JEZWZlcigpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlKGJ5
dGVzKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhieXRl
cyk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAogICAgIEFTU0VSVCghbV9oZWFwLT5zaG91bGRDb2xsZWN0KCkpOwogICAgIAotICAgIE1h
cmtlZEJsb2NrKiBibG9jayA9IGFsbG9jYXRlQmxvY2soYnl0ZXMpOwotICAgIEFTU0VSVChibG9j
ayk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9jayhieXRlcyk7Cisg
ICAgaWYgKCFibG9jaykgeworICAgICAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAgICAgYWRkQmxvY2soYmxvY2spOwogICAgICAgICAK
LSAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVC
bG9jayhzaXplX3QgYnl0ZXMpCitNYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZUJsb2NrKHNpemVfdCBieXRlcykKIHsKICAgICBzaXplX3QgbWluQmxvY2tTaXplID0gTWFy
a2VkQmxvY2s6OmJsb2NrU2l6ZTsKICAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplb2YoTWFya2Vk
QmxvY2spKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+
KGJ5dGVzKTsKQEAgLTE4Niw3ICsyMDMsNyBAQCBNYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZUJsCiAKICAgICBzaXplX3QgY2VsbFNpemUgPSBtX2NlbGxTaXplID8gbV9jZWxs
U2l6ZSA6IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5
dGVzKTsKIAotICAgIHJldHVybiBNYXJrZWRCbG9jazo6Y3JlYXRlKCptX2hlYXAsIHRoaXMsIGJs
b2NrU2l6ZSwgY2VsbFNpemUsIG1fYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIE1hcmtlZEJsb2Nr
Ojp0cnlDcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxsU2l6ZSwgbV9hdHRyaWJ1
dGVzKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsb2NrKiBi
bG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KICAgICB2b2lkKiBhbGxvY2F0ZShzaXpl
X3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgSGVhcCogaGVhcCgpIHsg
cmV0dXJuIG1faGVhcDsgfQogICAgIE1hcmtlZEJsb2NrKiB0YWtlTGFzdEFjdGl2ZUJsb2NrKCkK
ICAgICB7CkBAIC03MSwxMCArNzIsMTIgQEAgcHVibGljOgogICAgCiBwcml2YXRlOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKLSAgICB2b2lk
KiB0cnlBbGxvY2F0ZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlSGVscGVyKHNpemVf
dCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZShzaXpl
X3QpOworICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKHNpemVfdCwgYm9vbCBjcmFzaE9u
RmFpbHVyZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhzaXplX3Qp
OworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJbXBsKHNpemVfdCk7CiAg
ICAgdm9pZCogdHJ5UG9wRnJlZUxpc3Qoc2l6ZV90KTsKLSAgICBNYXJrZWRCbG9jayogYWxsb2Nh
dGVCbG9jayhzaXplX3QpOworICAgIE1hcmtlZEJsb2NrKiB0cnlBbGxvY2F0ZUJsb2NrKHNpemVf
dCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsK
ICAgICB2b2lkIHJldGlyZShNYXJrZWRCbG9jayosIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCYpOwog
ICAgIApAQCAtMTEzLDIxICsxMTYsMzUgQEAgaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpp
bml0KEhlYXAqIAogICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiB9CiAKK2lubGluZSB2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcykKK3sKKyAgICBN
YXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CisgICAgaWYgKFVO
TElLRUxZKCFoZWFkKSkgeworICAgICAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3dD
YXNlKGJ5dGVzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiAhQVNTRVJUX0RJU0FCTEVEKQorICAg
ICAgICAgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKKyAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsK
KyAgICByZXR1cm4gaGVhZDsKK30KKwogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGUoc2l6ZV90IGJ5dGVzKQogewogICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9
IG1fZnJlZUxpc3QuaGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKSB7CiAgICAgICAgIHZv
aWQqIHJlc3VsdCA9IGFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOwotI2lmbmRlZiBOREVCVUcKLSAg
ICAgICAgbWVtc2V0KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOwotI2VuZGlmCisgICAgICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFk
ID0gaGVhZC0+bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5
dGVzKTsKLSNlbmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQo
aGVhZCwgMHhDRCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDM2OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDE0ICszNSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29s
IGNvbXB1dGVCYWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtl
ZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2Nh
dG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5
Q3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2Fw
YWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmli
dXRlcykKIHsKICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5jZSsrOwog
ICAgICAgICBpZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2Vk
QmxvY2sgQmFsYW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtlZEJsb2Nr
KiBibG9jayA9IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBh
Y2l0eSkpIE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1
dGVzKTsKKyAgICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tT
aXplLCBjYXBhY2l0eSk7CisgICAgaWYgKCFibG9ja1NwYWNlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2Up
IE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsK
ICAgICBoZWFwLmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJldHVybiBibG9jazsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNp
b24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgbXV0YWJsZSBSZXR1cm5UeXBlIG1fY291bnQ7CiAgICAgICAgIH07CiAKLSAgICAgICAg
c3RhdGljIE1hcmtlZEJsb2NrKiBjcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvciosIHNpemVf
dCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7
CisgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogdHJ5Q3JlYXRlKEhlYXAmLCBNYXJrZWRBbGxv
Y2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9y
QXR0cmlidXRlcyYpOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEhlYXAmLCBNYXJrZWRC
bG9jayopOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzQXRvbUFsaWduZWQoY29uc3Qgdm9pZCop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lv
biAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiBhbGxvY2F0
ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1
Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CisgICAg
dm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKIAogICAgIFN1YnNwYWNlJiBzdWJz
cGFjZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNl
OyB9CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKCkg
eyByZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpAQCAtMTgyLDYgKzE4MywxMSBAQCBpbmxpbmUgdm9p
ZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlQXV4aWxpCiAgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9j
YXRvckZvcihieXRlcykuYWxsb2NhdGUoYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogTWFya2Vk
U3BhY2U6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCBieXRlcykKK3sKKyAgICByZXR1cm4g
YXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS50cnlBbGxvY2F0ZShieXRlcyk7Cit9CisKIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFj
aEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgZm9yRWFjaFN1YnNwYWNlKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNp
b24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDE1IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFw
cGVuZFRvTWFya1N0YWNrKEpTQ2UKICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBl
bmROb2RlKGNlbGwpOwogfQogCit2b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0
IHZvaWQqIGJhc2UpCit7CisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFzZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBtX2J5dGVzVmlz
aXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7Cit9CisKIGNs
YXNzIFNldEN1cnJlbnRDZWxsU2NvcGUgewogcHVibGljOgogICAgIFNldEN1cnJlbnRDZWxsU2Nv
cGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjAzNjk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDYgKzEwNSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJl
bmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAg
IAorICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6
ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KKyAgICAvLyB0aGlz
IHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgorICAgIHZvaWQgbWFy
a0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAogICAgIHZvaWQgY29weUxhdGVyKEpTQ2Vs
bCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKKworLy8gQW4gQXV4
aWxpYXJ5IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBub3QgdHJ5IHRvIHJlYXNvbiBh
Ym91dCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0LCBvdGhlciB0aGFuIGludGVy
cHJldGluZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBiYXJyaWVyLiBJdCdzIE9LIHRv
IHVzZSB0aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55IG90aGVyIGtpbmQgb2YgZGF0
YSwgc28gbG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEoKS4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1YmxpYzoKKyAgICBBdXhpbGlhcnlC
YXJyaWVyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBBdXhpbGlh
cnlCYXJyaWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBt
X3ZhbHVlID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lk
IHNldChWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29uc3QgVCYgZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3QoKSB7IHJldHVybiAmbV92YWx1
ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0
V2l0aG91dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpOyB9CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlC
YXJyaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJIZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQXV4aWxpYXJ5QmFycmllcjxU
Pjo6QXV4aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2YWx1ZSkKK3sK
KyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEF1eGlsaWFy
eUJhcnJpZXI8VD46OnNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2YWx1ZSkKK3sKKyAg
ICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvd25lcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAy
MDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEwICszNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykKIHsKLSAgICB2b2lkKiB0ZW1wOwogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXpl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAudHJ5QWxs
b2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIsIHNpemUsICZ0ZW1wKSk7Ci0gICAgQnV0dGVyZmx5
KiByZXN1bHQgPSBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7
CisgICAgdm9pZCogYmFzZSA9IHZtLmhlYXAuYWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25l
ciwgc2l6ZSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTE5
LDcgKzExOCw4IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmkKICAg
ICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXplX3Qg
b2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRl
ciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXplID0g
dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKLSAgICBpZiAoIXZtLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoaW50ZW5k
ZWRPd25lciwgJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQorICAgIHRoZUJhc2UgPSB2bS5o
ZWFwLnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgdGhlQmFzZSwgb2xkU2l6
ZSwgbmV3U2l6ZSk7CisgICAgaWYgKCF0aGVCYXNlKQogICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjAzNjk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1NCw3ICsyNTQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dD
YXNlKFZNJiB2CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxhcmdlIHNob3VsZCB3
ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJlcXVpcmVkVmVjdG9y
TGVuZ3RoLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7Ci0gICAg
dW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwg
bGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG9sZFZlY3Rvckxl
bmd0aCwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5n
dGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291
bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTMx
NCwxMiArMzE1LDEyIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYK
ICAgICB9IGVsc2UgaWYgKChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVy
ZSh2bSkpKSB8fCAobmV3SW5kZXhCaWFzICE9IHN0b3JhZ2UtPm1faW5kZXhCaWFzKSkgewogICAg
ICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNp
emUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihK
U1ZhbHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoMCkpOwogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yLCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICog
dXNlZFZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBuZXdW
ZWN0b3IgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5n
dGg7IGkrKykKLSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogbmV3VmVjdG9yID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdXNlZFZlY3Rvckxlbmd0
aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgaSsrKQorICAgICAgICBuZXdWZWN0b3JbaV0uY2xlYXIo
KTsKKwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChu
ZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5k
ZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0
cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSw5IEBAIGlu
bGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXQKICAgICAgICAgaWYgKGhhc0Rv
dWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkg
PCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgdm9pZCog
dGVtcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsODAgKzg4LDEwIEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6Y29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5
KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKLXsKLSAgICBBU1NFUlQoYnV0dGVyZmx5
KTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwot
ICAgIAotICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpOwotICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKLSAgICBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXM7Ci0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IHRoaXMtPmhh
c0luZGV4aW5nSGVhZGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkg
ewotICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJl
Q2FwYWNpdHkoc3RydWN0dXJlKTsKLSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMg
PSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KHN0cnVjdHVyZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwotICAg
ICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotICAgIHNpemVfdCBj
YXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShidXR0ZXJmbHktPmJhc2UocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpKSkgewotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24o
dmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgcHJv
cGVydGllcy4KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVu
dFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KQotICAgICAgICAgICAgKC0tY3VycmVu
dFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKC0tY3VycmVudFNvdXJjZSktPmdldCgp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsK
LSAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5
LT5pbmRleGluZ0hlYWRlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDb3B5IHRo
ZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0OwotICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50U291cmNlOwotICAgICAgICAgICAgc2l6ZV90IGNvdW50OwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBB
TExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVy
Zmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2Ug
PSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBuZXdCdXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gMDsKLSAgICAgICAgICAgICAgICBj
dXJyZW50U291cmNlID0gMDsKLSAgICAgICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1lbWNweShjdXJyZW50
VGFyZ2V0LCBjdXJyZW50U291cmNlLCBjb3VudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmll
cihuZXdCdXR0ZXJmbHkpOwotICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVyZmx5LT5iYXNl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKLSAgICB9
IAotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiB7CiAgICAgQVNTRVJUKGJ1dHRlcmZseSk7CisgICAgQVNTRVJUKEhlYXA6OmhlYXAoYml0
d2lzZV9jYXN0PEhlYXBDZWxsKj4oYnV0dGVyZmx5KSkgPT0gdmlzaXRvci5oZWFwKCkpOwogICAg
IAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpOwog
ICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwpAQCAtMTc1LDEzICsxMDUsMTQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcgogICAgICAgICBwcmVDYXBhY2l0eSA9IDA7CiAgICAgICAgIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzID0gMDsKICAgICB9CisKICAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVz
ID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhh
c0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAKKyAgICAvLyBL
ZWVwIHRoZSBidXR0ZXJmbHkgYWxpdmUuCisgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJ1dHRl
cmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpOworICAgIAogICAgIC8v
IE1hcmsgdGhlIHByb3BlcnRpZXMuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0g
ICAgdmlzaXRvci5jb3B5TGF0ZXIoCi0gICAgICAgIHRoaXMsIEJ1dHRlcmZseUNvcHlUb2tlbiwK
LSAgICAgICAgYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwg
Y2FwYWNpdHlJbkJ5dGVzKTsKICAgICAKICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3By
aWF0ZS4KICAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7CkBAIC0yMjUsMTkgKzE1
Niw2IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICNlbmRpZgog
fQogCi12b2lkIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZp
c2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLQotICAgIGlmICh0b2tlbiAhPSBCdXR0ZXJmbHlD
b3B5VG9rZW4pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0g
ICAgICAgIHRoaXNPYmplY3QtPmNvcHlCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLX0KLQogdm9pZCBKU09iamVj
dDo6aGVhcFNuYXBzaG90KEpTQ2VsbCogY2VsbCwgSGVhcFNuYXBzaG90QnVpbGRlciYgYnVpbGRl
cikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwp
OwpAQCAtODA3LDYgKzcyNSw4IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRl
SW5pdGkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3Vz
SW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKTsKICAg
ICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5
KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKQEAgLTgyNyw2
ICs3NDcsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiB7CiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cyk7CiAgICAgc2V0U3RydWN0
dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0
dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOwpAQCAtODQ5LDYgKzc3MSw4IEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICByZXN1bHQtPm1fc3BhcnNl
TWFwLmNsZWFyKCk7CiAgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICBy
ZXN1bHQtPm1faW5kZXhCaWFzID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gdmVjdG9yTGVuZ3Ro
OyBpLS07KQorICAgICAgICByZXN1bHQtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHN0cnVjdHVyZS0+c3VnZ2VzdGVk
QXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
dm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
ODYyLDYgKzc4NiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJy
CiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKFZN
JiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CisKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVl
KCkpOworCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUlu
dDMyKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzSW50MzIoKTsK
IH0KQEAgLTg4MSw2ICs4MTAsMTEgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZl
cnRVbmRlYwogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9D
b250aWd1b3VzKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlw
ZSgpKSk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisg
ICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
SlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxs
b2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1
b3VzKCk7CiB9CkBAIC05MTcsNyArODUxLDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29u
dmVydFVuZGVjaWRlZAogCiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHku
Z2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0
cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rv
ckxlbmd0aCk7Ci0gICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgorICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIAogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CkBAIC05NjYsMTMg
KzkwMiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgp
OwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5
U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUg
diA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewot
ICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmll
cih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMTAxNCwxMyArOTQ4LDExIEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlT
dG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91
dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkg
ewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcihKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgICAgICBu
ZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNW
YWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1
ZSkKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJh
bnNpdGlvbik7CkBAIC0xMDQxLDEzICs5NzMsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydENvbnRpZ3VvdQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5
LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBj
b25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2
ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkr
KykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQo
KTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAgICAgICAg
ICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkp
OwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAg
LTI3NTQsNiArMjY4NCw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZN
JiAKICAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0
dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLnNldChKU1ZhbHVlKCkp
OwogICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgo
bmV3VmVjdG9yTGVuZ3RoKTsKICAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3Ry
dWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3Njgs
NiArMjcwMCw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAg
ICAgICAgbmV3SW5kZXhCaWFzLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9y
TGVuZ3RoKSk7CiAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7
ICsraSkKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
c2V0KEpTVmFsdWUoKSk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVj
dG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91
dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwpAQCAtMjc5MywxNCArMjcyNywx
NyBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAgIG5l
d1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIGlmICghYnV0dGVy
Zmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5
cGUoKSkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwg
bmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXSA9IFBOYU47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFs
dWUoKSk7CisgICAgfQogICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsK
IAogICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAKLSAg
ICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47Ci0gICAg
fQogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAog
I2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5j
bHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2lu
Y2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNs
YXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29w
eUJhcnJpZXIuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJE
ZWZlckdDLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtNzk3LDcgKzc5Nyw2IEBAIHByb3RlY3Rl
ZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKICAgICAg
ICAgCiAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0
cnVjdHVyZSopOwotICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZs
eSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cg
dGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAvLyBz
dG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTk0OSw3ICs5NDgsNyBAQCBw
cml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlT
dG9yYWdlU2xvdyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29weUJhcnJpZXI8QnV0dGVyZmx5
PiBtX2J1dHRlcmZseTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPEJ1dHRlcmZseSo+IG1fYnV0dGVy
Zmx5OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fcGFk
ZGluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
SW5saW5lcy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAog
I2lmbmRlZiBKU09iamVjdElubGluZXNfaAogI2RlZmluZSBKU09iamVjdElubGluZXNfaAogCisj
aW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgog
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0
TWFsbG9jLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL1dURi93dGYvRmFzdE1hbGxv
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxMSwgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCiAgKiBhcmUgbWV0OgpAQCAtOTcsNiArOTYsMTEgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxs
b2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxp
Z25tZW50KTsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpIAoreworICAgIHJldHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxp
Z25tZW50KTsKK30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgX2Fs
aWduZWRfZnJlZShwKTsKQEAgLTExMSw2ICsxMTUsMTMgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxs
b2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBwOwogfQogCit2b2lkKiB0cnlGYXN0QWxp
Z25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgdm9pZCog
cCA9IG51bGxwdHI7CisgICAgcG9zaXhfbWVtYWxpZ24oJnAsIGFsaWdubWVudCwgc2l6ZSk7Cisg
ICAgcmV0dXJuIHA7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAg
IGZyZWUocCk7CkBAIC0yMzEsNiArMjQyLDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNp
emVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4gYm1hbGxvYzo6YXBpOjptZW1hbGlnbihhbGlnbm1l
bnQsIHNpemUpOwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxp
Z24oYWxpZ25tZW50LCBzaXplKTsKK30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkg
CiB7CiAgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHApOwpJbmRleDogU291cmNlL1dURi93dGYvRmFz
dE1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2
aXNpb24gMjAzNjk5KQorKysgU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1
LTIwMDksIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNTMsNiArNTMsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
YXN0RnJlZSh2b2lkKik7CiAKIC8vIEFsbG9jYXRpb25zIGZyb20gZmFzdEFsaWduZWRNYWxsb2Mo
KSBtdXN0IGJlIGZyZWVkIHVzaW5nIGZhc3RBbGlnbmVkRnJlZSgpLgogV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CitX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90KTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2
b2lkKik7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZmFzdE1hbGxvY1NpemUoY29uc3Qg
dm9pZCopOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTY0LDYgKzY0LDE4IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUo
c2l6ZV90IHNpemUKIAogdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50
LCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gY2FsbG9jYXRlSW1wbChhbGlnbm1lbnQsIHNpemUsIGNyYXNoT25GYWlsdXJlKTsKK30K
Kwordm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qg
c2l6ZSkKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGNh
bGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQq
IEFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBi
b29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVu
dCkpOwogCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJsZWQpIHsKQEAgLTgwLDcgKzkyLDEwIEBA
IHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICAgICAgcmV0dXJu
IGFsbG9jYXRlKHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplKSk7CiAKICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgo
KSk7Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRl
TGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2Vz
czxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisgICAgICAg
IHJldHVybiBoZWFwLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAg
cmV0dXJuIGhlYXAtPnRyeUFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKIH0K
IAogdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1Np
emUpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwMzY5OSkK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQz
LDEyICs0MywxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwog
ICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50
LCBzaXplX3QpOwogICAgIHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7CiAKICAgICB2
b2lkIHNjYXZlbmdlKCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCogYWxsb2NhdGVJbXBsKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgCiAgICAgYm9v
bCBhbGxvY2F0ZUZhc3RDYXNlKHNpemVfdCwgdm9pZComKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNs
b3dDYXNlKHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCShyZXZpc2lv
biAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRl
KHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgc3RhdGlj
IHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3RhdGlj
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3RhdGljIHZv
aWQgZGVhbGxvY2F0ZSh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCos
IHNpemVfdCk7CkBAIC03OSw2ICs4MCwxNCBAQCBpbmxpbmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRl
KHNpemVfdCBzaXplCiAgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS5hbGxvY2F0ZShzaXpl
KTsKIH0KIAoraW5saW5lIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2FjaGU+Ojpn
ZXRGYXN0Q2FzZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNs
b3dDYXNlTnVsbENhY2hlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGNhY2hlLT5hbGxv
Y2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiBpbmxpbmUgdm9pZCog
Q2FjaGU6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIENh
Y2hlKiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL2JtYWxsb2MuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9ibWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMsMTIgQEAgaW5s
aW5lIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkKICAgICByZXR1cm4gQ2FjaGU6OmFsbG9jYXRl
KHNpemUpOwogfQogCisvLyBSZXR1cm5zIG51bGwgb24gZmFpbHVyZS4KK2lubGluZSB2b2lkKiB0
cnlNZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4g
Q2FjaGU6OnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Cit9CisKIC8vIENyYXNoZXMgb24g
ZmFpbHVyZS4KIGlubGluZSB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qg
c2l6ZSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284635</attachid>
            <date>2016-07-26 14:54:01 -0700</date>
            <delta_ts>2016-07-26 15:10:38 -0700</delta_ts>
            <desc>crashes for any interesting program</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>77275</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA2Nyw5ICs0MDY3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRF
bmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5oZWFwLnN1YnNwYWNl
Rm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAg
ICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFp
bENhc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9v
dXQuc3ViKGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgTFZhbHVlIGJ1
dHRlcmZseSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUg
b2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZh
aWxDYXNlKTsKICAgICAgICAgICAgIApAQCAtNjk0NywxMSArNjk0OSwxMyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3Jh
Z2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIExW
YWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgp
LCBidXR0ZXJmbHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
KTsKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5h
ZGQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6ZSkpOworICAgICAg
ICAgICAgICAgICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5n
dGgsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsK
ICAgICAgICAgICAgICAgICAKQEAgLTc3NDUsMTAgKzc3NDksMTEgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgaW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwg
TFZhbHVlIHZlY3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAgICAgIGlm
ICghaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBhbHJl
YWR5IGluaXRpYWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYg
KGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0
SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkp
OwogCiAgICAgICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFOLgogICAg
ICAgICBMQmFzaWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03NzYzLDkg
Kzc3NjgsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkoSW50
MzIsIG9yaWdpbmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LnBoaShw
b2ludGVyVHlwZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQu
c3RvcmU2NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291dC5zdG9y
ZTY0KGhvbGUsIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0
QW55SW5kZXgoKSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5leHRJbmRl
eCA9IG1fb3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291dC5hZGRJ
bmNvbWluZ1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03ODI2LDEy
ICs3ODI5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQo
Ci0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNW
YWx1ZSkpLCBzbG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUlu
VmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9j
YXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5j
b25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1f
b3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZT
dG9yYWdlKSk7CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUlu
Qnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC04NDAx
LDcgKzg0MDUsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwog
ICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2lj
QmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9j
YXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBz
dWNjZXNzID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAKQEAgLTg0MzYsNyArODQ0MCw3IEBAIHBy
aXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIExW
YWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CisgICAgICAg
IExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgpOwog
ICAgICAgICBzdG9yZVN0cnVjdHVyZShyZXN1bHQsIHN0cnVjdHVyZSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtODQ2NCwxNSArODQ2OCwxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgwKSwgc3RydWN0dXJlLCBidXR0ZXJmbHks
IHNsb3dQYXRoKTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBl
PgotICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCi0gICAgICAgIExWYWx1
ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxv
Y2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoTFZhbHVlIHN1YnNwYWNl
LCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBzdGF0
aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtlZFNwYWNlOjpwcmVj
aXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIg
b2YgdHdvLiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OmltcHJlY2lz
ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6
aW1wcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogCi0gICAgICAgIExWYWx1
ZSBzdWJzcGFjZSA9IG1fb3V0LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vic3BhY2VGb3JPYmpl
Y3RPZlR5cGU8Q2xhc3NUeXBlPigpKTsKLSAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIHNt
YWxsQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgbGFy
Z2VPck92ZXJzaXplQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2lj
QmxvY2sgbGFyZ2VDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtODUwMiw4ICs4NTAy
LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICBMVmFsdWUgYWxsb2NhdG9yID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIHNtYWxsQWxs
b2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gbV9vdXQu
cGhpKHBvaW50ZXJUeXBlKCksIHNtYWxsQWxsb2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7CisgICAg
fQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0b3JGb3JTaXplKE1hcmtlZFNwYWNlOjpTdWJzcGFj
ZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JTaXplKG1fb3V0LmNvbnN0SW50UHRyKCZzdWJzcGFj
ZSksIHNpemUsIHNsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2xhc3NUeXBlPgorICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCisgICAg
ICAgIExWYWx1ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwg
TEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAgIHZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVj
dE9mVHlwZTxDbGFzc1R5cGU+KCksIHNpemUsIHNsb3dQYXRoKTsKICAgICAgICAgcmV0dXJuIGFs
bG9jYXRlT2JqZWN0KGFsbG9jYXRvciwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsK
ICAgICB9CiAgICAgCkBAIC04NTkwLDI2ICs4NjAyLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4s
IG51bUVsZW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBh
bGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJbmRleGluZ0hlYWRl
cikpLAotICAgICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKAorICAgICAgICAg
ICAgc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSk7CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9v
dXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoCi0gICAgICAgICAgICBlbmRPZlN0b3JhZ2Us
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCkpOworICAg
ICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5j
b25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgIAotICAgICAgICBM
VmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oCi0gICAgICAgICAgICBzdHJ1
Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxs
b2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAg
ICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihudW1FbGVtZW50
cyksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAg
bV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHZlY3Rvckxlbmd0aCksIGJ1dHRlcmZseSwg
bV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICho
YXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksCi0gICAgICAgICAgICAgICAgICAg
IGJ1dHRlcmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllc1tpXSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KKworICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhh
c0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIGhvbGUgPSBt
X291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2
ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaG9sZSwgYnV0dGVy
Zmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBBcnJheVZhbHVlcyhvYmplY3QsIGJ1dHRlcmZseSk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDIwMzY5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDcgKzI5LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tl
biB7Ci0gICAgQnV0dGVyZmx5Q29weVRva2VuLAogICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9r
ZW4sCiAgICAgTWFwQmFja2luZ1N0b3JlQ29weVRva2VuLAogICAgIERpcmVjdEFyZ3VtZW50c092
ZXJyaWRlc0NvcHlUb2tlbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJl
dmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OTgsMTIgKzU5OCw2IEBAIHZvaWQgSGVhcDo6Y29weUJhY2tpbmdT
dG9yZXMoKQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBDb3B5V29ya0xpc3QmIHdvcmtMaXN0ID0gYmxvY2stPndvcmtMaXN0KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKENvcHlXb3JrbGlzdEl0ZW0gaXRlbSA6IHdvcmtMaXN0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udG9rZW4oKSA9PSBCdXR0ZXJmbHlD
b3B5VG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6OmNv
cHlCYWNraW5nU3RvcmUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVt
LmNlbGwoKSwgY29weVZpc2l0b3IsIEJ1dHRlcmZseUNvcHlUb2tlbik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpdGVtLmNlbGwoKS0+bWV0aG9kVGFibGUoKS0+Y29weUJhY2tpbmdTdG9yZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCksIGNvcHlWaXNpdG9yLCBpdGVt
LnRva2VuKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAg
ICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklU
OwogICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFsdWUpOyAvLyAwIGZvciBpbW1lZGlh
dGUgdmFsdWVzCi0gICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNDZWxsKik7CisgICAgc3Rh
dGljIEhlYXAqIGhlYXAoY29uc3QgSGVhcENlbGwqKTsKIAogICAgIC8vIFRoaXMgY29uc3RhbnQg
ZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mgd2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBvZiBv
dXIgCiAgICAgLy8gZGVhZGxpbmUgd2hlbiBjYWxsaW5nIEhlYXA6OmlzUGFnZWRPdXQuIERlY3Jl
YXNpbmcgaXQgd2lsbCBjYXVzZSB1cyB0byBkZXRlY3QgCkBAIC0xNTAsNyArMTUwLDExIEBAIHB1
YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0
cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3Io
Ynl0ZXMpOyB9CiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVz
dHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFs
bG9jYXRvckZvcihieXRlcyk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IE1h
cmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcyk7Cisg
ICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRl
cykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9
CiAgICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9y
YWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KKyAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlh
cnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeVJlYWxsb2Nh
dGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qg
b2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRl
U3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVj
a2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZv
aWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgdm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBi
b29sIEhlYXA6OmlzQ29sbGVjdGluZygpCiAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxl
Y3Rpb247CiB9CiAKLWlubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkK
K2lubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIHJl
dHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKIH0KQEAgLTE5OSw3ICsx
OTksNyBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLXZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZU
eXBlKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlw
ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9i
amVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNE
ZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0
aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkg
fHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6
dmFsdWUpKTsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9m
VHlwZShzaXplX3QgCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLU1hcmtlZFNw
YWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQoraW5saW5lIE1h
cmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQogewog
ICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRo
IG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lgog
ICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpT
dHJ1Y3R1cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGli
bGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMjEsNyAr
MjIxLDcgQEAgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvcgogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci1NYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9j
YXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgTWFya2VkQWxsb2NhdG9y
JiBIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogewogICAgIC8v
IEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1h
bCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFT
U0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1
cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xh
c3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMzEsNiArMjMxLDM3
IEBAIE1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWMKICAgICByZXR1cm4g
YWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYnl0ZXMpOwogfQogCitpbmxpbmUg
dm9pZCogSGVhcDo6YWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXpl
X3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZUF1
eGlsaWFyeShieXRlcyk7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRh
TG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVw
LlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShpbnRlbmRlZE93bmVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu
bGluZSB2b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNwYWNlLnRy
eUFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5H
KQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5
IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxs
KiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpCit7CisgICAgdm9pZCogbmV3QmFzZSA9IHRyeUFsbG9jYXRlQXV4aWxpYXJ5KGludGVu
ZGVkT3duZXIsIG5ld1NpemUpOworICAgIGlmICghbmV3QmFzZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2UsIG9sZFNpemUpOworICAgIHJldHVy
biBuZXdCYXNlOworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVT
dG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRy
KQogewogICAgIENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9j
YXRlKGJ5dGVzLCBvdXRQdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBi
bG9jay0+ZGlkUmV0aXJlQmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3Qg
Ynl0ZXMpCiB7CiAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRCbG9jayA9PSBtX25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAg
aW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFk
OwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qg
Ynl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRD
b2xsZWN0aW5nKHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkp
OwogICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2
b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0
ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFw
LT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0
IHx8ICFtX2N1cnJlbnRCbG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0g
dHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWls
dXJlKTsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNp
emVfdCBieXRlcykKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0
dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3Zv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBi
b29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQo
KTsKIApAQCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKAogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRp
ZEFsbG9jYXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRy
eUFsbG9jYXRlKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRD
b2xsZWN0aW5nKGJ5dGVzKTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwor
ICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAg
ICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgQVNTRVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxv
Y2sqIGJsb2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAg
ICBNYXJrZWRCbG9jayogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAo
IWJsb2NrKSB7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJl
c3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhv
dXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1NYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNp
emVfdCBieXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxv
Y2soc2l6ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9j
azo6YmxvY2tTaXplOwogICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykp
ICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMp
OwpAQCAtMTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9j
YXRlQmwKIAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDog
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwog
Ci0gICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXpl
LCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNy
ZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwog
fQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0
cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVz
dHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4g
bV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsK
QEAgLTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFs
bG9jYXRlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7Cisg
ICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJl
KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAg
dm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lk
KiB0cnlQb3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2Nr
KHNpemVfdCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZv
aWQgcmV0aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBA
IC0xMTMsMjEgKzExNiwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVh
cCogCiAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJs
b2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFko
IWhlYWQpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0
ZXMpOworICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAg
ICBtZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAg
cmV0dXJuIGhlYWQ7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRl
KHNpemVfdCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2Zy
ZWVMaXN0LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiBy
ZXN1bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAg
IG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0g
aGVhZC0+bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVz
KTsKLSNlbmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVh
ZCwgMHhDRCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDE0ICszNSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29sIGNv
bXB1dGVCYWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtlZEJs
b2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9y
QXR0cmlidXRlcyYgYXR0cmlidXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5Q3Jl
YXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRl
cykKIHsKICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5jZSsrOwogICAg
ICAgICBpZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxv
Y2sgQmFsYW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtlZEJsb2NrKiBi
bG9jayA9IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0
eSkpIE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVz
KTsKKyAgICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXpl
LCBjYXBhY2l0eSk7CisgICAgaWYgKCFibG9ja1NwYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1h
cmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKICAg
ICBoZWFwLmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJldHVybiBibG9jazsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgbXV0YWJsZSBSZXR1cm5UeXBlIG1fY291bnQ7CiAgICAgICAgIH07CiAKLSAgICAgICAgc3Rh
dGljIE1hcmtlZEJsb2NrKiBjcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvciosIHNpemVfdCBj
YXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7Cisg
ICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogdHJ5Q3JlYXRlKEhlYXAmLCBNYXJrZWRBbGxvY2F0
b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0
cmlidXRlcyYpOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEhlYXAmLCBNYXJrZWRCbG9j
ayopOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzQXRvbUFsaWduZWQoY29uc3Qgdm9pZCopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAy
MDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiBhbGxvY2F0ZVdp
dGhEZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3Rv
cihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKIAogICAgIFN1YnNwYWNlJiBzdWJzcGFj
ZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlOyB9
CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKCkgeyBy
ZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpAQCAtMTgyLDYgKzE4MywxMSBAQCBpbmxpbmUgdm9pZCog
TWFya2VkU3BhY2U6OmFsbG9jYXRlQXV4aWxpCiAgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRv
ckZvcihieXRlcykuYWxsb2NhdGUoYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkU3Bh
Y2U6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gYXV4
aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS50cnlBbGxvY2F0ZShieXRlcyk7Cit9CisKIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJs
b2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgZm9yRWFjaFN1YnNwYWNlKApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDE1IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFRvTWFya1N0YWNrKEpTQ2UKICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRO
b2RlKGNlbGwpOwogfQogCit2b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZv
aWQqIGJhc2UpCit7CisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBtX2J5dGVzVmlzaXRl
ZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoYmFzZSktPmNlbGxTaXplKCk7Cit9CisKIGNsYXNz
IFNldEN1cnJlbnRDZWxsU2NvcGUgewogcHVibGljOgogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDYgKzEwNSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNl
cygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIAor
ICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0
aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KKyAgICAvLyB0aGlzIHRo
ZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgorICAgIHZvaWQgbWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAogICAgIHZvaWQgY29weUxhdGVyKEpTQ2VsbCos
IENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNp
b24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4
dHJhY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDQgKzkxLDMgQEAgaW50IG1haW4oaW50
LCBjaGFyKiopCiAgICAgcmV0dXJuIDA7CiB9CiAKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworY2xhc3MgVk07CisKKy8vIEFuIEF1eGlsaWFy
eSBiYXJyaWVyIGlzIGEgYmFycmllciB0aGF0IGRvZXMgbm90IHRyeSB0byByZWFzb24gYWJvdXQg
dGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBpbnRvCisvLyBpdCwgb3RoZXIgdGhhbiBpbnRlcnByZXRp
bmcgYSBmYWxzaXNoIHZhbHVlIGFzIG5vdCBuZWVkIGEgYmFycmllci4gSXQncyBPSyB0byB1c2Ug
dGhpcyBmb3IgZWl0aGVyCisvLyBKU0NlbGxzIG9yIGFueSBvdGhlciBraW5kIG9mIGRhdGEsIHNv
IGxvbmcgYXMgaXQgcmVzcG9uZHMgdG8gb3BlcmF0b3IhKCkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorY2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CitwdWJsaWM6CisgICAgQXV4aWxpYXJ5QmFycmll
cigpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQXV4aWxpYXJ5QmFy
cmllcihWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1
ZSA9IFQoKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXQo
Vk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIGNvbnN0IFQmIGdldCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBzbG90KCkgeyByZXR1cm4gJm1fdmFsdWU7IH0K
KyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3Zh
bHVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHNldFdpdGhv
dXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsg
fQorICAgIAorcHJpdmF0ZToKKyAgICBUIG1fdmFsdWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmll
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVT4KK0F1eGlsaWFyeUJhcnJpZXI8VD46OkF1
eGlsaWFyeUJhcnJpZXIoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVJiYgdmFsdWUpCit7CisgICAg
bV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJp
ZXIob3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUg
VT4KK3ZvaWQgQXV4aWxpYXJ5QmFycmllcjxUPjo6c2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
VSYmIHZhbHVlKQoreworICAgIG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOworICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVzLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTAgKzM3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFs
aXplZChWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewotICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90
IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgc2l6ZSwgJnRlbXAp
KTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uaGVhcC5hbGxvY2F0ZUF1eGls
aWFyeShpbnRlbmRlZE93bmVyLCBzaXplKTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21C
YXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC0xMTksNyArMTE4LDggQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5
Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNp
dHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHks
IGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAg
c2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICghdm0uaGVhcC50cnlSZWFsbG9j
YXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCAmdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisg
ICAgdGhlQmFzZSA9IHZtLmhlYXAudHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVy
LCB0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICBpZiAoIXRoZUJhc2UpCiAgICAgICAg
IHJldHVybiAwOwogICAgIHJldHVybiBmcm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFj
aXR5KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw4IEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBo
b3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24g
MnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGgg
PSBtaW4ob2xkVmVjdG9yTGVuZ3RoLCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVjdG9yTGVu
Z3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRoYXQgcmVx
dWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBmYXNo
aW9uLgogICAgIGlmIChjb3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2VkVmVj
dG9yTGVuZ3RoKQpAQCAtMzE0LDEyICszMTUsMTIgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnRTbG93Q2FzZShWTSYgdgogICAgIH0gZWxzZSBpZiAoKG5ld0FsbG9jQmFzZSAhPSBidXR0ZXJm
bHktPmJhc2Uoc3RydWN0dXJlKHZtKSkpIHx8IChuZXdJbmRleEJpYXMgIT0gc3RvcmFnZS0+bV9p
bmRleEJpYXMpKSB7CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5U2l6ZSwgc2l6ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgICAgIG1lbW1vdmUobmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIHN0b3JhZ2UtPm1fdmVjdG9yLCBz
aXplb2YoSlNWYWx1ZSkgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIG5ld1ZlY3RvciA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXF1aXJlZFZlY3Rvckxlbmd0aDsg
aSA8IG5ld1ZlY3Rvckxlbmd0aDsgaSsrKQotICAgICAgICAgICAgbmV3VmVjdG9yW2ldLmNsZWFy
KCk7CiAgICAgfQogCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBuZXdWZWN0b3IgPSBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSB1c2VkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyBpKyspCisgICAgICAgIG5l
d1ZlY3RvcltpXS5jbGVhcigpOworCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5
V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTEsNiArMjUxLDkgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdAog
ICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3Ro
OyArK2kpCiAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0g
PSBQTmFOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICB2b2lkKiB0ZW1wOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDgwICs4OCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVz
CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHko
Q29weVZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFn
ZVNpemUpCi17Ci0gICAgQVNTRVJUKGJ1dHRlcmZseSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBzaXplX3QgcHJl
Q2FwYWNpdHk7Ci0gICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOwotICAgIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0aGlzLT5oYXNJbmRleGluZ0hlYWRlcigpOwotICAgIGlm
IChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSBi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7Ci0gICAg
ICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRl
cigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gMDsKLSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMgPSAwOwotICAgIH0KLSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5
Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVh
ZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJ
ZlNob3VsZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
KSkpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOwotCi0gICAgICAgIC8vIENvcHkgdGhlIHByb3BlcnRpZXMuCi0gICAgICAgIFByb3BlcnR5
U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsK
LSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBj
b3VudC0tOykKLSAgICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKCgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
VU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAgICAgICAqbmV3QnV0dGVyZmx5
LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gQ29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCi0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRh
cmdldDsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZTsK
LSAgICAgICAgICAgIHNpemVfdCBjb3VudDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dp
dGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJ
REVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgot
ICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAg
ICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsK
LSAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKCku
ZGF0YSgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkgPD0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAg
ICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQg
PSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0g
ICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgY3VycmVu
dFRhcmdldCA9IDA7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IDA7Ci0gICAgICAg
ICAgICAgICAgY291bnQgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBtZW1jcHkoY3VycmVudFRhcmdldCwgY3VycmVudFNvdXJjZSwgY291
bnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIobmV3QnV0dGVyZmx5KTsKLSAgICAgICAg
dmlzaXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7Ci0gICAgfSAKLX0KLQogQUxXQVlTX0lOTElORSB2b2lk
IEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5
KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChidXR0ZXJm
bHkpOworICAgIEFTU0VSVChIZWFwOjpoZWFwKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJ1dHRl
cmZseSkpID09IHZpc2l0b3IuaGVhcCgpKTsKICAgICAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUg
PSBzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKTsKICAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKQEAgLTE3NSwxMyArMTA1LDEyIEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJlQ2Fw
YWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAgICAg
fQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKIAorICAgIC8vIEtlZXAgdGhlIGJ1dHRlcmZseSBhbGl2ZS4KKyAg
ICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5KSk7CisgICAgCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0g
c3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICB2aXNpdG9yLmNvcHlMYXRlcigKLSAgICAg
ICAgdGhpcywgQnV0dGVyZmx5Q29weVRva2VuLAotICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwogICAgIAogICAg
IC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgIHN3aXRjaCAodGhpcy0+aW5k
ZXhpbmdUeXBlKCkpIHsKQEAgLTIyNSwxOSArMTU0LDYgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbAogI2VuZGlmCiB9CiAKLXZvaWQgSlNPYmplY3Q6OmNvcHlCYWNr
aW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRv
a2VuKQotewotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2Vs
bCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
Ci0gICAgaWYgKHRva2VuICE9IEJ1dHRlcmZseUNvcHlUb2tlbikKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHku
Z2V0KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+Y29weUJ1dHRl
cmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVTaXplKCkpOwotfQotCiB2b2lkIEpTT2JqZWN0OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxs
LCBIZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC04MDcsNiArNzIzLDggQEAgQ29udGln
dW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogewogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJ
bmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAg
ICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb246OkFsbG9jYXRlSW50MzIpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2
bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHkt
PmNvbnRpZ3VvdXNJbnQzMigpOwpAQCAtODI3LDYgKzc0NSw4IEBAIENvbnRpZ3VvdXNKU1ZhbHVl
cyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3Jh
Z2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgbmV3QnV0
dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkp
OwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2Nh
dGVDb250aWd1b3VzKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVj
dHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3Vz
KCk7CkBAIC04NDksNiArNzY5LDggQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJy
YXlTdG9yYQogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICByZXN1bHQtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAwOworICAg
IGZvciAoc2l6ZV90IGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHJlc3VsdC0+bV92
ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwog
ICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJm
bHkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NjIsNiArNzg0LDExIEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZFRvSW50MzIoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRl
Y2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0s
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Q
cm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIpKTsKICAgICByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQpAQCAtODgxLDYgKzgwOCwxMSBAQCBDb250
aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVuZGVjCiBDb250aWd1b3VzSlNWYWx1ZXMg
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFT
U0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOworCiAgICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAgICByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsKIH0KQEAgLTkxNyw3ICs4NDksOSBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAKICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0
aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBObyBuZWVkIHRv
IGNvcHkgZWxlbWVudHMuCisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3Ro
OyBpLS07KQorICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlv
bik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0b3Jh
Z2UtPmJ1dHRlcmZseSgpKTsKQEAgLTk2NiwxMyArOTAwLDExIEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1
dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9y
YWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50
cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVu
Z3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBpZiAodikKICAg
ICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNF
bXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlv
bik7CkBAIC0xMDE0LDEzICs5NDYsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVy
dERvdWJsZVRvQQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgp
LT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1
Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JM
ZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkr
KykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewog
ICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsK
LSAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2Rl
QXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUp
KTsKKyAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VS
VChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAK
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEwNDEsMTMgKzk3MSwx
MSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAg
IEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFn
ZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAg
ICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsK
KyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2
KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMjc1NCw2ICsyNjgyLDggQEAgYm9vbCBKU09i
amVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICAgICAgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JM
ZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1Zl
Y3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIHNldEJ1dHRl
cmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yNzY4LDYgKzI2OTgsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFz
ZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3QnV0dGVyZmx5KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3Ro
OyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAgc2V0
QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwpAQCAt
Mjc5MywxNCArMjcyNSwxNyBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2
bSwgCiAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwog
ICAgIGlmICghYnV0dGVyZmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0Rv
dWJsZShpbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVj
dG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKEpTVmFsdWUoKSk7CisgICAgfQogICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhp
cywgYnV0dGVyZmx5KTsKIAogICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CiAKLSAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKVtp
XSA9IFBOYU47Ci0gICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDExICsyNiwxMSBAQAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJBcnJheUNvbnZl
bnRpb25zLmgiCiAjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5
QmFycmllci5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5o
IgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgi
Ci0jaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIu
aCIKICNpbmNsdWRlICJEZWZlckdDLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtMTAzLDcgKzEw
Myw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0
aW1hdGVkU2l6ZShKU0NlbGwqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENv
cHlUb2tlbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90
KEpTQ2VsbCosIEhlYXBTbmFwc2hvdEJ1aWxkZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CkBAIC03OTcsNyArNzk2
LDYgQEAgcHJvdGVjdGVkOgogICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5
KiA9IDApOwogICAgICAgICAKICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwg
QnV0dGVyZmx5KiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBjb3B5QnV0dGVyZmx5KENvcHlWaXNp
dG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKIAogICAgIC8vIENhbGwgdGhp
cyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBh
cnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtOTQ5
LDcgKzk0Nyw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXJyYXlTdG9yYWdl
KiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KFZNJik7CiAKIHByb3RlY3RlZDoKLSAgICBDb3B5QmFy
cmllcjxCdXR0ZXJmbHk+IG1fYnV0dGVyZmx5OworICAgIEF1eGlsaWFyeUJhcnJpZXI8QnV0dGVy
Zmx5Kj4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAg
dWludDMyX3QgbV9wYWRkaW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw2ICsyNCw3IEBACiAjaWZuZGVmIEpTT2JqZWN0SW5saW5lc19oCiAjZGVmaW5lIEpTT2JqZWN0
SW5saW5lc19oCiAKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgogI2luY2x1
ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMb29rdXAuaCIK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDYgQEAKLS8vIENv
cHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAy
MDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CkBAIC05Nyw2ICs5NiwxMSBAQCB2b2lkKiBm
YXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJuIF9hbGlnbmVkX21h
bGxvYyhzaXplLCBhbGlnbm1lbnQpOwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgcmV0dXJuIF9hbGlnbmVkX21h
bGxvYyhzaXplLCBhbGlnbm1lbnQpOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBw
KSAKIHsKICAgICBfYWxpZ25lZF9mcmVlKHApOwpAQCAtMTExLDYgKzExNSwxMyBAQCB2b2lkKiBm
YXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJuIHA7CiB9CiAKK3Zv
aWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAK
K3sKKyAgICB2b2lkKiBwID0gbnVsbHB0cjsKKyAgICBwb3NpeF9tZW1hbGlnbigmcCwgYWxpZ25t
ZW50LCBzaXplKTsKKyAgICByZXR1cm4gcDsKK30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9p
ZCogcCkgCiB7CiAgICAgZnJlZShwKTsKQEAgLTIzMSw2ICsyNDIsMTEgQEAgdm9pZCogZmFzdEFs
aWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBibWFsbG9jOjphcGk6Om1l
bWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9j
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICByZXR1cm4gYm1hbGxvYzo6
YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworfQorCiB2b2lkIGZhc3RBbGlnbmVk
RnJlZSh2b2lkKiBwKSAKIHsKICAgICBibWFsbG9jOjphcGk6OmZyZWUocCk7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFz
dE1hbGxvYy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9j
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykg
MjAwNS0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Myw2ICs1Myw3IEBAIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGZhc3RGcmVlKHZvaWQqKTsKIAogLy8gQWxsb2NhdGlvbnMgZnJvbSBmYXN0
QWxpZ25lZE1hbGxvYygpIG11c3QgYmUgZnJlZWQgdXNpbmcgZmFzdEFsaWduZWRGcmVlKCkuCiBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxv
YyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFz
dEFsaWduZWRGcmVlKHZvaWQqKTsKIAogV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmYXN0TWFs
bG9jU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xMDcsNiArMTA4LDcgQEAgdXNpbmcgV1RGOjpmYXN0
TWFsbG9jU2l6ZTsKIHVzaW5nIFdURjo6ZmFzdFJlYWxsb2M7CiB1c2luZyBXVEY6OmZhc3RTdHJE
dXA7CiB1c2luZyBXVEY6OmZhc3RaZXJvZWRNYWxsb2M7Cit1c2luZyBXVEY6OnRyeUZhc3RBbGln
bmVkTWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0Q2FsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0
TWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0WmVyb2VkTWFsbG9jOwpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDE4
IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNpemUKIAogdm9pZCogQWxs
b2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBi
b29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdu
bWVudCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIGJvb2wgY3Jhc2hP
bkZhaWx1cmUgPSBmYWxzZTsKKyAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6
ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbChz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAg
ICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKIAogICAgIGlmICghbV9pc0JtYWxs
b2NFbmFibGVkKSB7CkBAIC04MCw3ICs5MiwxMCBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRl
KHNpemVfdCBhbGlnbm1lCiAgICAgICAgIHJldHVybiBhbGxvY2F0ZShyb3VuZFVwVG9NdWx0aXBs
ZU9mKGFsaWdubWVudCwgc2l6ZSkpOwogCiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgIHJldHVybiBQZXJQcm9jZXNz
PEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6
ZSk7CisgICAgSGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCk7Cisg
ICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAgICByZXR1cm4gaGVhcC0+YWxsb2NhdGVMYXJn
ZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBoZWFwLT50cnlBbGxvY2F0ZUxh
cmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxv
Y2F0ZSh2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9BbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MywxMiArNDMsMTUgQEAgcHVibGljOgogCiAg
ICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3Qp
OworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAg
dm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiByZWFs
bG9jYXRlKHZvaWQqLCBzaXplX3QpOwogCiAgICAgdm9pZCBzY2F2ZW5nZSgpOwogCiBwcml2YXRl
OgorICAgIHZvaWQqIGFsbG9jYXRlSW1wbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIGJvb2wg
Y3Jhc2hPbkZhaWx1cmUpOworICAgIAogICAgIGJvb2wgYWxsb2NhdGVGYXN0Q2FzZShzaXplX3Qs
IHZvaWQqJik7CiAgICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwogICAgIApJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAgIHN0YXRpYyB2b2lk
KiBhbGxvY2F0ZShzaXplX3QpOworICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCopOwogICAg
IHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqLCBzaXplX3QpOwpAQCAtNzksNiArODAsMTQg
QEAgaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZQogICAgIHJldHVybiBj
YWNoZS0+YWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6ZSk7CiB9CiAKK2lubGluZSB2b2lkKiBDYWNo
ZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgQ2Fj
aGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hlPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoIWNh
Y2hlKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShhbGlnbm1lbnQs
IHNpemUpOworICAgIHJldHVybiBjYWNoZS0+YWxsb2NhdG9yKCkudHJ5QWxsb2NhdGUoYWxpZ25t
ZW50LCBzaXplKTsKK30KKwogaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2Fj
aGU+OjpnZXRGYXN0Q2FzZSgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9j
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHJldmlz
aW9uIDIwMzY5OSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQzLDYgKzQzLDEyIEBAIGlubGluZSB2b2lkKiBtYWxsb2Moc2l6ZV90IHNp
emUpCiAgICAgcmV0dXJuIENhY2hlOjphbGxvY2F0ZShzaXplKTsKIH0KIAorLy8gUmV0dXJucyBu
dWxsIG9uIGZhaWx1cmUuCitpbmxpbmUgdm9pZCogdHJ5TWVtYWxpZ24oc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIENhY2hlOjp0cnlBbGxvY2F0ZShhbGlnbm1l
bnQsIHNpemUpOworfQorCiAvLyBDcmFzaGVzIG9uIGZhaWx1cmUuCiBpbmxpbmUgdm9pZCogbWVt
YWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284642</attachid>
            <date>2016-07-26 15:10:38 -0700</date>
            <delta_ts>2016-07-27 09:58:52 -0700</delta_ts>
            <desc>it ran some interesting programs</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79416</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA2Nyw5ICs0MDY3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRF
bmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5oZWFwLnN1YnNwYWNl
Rm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAg
ICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFp
bENhc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9v
dXQuc3ViKGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgTFZhbHVlIGJ1
dHRlcmZseSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUg
b2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZh
aWxDYXNlKTsKICAgICAgICAgICAgIApAQCAtNjk0NywxMSArNjk0OSwxMyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3Jh
Z2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIExW
YWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgp
LCBidXR0ZXJmbHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
KTsKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5h
ZGQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6ZSkpOworICAgICAg
ICAgICAgICAgICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5n
dGgsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsK
ICAgICAgICAgICAgICAgICAKQEAgLTc3NDUsMTAgKzc3NDksMTEgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgaW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwg
TFZhbHVlIHZlY3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAgICAgIGlm
ICghaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBhbHJl
YWR5IGluaXRpYWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYg
KGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0
SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkp
OwogCiAgICAgICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFOLgogICAg
ICAgICBMQmFzaWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03NzYzLDkg
Kzc3NjgsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkoSW50
MzIsIG9yaWdpbmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LnBoaShw
b2ludGVyVHlwZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQu
c3RvcmU2NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291dC5zdG9y
ZTY0KGhvbGUsIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0
QW55SW5kZXgoKSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5leHRJbmRl
eCA9IG1fb3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291dC5hZGRJ
bmNvbWluZ1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03ODI2LDEy
ICs3ODI5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQo
Ci0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNW
YWx1ZSkpLCBzbG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUlu
VmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9j
YXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5j
b25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1f
b3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZT
dG9yYWdlKSk7CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUlu
Qnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC04NDAx
LDcgKzg0MDUsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwog
ICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2lj
QmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9j
YXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBz
dWNjZXNzID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAKQEAgLTg0MzYsNyArODQ0MCw3IEBAIHBy
aXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIExW
YWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CisgICAgICAg
IExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgpOwog
ICAgICAgICBzdG9yZVN0cnVjdHVyZShyZXN1bHQsIHN0cnVjdHVyZSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtODQ2NCwxNSArODQ2OCwxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgwKSwgc3RydWN0dXJlLCBidXR0ZXJmbHks
IHNsb3dQYXRoKTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBl
PgotICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCi0gICAgICAgIExWYWx1
ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxv
Y2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoTFZhbHVlIHN1YnNwYWNl
LCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBzdGF0
aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtlZFNwYWNlOjpwcmVj
aXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIg
b2YgdHdvLiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OmltcHJlY2lz
ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6
aW1wcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogCi0gICAgICAgIExWYWx1
ZSBzdWJzcGFjZSA9IG1fb3V0LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vic3BhY2VGb3JPYmpl
Y3RPZlR5cGU8Q2xhc3NUeXBlPigpKTsKLSAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIHNt
YWxsQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgbGFy
Z2VPck92ZXJzaXplQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2lj
QmxvY2sgbGFyZ2VDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtODUwMiw4ICs4NTAy
LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICBMVmFsdWUgYWxsb2NhdG9yID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIHNtYWxsQWxs
b2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gbV9vdXQu
cGhpKHBvaW50ZXJUeXBlKCksIHNtYWxsQWxsb2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7CisgICAg
fQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0b3JGb3JTaXplKE1hcmtlZFNwYWNlOjpTdWJzcGFj
ZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JTaXplKG1fb3V0LmNvbnN0SW50UHRyKCZzdWJzcGFj
ZSksIHNpemUsIHNsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2xhc3NUeXBlPgorICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCisgICAg
ICAgIExWYWx1ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwg
TEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAgIHZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVj
dE9mVHlwZTxDbGFzc1R5cGU+KCksIHNpemUsIHNsb3dQYXRoKTsKICAgICAgICAgcmV0dXJuIGFs
bG9jYXRlT2JqZWN0KGFsbG9jYXRvciwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsK
ICAgICB9CiAgICAgCkBAIC04NTkwLDI2ICs4NjAyLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4s
IG51bUVsZW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBh
bGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJbmRleGluZ0hlYWRl
cikpLAotICAgICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKAorICAgICAgICAg
ICAgc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSk7CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9v
dXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoCi0gICAgICAgICAgICBlbmRPZlN0b3JhZ2Us
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCkpOworICAg
ICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5j
b25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgIAotICAgICAgICBM
VmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oCi0gICAgICAgICAgICBzdHJ1
Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxs
b2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAg
ICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihudW1FbGVtZW50
cyksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAg
bV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHZlY3Rvckxlbmd0aCksIGJ1dHRlcmZseSwg
bV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICho
YXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksCi0gICAgICAgICAgICAgICAgICAg
IGJ1dHRlcmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllc1tpXSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KKworICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhh
c0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIGhvbGUgPSBt
X291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2
ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaG9sZSwgYnV0dGVy
Zmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBBcnJheVZhbHVlcyhvYmplY3QsIGJ1dHRlcmZseSk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDIwMzY5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDcgKzI5LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tl
biB7Ci0gICAgQnV0dGVyZmx5Q29weVRva2VuLAogICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9r
ZW4sCiAgICAgTWFwQmFja2luZ1N0b3JlQ29weVRva2VuLAogICAgIERpcmVjdEFyZ3VtZW50c092
ZXJyaWRlc0NvcHlUb2tlbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJl
dmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OTgsMTIgKzU5OCw2IEBAIHZvaWQgSGVhcDo6Y29weUJhY2tpbmdT
dG9yZXMoKQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBDb3B5V29ya0xpc3QmIHdvcmtMaXN0ID0gYmxvY2stPndvcmtMaXN0KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKENvcHlXb3JrbGlzdEl0ZW0gaXRlbSA6IHdvcmtMaXN0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udG9rZW4oKSA9PSBCdXR0ZXJmbHlD
b3B5VG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6OmNv
cHlCYWNraW5nU3RvcmUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVt
LmNlbGwoKSwgY29weVZpc2l0b3IsIEJ1dHRlcmZseUNvcHlUb2tlbik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpdGVtLmNlbGwoKS0+bWV0aG9kVGFibGUoKS0+Y29weUJhY2tpbmdTdG9yZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCksIGNvcHlWaXNpdG9yLCBpdGVt
LnRva2VuKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAg
ICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklU
OwogICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFsdWUpOyAvLyAwIGZvciBpbW1lZGlh
dGUgdmFsdWVzCi0gICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNDZWxsKik7CisgICAgc3Rh
dGljIEhlYXAqIGhlYXAoY29uc3QgSGVhcENlbGwqKTsKIAogICAgIC8vIFRoaXMgY29uc3RhbnQg
ZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mgd2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBvZiBv
dXIgCiAgICAgLy8gZGVhZGxpbmUgd2hlbiBjYWxsaW5nIEhlYXA6OmlzUGFnZWRPdXQuIERlY3Jl
YXNpbmcgaXQgd2lsbCBjYXVzZSB1cyB0byBkZXRlY3QgCkBAIC0xNTAsNyArMTUwLDExIEBAIHB1
YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0
cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3Io
Ynl0ZXMpOyB9CiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVz
dHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFs
bG9jYXRvckZvcihieXRlcyk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IE1h
cmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcyk7Cisg
ICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRl
cykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9
CiAgICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9y
YWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KKyAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlh
cnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeVJlYWxsb2Nh
dGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qg
b2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRl
U3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVj
a2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZv
aWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgdm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBi
b29sIEhlYXA6OmlzQ29sbGVjdGluZygpCiAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxl
Y3Rpb247CiB9CiAKLWlubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkK
K2lubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIHJl
dHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKIH0KQEAgLTE5OSw3ICsx
OTksNyBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLXZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZU
eXBlKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlw
ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9i
amVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNE
ZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0
aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkg
fHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6
dmFsdWUpKTsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9m
VHlwZShzaXplX3QgCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLU1hcmtlZFNw
YWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQoraW5saW5lIE1h
cmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQogewog
ICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRo
IG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lgog
ICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpT
dHJ1Y3R1cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGli
bGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMjEsNyAr
MjIxLDcgQEAgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvcgogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci1NYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9j
YXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgTWFya2VkQWxsb2NhdG9y
JiBIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogewogICAgIC8v
IEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1h
bCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFT
U0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1
cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xh
c3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMzEsNiArMjMxLDM3
IEBAIE1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWMKICAgICByZXR1cm4g
YWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYnl0ZXMpOwogfQogCitpbmxpbmUg
dm9pZCogSGVhcDo6YWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXpl
X3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZUF1
eGlsaWFyeShieXRlcyk7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRh
TG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVw
LlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShpbnRlbmRlZE93bmVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu
bGluZSB2b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNwYWNlLnRy
eUFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5H
KQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5
IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxs
KiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpCit7CisgICAgdm9pZCogbmV3QmFzZSA9IHRyeUFsbG9jYXRlQXV4aWxpYXJ5KGludGVu
ZGVkT3duZXIsIG5ld1NpemUpOworICAgIGlmICghbmV3QmFzZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2UsIG9sZFNpemUpOworICAgIHJldHVy
biBuZXdCYXNlOworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVT
dG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRy
KQogewogICAgIENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9j
YXRlKGJ5dGVzLCBvdXRQdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBi
bG9jay0+ZGlkUmV0aXJlQmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3Qg
Ynl0ZXMpCiB7CiAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRCbG9jayA9PSBtX25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAg
aW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFk
OwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qg
Ynl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRD
b2xsZWN0aW5nKHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkp
OwogICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2
b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0
ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFw
LT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0
IHx8ICFtX2N1cnJlbnRCbG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0g
dHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWls
dXJlKTsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNp
emVfdCBieXRlcykKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0
dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3Zv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBi
b29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQo
KTsKIApAQCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKAogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRp
ZEFsbG9jYXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRy
eUFsbG9jYXRlKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRD
b2xsZWN0aW5nKGJ5dGVzKTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwor
ICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAg
ICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgQVNTRVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxv
Y2sqIGJsb2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAg
ICBNYXJrZWRCbG9jayogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAo
IWJsb2NrKSB7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJl
c3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhv
dXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1NYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNp
emVfdCBieXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxv
Y2soc2l6ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9j
azo6YmxvY2tTaXplOwogICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykp
ICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMp
OwpAQCAtMTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9j
YXRlQmwKIAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDog
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwog
Ci0gICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXpl
LCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNy
ZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwog
fQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0
cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVz
dHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4g
bV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsK
QEAgLTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFs
bG9jYXRlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7Cisg
ICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJl
KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAg
dm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lk
KiB0cnlQb3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2Nr
KHNpemVfdCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZv
aWQgcmV0aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBA
IC0xMTMsMjEgKzExNiwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVh
cCogCiAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJs
b2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFko
IWhlYWQpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0
ZXMpOworICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAg
ICBtZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAg
cmV0dXJuIGhlYWQ7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRl
KHNpemVfdCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2Zy
ZWVMaXN0LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiBy
ZXN1bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAg
IG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0g
aGVhZC0+bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVz
KTsKLSNlbmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVh
ZCwgMHhDRCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDE0ICszNSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29sIGNv
bXB1dGVCYWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtlZEJs
b2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9y
QXR0cmlidXRlcyYgYXR0cmlidXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5Q3Jl
YXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRl
cykKIHsKICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5jZSsrOwogICAg
ICAgICBpZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxv
Y2sgQmFsYW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtlZEJsb2NrKiBi
bG9jayA9IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0
eSkpIE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVz
KTsKKyAgICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXpl
LCBjYXBhY2l0eSk7CisgICAgaWYgKCFibG9ja1NwYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1h
cmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKICAg
ICBoZWFwLmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJldHVybiBibG9jazsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgbXV0YWJsZSBSZXR1cm5UeXBlIG1fY291bnQ7CiAgICAgICAgIH07CiAKLSAgICAgICAgc3Rh
dGljIE1hcmtlZEJsb2NrKiBjcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvciosIHNpemVfdCBj
YXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7Cisg
ICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogdHJ5Q3JlYXRlKEhlYXAmLCBNYXJrZWRBbGxvY2F0
b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0
cmlidXRlcyYpOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEhlYXAmLCBNYXJrZWRCbG9j
ayopOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzQXRvbUFsaWduZWQoY29uc3Qgdm9pZCopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAy
MDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiBhbGxvY2F0ZVdp
dGhEZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3Rv
cihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKIAogICAgIFN1YnNwYWNlJiBzdWJzcGFj
ZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlOyB9
CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKCkgeyBy
ZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpAQCAtMTgyLDYgKzE4MywxMSBAQCBpbmxpbmUgdm9pZCog
TWFya2VkU3BhY2U6OmFsbG9jYXRlQXV4aWxpCiAgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRv
ckZvcihieXRlcykuYWxsb2NhdGUoYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkU3Bh
Y2U6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gYXV4
aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS50cnlBbGxvY2F0ZShieXRlcyk7Cit9CisKIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJs
b2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgZm9yRWFjaFN1YnNwYWNlKApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDE1IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFRvTWFya1N0YWNrKEpTQ2UKICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRO
b2RlKGNlbGwpOwogfQogCit2b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZv
aWQqIGJhc2UpCit7CisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBtX2J5dGVzVmlzaXRl
ZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoYmFzZSktPmNlbGxTaXplKCk7Cit9CisKIGNsYXNz
IFNldEN1cnJlbnRDZWxsU2NvcGUgewogcHVibGljOgogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDYgKzEwNSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNl
cygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIAor
ICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0
aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KKyAgICAvLyB0aGlzIHRo
ZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgorICAgIHZvaWQgbWFya0F1
eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAogICAgIHZvaWQgY29weUxhdGVyKEpTQ2VsbCos
IENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNp
b24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4
dHJhY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDQgKzkxLDMgQEAgaW50IG1haW4oaW50
LCBjaGFyKiopCiAgICAgcmV0dXJuIDA7CiB9CiAKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworY2xhc3MgVk07CisKKy8vIEFuIEF1eGlsaWFy
eSBiYXJyaWVyIGlzIGEgYmFycmllciB0aGF0IGRvZXMgbm90IHRyeSB0byByZWFzb24gYWJvdXQg
dGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBpbnRvCisvLyBpdCwgb3RoZXIgdGhhbiBpbnRlcnByZXRp
bmcgYSBmYWxzaXNoIHZhbHVlIGFzIG5vdCBuZWVkIGEgYmFycmllci4gSXQncyBPSyB0byB1c2Ug
dGhpcyBmb3IgZWl0aGVyCisvLyBKU0NlbGxzIG9yIGFueSBvdGhlciBraW5kIG9mIGRhdGEsIHNv
IGxvbmcgYXMgaXQgcmVzcG9uZHMgdG8gb3BlcmF0b3IhKCkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorY2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CitwdWJsaWM6CisgICAgQXV4aWxpYXJ5QmFycmll
cigpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQXV4aWxpYXJ5QmFy
cmllcihWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1
ZSA9IFQoKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXQo
Vk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIGNvbnN0IFQmIGdldCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBzbG90KCkgeyByZXR1cm4gJm1fdmFsdWU7IH0K
KyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3Zh
bHVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHNldFdpdGhv
dXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsg
fQorICAgIAorcHJpdmF0ZToKKyAgICBUIG1fdmFsdWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmll
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVT4KK0F1eGlsaWFyeUJhcnJpZXI8VD46OkF1
eGlsaWFyeUJhcnJpZXIoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVJiYgdmFsdWUpCit7CisgICAg
bV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJp
ZXIob3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUg
VT4KK3ZvaWQgQXV4aWxpYXJ5QmFycmllcjxUPjo6c2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
VSYmIHZhbHVlKQoreworICAgIG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOworICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVzLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTAgKzM3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFs
aXplZChWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewotICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90
IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgc2l6ZSwgJnRlbXAp
KTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uaGVhcC5hbGxvY2F0ZUF1eGls
aWFyeShpbnRlbmRlZE93bmVyLCBzaXplKTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21C
YXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC0xMTksNyArMTE4LDggQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5
Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNp
dHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHks
IGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAg
c2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICghdm0uaGVhcC50cnlSZWFsbG9j
YXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCAmdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisg
ICAgdGhlQmFzZSA9IHZtLmhlYXAudHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVy
LCB0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICBpZiAoIXRoZUJhc2UpCiAgICAgICAg
IHJldHVybiAwOwogICAgIHJldHVybiBmcm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFj
aXR5KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw4IEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBo
b3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24g
MnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGgg
PSBtaW4ob2xkVmVjdG9yTGVuZ3RoLCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVjdG9yTGVu
Z3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRoYXQgcmVx
dWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBmYXNo
aW9uLgogICAgIGlmIChjb3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2VkVmVj
dG9yTGVuZ3RoKQpAQCAtMjc5LDcgKzI4MCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UoVk0mIHYKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFj
aXR5OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KGRlc2lyZWRDYXBhY2l0eSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKHRoaXMsIG5ld1NpemUsICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICBuZXdBbGxvY0Jhc2Ug
PSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KHRoaXMsIG5ld1NpemUpOworICAgICAgICBp
ZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3
U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwogICAgIH0KQEAgLTMxNCwxMiArMzE2
LDEyIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICB9IGVs
c2UgaWYgKChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSh2bSkpKSB8
fCAobmV3SW5kZXhCaWFzICE9IHN0b3JhZ2UtPm1faW5kZXhCaWFzKSkgewogICAgICAgICBtZW1t
b3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIGJ1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1ZhbHVlKSAq
IHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNp
emVGb3IoMCkpOwogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yLCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rv
ckxlbmd0aCk7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBuZXdWZWN0b3IgPSBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7IGkrKykK
LSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogbmV3VmVjdG9yID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3I7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdXNlZFZlY3Rvckxlbmd0aDsgaSA8IG5l
d1ZlY3Rvckxlbmd0aDsgaSsrKQorICAgICAgICBuZXdWZWN0b3JbaV0uY2xlYXIoKTsKKwogICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JM
ZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0g
bmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2
bSwgbmV3QnV0dGVyZmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE5MSw4ICsxOTEsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBj
cmVhdGVBcnJheUJ1dHRlcmZseShWCiAgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCAwLCAwLCB0
cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwKICAgICAgICAg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOwogICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgc3RvcmFnZS0+bV9p
bmRleEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgc3Rv
cmFnZS0+bV9pbmRleEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSAwOwogICAgIHJldHVybiBidXR0ZXJmbHk7CiB9CkBAIC0yNDIsMjAgKzI0MiwyMyBAQCBpbmxp
bmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgICAgICAgICB8fCBoYXNE
b3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgIHx8IGhhc0NvbnRp
Z3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogCi0gICAgICAgIHZvaWQqIHRlbXA7
Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIGlmICghdGVtcCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21C
YXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwogICAgICAgICBidXR0ZXJmbHktPnNldFZl
Y3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChpbml0aWFsTGVuZ3RoKTsKICAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExl
bmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYg
KCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBv
dXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB2b2lkKiB0ZW1wID0g
dm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6
ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9y
TGVuZ3RoKSkpOworICAgICAgICBpZiAoIXRlbXApCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRP
ZkxpbmVTdG9yYWdlKTsKICAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGlu
ZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3NyArODgsNiBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRl
cmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCi17Ci0gICAgQVNTRVJUKGJ1dHRl
cmZseSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUo
KTsKLSAgICAKLSAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKLSAgICBzaXplX3QgcHJlQ2FwYWNpdHk7Ci0gICAgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzOwotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0aGlz
LT5oYXNJbmRleGluZ0hlYWRlcigpOwotICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRl
cikpIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkt
PnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhzdHJ1Y3R1cmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gMDsK
LSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLSAgICBzaXpl
X3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkoYnV0dGVyZmx5LT5iYXNl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSkpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0
aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotCi0gICAgICAgIC8vIENvcHkgdGhl
IHByb3BlcnRpZXMuCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3
QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1
cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykKLSAgICAgICAgICAgICgtLWN1
cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKCgtLWN1cnJlbnRTb3VyY2UpLT5n
ZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIp
KSB7Ci0gICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRl
cmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ29w
eSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldDsKLSAgICAgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZTsKLSAgICAgICAgICAgIHNpemVfdCBjb3VudDsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkg
ewotICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNh
c2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxF
X0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1
dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50U291
cmNlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gbmV3QnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwot
ICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY291bnQgPSBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IDA7Ci0gICAgICAgICAgICAg
ICAgY3VycmVudFNvdXJjZSA9IDA7Ci0gICAgICAgICAgICAgICAgY291bnQgPSAwOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtZW1jcHkoY3Vy
cmVudFRhcmdldCwgY3VycmVudFNvdXJjZSwgY291bnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dEJh
cnJpZXIobmV3QnV0dGVyZmx5KTsKLSAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+
YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7Ci0g
ICAgfSAKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShT
bG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogewogICAgIEFTU0VSVChidXR0ZXJmbHkpOwpAQCAtMTc1LDEzICsxMDQsMTYgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICBwcmVDYXBh
Y2l0eSA9IDA7CiAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKICAgICB9
Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgIAorICAgIEhlYXBDZWxsKiBiYXNlID0gYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4oYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
KSk7CisKKyAgICBBU1NFUlQoSGVhcDo6aGVhcChiYXNlKSA9PSB2aXNpdG9yLmhlYXAoKSk7CiAK
KyAgICAvLyBLZWVwIHRoZSBidXR0ZXJmbHkgYWxpdmUuCisgICAgdmlzaXRvci5tYXJrQXV4aWxp
YXJ5KGJhc2UpOworICAgIAogICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCiAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3Jh
Z2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgdmlzaXRvci5jb3B5TGF0ZXIoCi0gICAgICAgIHRo
aXMsIEJ1dHRlcmZseUNvcHlUb2tlbiwKLSAgICAgICAgYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKICAgICAKICAgICAvLyBN
YXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5n
VHlwZSgpKSB7CkBAIC0yMjUsMTkgKzE1Nyw2IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWwKICNlbmRpZgogfQogCi12b2lkIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0
b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikK
LXsKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLQotICAg
IGlmICh0b2tlbiAhPSBCdXR0ZXJmbHlDb3B5VG9rZW4pCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgp
OwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPmNvcHlCdXR0ZXJmbHko
dmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6
ZSgpKTsKLX0KLQogdm9pZCBKU09iamVjdDo6aGVhcFNuYXBzaG90KEpTQ2VsbCogY2VsbCwgSGVh
cFNuYXBzaG90QnVpbGRlciYgYnVpbGRlcikKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtODA3LDYgKzcyNiw4IEBAIENvbnRpZ3VvdXNK
U1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhl
ZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAg
bmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0
aW9uOjpBbGxvY2F0ZUludDMyKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5l
d1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250
aWd1b3VzSW50MzIoKTsKQEAgLTgyNyw2ICs3NDgsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZt
LCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29u
dGlndW91cyk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUs
IG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOwpA
QCAtODQ5LDYgKzc3Miw4IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3Rv
cmEKICAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgcmVzdWx0LT5tX251bVZh
bHVlc0luVmVjdG9yID0gMDsKICAgICByZXN1bHQtPm1faW5kZXhCaWFzID0gMDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gdmVjdG9yTGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPm1fdmVjdG9y
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUsIHN0cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODYyLDYgKzc4NywxMSBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNv
bnZlcnRVbmRlY2lkZWRUb0ludDMyKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVk
KGluZGV4aW5nVHlwZSgpKSk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0
aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOworCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVyZmx5Lmdl
dCgpLT5jb250aWd1b3VzSW50MzIoKTsKIH0KQEAgLTg4MSw2ICs4MTEsMTEgQEAgQ29udGlndW91
c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlYwogQ29udGlndW91c0pTVmFsdWVzIEpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkKIHsKICAgICBBU1NFUlQo
aGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2
bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5v
blByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7CiB9CkBAIC05MTcsNyArODUyLDkgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogCiAgICAgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRD
b3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgLy8gTm8gbmVlZCB0byBjb3B5
IGVsZW1lbnRzLgorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaS0t
OykKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihK
U1ZhbHVlKCkpOwogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwog
ICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5i
dXR0ZXJmbHkoKSk7CkBAIC05NjYsMTMgKzkwMywxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJm
bHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9
IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0s
IHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsg
aSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdl
dCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAg
ICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHko
KSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpA
QCAtMTAxNCwxMyArOTQ5LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3Vi
bGVUb0EKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVj
dG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29u
dmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3Ro
KTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAg
ICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAg
ICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91
YmxlLCB2YWx1ZSkpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7Cisg
ICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3
U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0xMDQxLDEzICs5NzQsMTEgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJh
eVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRo
b3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAg
IG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAg
ICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Cisg
ICAgICAgIGlmICh2KQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTI3NTQsNiArMjY4NSw4IEBAIGJvb2wgSlNPYmplY3Q6
OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3Ro
KSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JM
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgICAgICBzZXRCdXR0ZXJmbHlX
aXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMjc2OCw2ICsyNzAxLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0
b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8
IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRl
cmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKQEAgLTI3OTks
OCArMjczNCwxMiBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAK
ICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAg
ICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47Cisg
ICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwg
bmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgfQorCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSAi
QXJnTGlzdC5oIgogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJBcnJh
eVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQnV0
dGVyZmx5LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgi
CiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJDb3B5QmFycmllci5o
IgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIK
ICNpbmNsdWRlICJIZWFwLmgiCkBAIC0xMDMsNyArMTAzLDYgQEAgcHVibGljOgogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5QmFja2lu
Z1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBoZWFwU25hcHNob3QoSlNDZWxsKiwgSGVhcFNuYXBzaG90QnVp
bGRlciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUo
Y29uc3QgSlNPYmplY3QqKTsKQEAgLTc5Nyw3ICs3OTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNP
YmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgIHZv
aWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsK
LSAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qg
c3RvcmFnZVNpemUpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9i
amVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhp
cyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC05NDksNyArOTQ3LDcgQEAgcHJpdmF0ZToKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3co
Vk0mKTsKIAogcHJvdGVjdGVkOgotICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJm
bHk7CisgICAgQXV4aWxpYXJ5QmFycmllcjxCdXR0ZXJmbHkqPiBtX2J1dHRlcmZseTsKICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3BhZGRpbmc7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpZm5kZWYgSlNP
YmplY3RJbmxpbmVzX2gKICNkZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkF1
eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJK
U09iamVjdC5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpJbmRleDogU291cmNlL1dURi93dGYvRmFz
dE1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA1LTIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTEsIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJl
IG1ldDoKQEAgLTk3LDYgKzk2LDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBh
bGlnbm1lbnQKICAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7CiB9
CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplKSAKK3sKKyAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7Cit9
CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIF9hbGlnbmVkX2ZyZWUo
cCk7CkBAIC0xMTEsNiArMTE1LDEzIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBh
bGlnbm1lbnQKICAgICByZXR1cm4gcDsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Mo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHZvaWQqIHAgPSBudWxscHRy
OworICAgIHBvc2l4X21lbWFsaWduKCZwLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBw
OworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBmcmVlKHApOwpA
QCAtMjMxLDYgKzI0MiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25t
ZW50CiAgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6bWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsK
IH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpIAoreworICAgIHJldHVybiBibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKGFsaWdubWVu
dCwgc2l6ZSk7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIGJt
YWxsb2M6OmFwaTo6ZnJlZShwKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlzaW9uIDIwMzY5
OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTUzLDYgKzUzLDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEZyZWUodm9p
ZCopOwogCiAvLyBBbGxvY2F0aW9ucyBmcm9tIGZhc3RBbGlnbmVkTWFsbG9jKCkgbXVzdCBiZSBm
cmVlZCB1c2luZyBmYXN0QWxpZ25lZEZyZWUoKS4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiBm
YXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCopOwogCiBX
VEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqKTsKQEAg
LTEwNyw2ICsxMDgsNyBAQCB1c2luZyBXVEY6OmZhc3RNYWxsb2NTaXplOwogdXNpbmcgV1RGOjpm
YXN0UmVhbGxvYzsKIHVzaW5nIFdURjo6ZmFzdFN0ckR1cDsKIHVzaW5nIFdURjo6ZmFzdFplcm9l
ZE1hbGxvYzsKK3VzaW5nIFdURjo6dHJ5RmFzdEFsaWduZWRNYWxsb2M7CiB1c2luZyBXVEY6OnRy
eUZhc3RDYWxsb2M7CiB1c2luZyBXVEY6OnRyeUZhc3RNYWxsb2M7CiB1c2luZyBXVEY6OnRyeUZh
c3RaZXJvZWRNYWxsb2M7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsMTggQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZShzaXplX3Qgc2l6ZQogCiB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKQogeworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0cnVl
OworICAgIHJldHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVy
ZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IHNpemUpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOworICAgIHJl
dHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisK
K3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplLCBib29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFs
aWdubWVudCkpOwogCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJsZWQpIHsKQEAgLTgwLDcgKzky
LDEwIEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICAgICAg
cmV0dXJuIGFsbG9jYXRlKHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplKSk7CiAK
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6
bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmFs
bG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICBIZWFwKiBoZWFwID0gUGVy
UHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisg
ICAgICAgIHJldHVybiBoZWFwLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7
CisgICAgcmV0dXJuIGhlYXAtPnRyeUFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXpl
KTsKIH0KIAogdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90
IG5ld1NpemUpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQzLDEyICs0MywxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXpl
X3QpOwogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7CiAK
ICAgICB2b2lkIHNjYXZlbmdlKCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCogYWxsb2NhdGVJbXBs
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgCiAg
ICAgYm9vbCBhbGxvY2F0ZUZhc3RDYXNlKHNpemVfdCwgdm9pZComKTsKICAgICB2b2lkKiBhbGxv
Y2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQqIHRyeUFs
bG9jYXRlKHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAg
c3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAg
c3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUo
dm9pZCosIHNpemVfdCk7CkBAIC03OSw2ICs4MCwxNCBAQCBpbmxpbmUgdm9pZCogQ2FjaGU6OmFs
bG9jYXRlKHNpemVfdCBzaXplCiAgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS5hbGxvY2F0
ZShzaXplKTsKIH0KIAoraW5saW5lIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2Fj
aGU+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBhbGxv
Y2F0ZVNsb3dDYXNlTnVsbENhY2hlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGNhY2hl
LT5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiBpbmxpbmUg
dm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewog
ICAgIENhY2hlKiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMsMTIg
QEAgaW5saW5lIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkKICAgICByZXR1cm4gQ2FjaGU6OmFs
bG9jYXRlKHNpemUpOwogfQogCisvLyBSZXR1cm5zIG51bGwgb24gZmFpbHVyZS4KK2lubGluZSB2
b2lkKiB0cnlNZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBy
ZXR1cm4gQ2FjaGU6OnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Cit9CisKIC8vIENyYXNo
ZXMgb24gZmFpbHVyZS4KIGlubGluZSB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBz
aXplX3Qgc2l6ZSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284705</attachid>
            <date>2016-07-27 09:58:52 -0700</date>
            <delta_ts>2016-07-27 10:58:15 -0700</delta_ts>
            <desc>passing so many tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82472</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA2Nyw5ICs0MDY3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRF
bmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5oZWFwLnN1YnNwYWNl
Rm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAg
ICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFp
bENhc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9v
dXQuc3ViKGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgTFZhbHVlIGJ1
dHRlcmZseSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUg
b2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZh
aWxDYXNlKTsKICAgICAgICAgICAgIApAQCAtNjk0NywxMSArNjk0OSwxMyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3Jh
Z2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIExW
YWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgp
LCBidXR0ZXJmbHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
KTsKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5h
ZGQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6ZSkpOworICAgICAg
ICAgICAgICAgICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5n
dGgsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsK
ICAgICAgICAgICAgICAgICAKQEAgLTc3NDUsMTAgKzc3NDksMTEgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgaW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwg
TFZhbHVlIHZlY3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAgICAgIGlm
ICghaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBhbHJl
YWR5IGluaXRpYWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYg
KGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0
SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkp
OwogCiAgICAgICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFOLgogICAg
ICAgICBMQmFzaWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03NzYzLDkg
Kzc3NjgsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkoSW50
MzIsIG9yaWdpbmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LnBoaShw
b2ludGVyVHlwZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQu
c3RvcmU2NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291dC5zdG9y
ZTY0KGhvbGUsIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0
QW55SW5kZXgoKSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5leHRJbmRl
eCA9IG1fb3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291dC5hZGRJ
bmNvbWluZ1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03ODI2LDEy
ICs3ODI5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQo
Ci0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNW
YWx1ZSkpLCBzbG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUlu
VmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9j
YXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5j
b25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1f
b3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZT
dG9yYWdlKSk7CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUlu
Qnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC04NDAx
LDcgKzg0MDUsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwog
ICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2lj
QmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9j
YXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBz
dWNjZXNzID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAKQEAgLTg0MzYsNyArODQ0MCw3IEBAIHBy
aXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIExW
YWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CisgICAgICAg
IExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgpOwog
ICAgICAgICBzdG9yZVN0cnVjdHVyZShyZXN1bHQsIHN0cnVjdHVyZSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtODQ2NCw0NiArODQ2OCw1NCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgwKSwgc3RydWN0dXJlLCBidXR0ZXJmbHks
IHNsb3dQYXRoKTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBl
PgotICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCi0gICAgICAgIExWYWx1
ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxv
Y2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoTFZhbHVlIHN1YnNwYWNl
LCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBzdGF0
aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtlZFNwYWNlOjpwcmVj
aXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIg
b2YgdHdvLiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OmltcHJlY2lz
ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6
aW1wcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogCi0gICAgICAgIExWYWx1
ZSBzdWJzcGFjZSA9IG1fb3V0LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vic3BhY2VGb3JPYmpl
Y3RPZlR5cGU8Q2xhc3NUeXBlPigpKTsKLSAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIHNt
YWxsQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgbGFy
Z2VPck92ZXJzaXplQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2lj
QmxvY2sgbGFyZ2VDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAKLSAgICAgICAg
TFZhbHVlIHVwcm91bmRlZFNpemUgPSBtX291dC5hZGQoc2l6ZSwgbV9vdXQuY29uc3RJbnQzMihN
YXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgLSAxKSk7Ci0gICAgICAgIExWYWx1ZSBpc1NtYWxsID0g
bV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihNYXJrZWRTcGFjZTo6
cHJlY2lzZUN1dG9mZikpOworICAgICAgICBMVmFsdWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFk
ZChzaXplLCBtX291dC5jb25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgLSAxKSk7
CisgICAgICAgIExWYWx1ZSBpc1NtYWxsID0gbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9v
dXQuY29uc3RJbnRQdHIoTWFya2VkU3BhY2U6OnByZWNpc2VDdXRvZmYpKTsKICAgICAgICAgbV9v
dXQuYnJhbmNoKGlzU21hbGwsIHVuc3VyZShzbWFsbENhc2VCbG9jayksIHVuc3VyZShsYXJnZU9y
T3ZlcnNpemVDYXNlQmxvY2spKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oc21hbGxDYXNlQmxvY2ssIGxhcmdlT3JPdmVyc2l6ZUNhc2VC
bG9jayk7CiAgICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAog
ICAgICAgICAgICAgbV9oZWFwcy5NYXJrZWRTcGFjZV9TdWJzcGFjZV9wcmVjaXNlQWxsb2NhdG9y
cywgc3Vic3BhY2UsCi0gICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKG1fb3V0LmxTaHIodXBy
b3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNp
c2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0
LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCkpKSk7CiAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsQWxsb2NhdG9yID0gbV9vdXQuYW5jaG9yKGFkZHJlc3Mu
dmFsdWUoKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9jaywgbGFyZ2VDYXNl
QmxvY2spOwogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5iZWxvdyh1
cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjppbXByZWNpc2VDdXRv
ZmYpKSwKKyAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0
SW50UHRyKE1hcmtlZFNwYWNlOjppbXByZWNpc2VDdXRvZmYpKSwKICAgICAgICAgICAgIHVzdWFs
bHkobGFyZ2VDYXNlQmxvY2spLCByYXJlbHkoc2xvd1BhdGgpKTsKICAgICAgICAgCiAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGxhcmdlQ2FzZUJsb2NrLCBjb250aW51YXRpb24pOwogICAgICAgICBh
ZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgbV9oZWFwcy5NYXJrZWRTcGFj
ZV9TdWJzcGFjZV9pbXByZWNpc2VBbGxvY2F0b3JzLCBzdWJzcGFjZSwKLSAgICAgICAgICAgIG1f
b3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMy
KGdldExTQlNldChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCkpKSkpOworICAgICAgICAgICAg
bV9vdXQubFNocih1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJr
ZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCkpKSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdl
QWxsb2NhdG9yID0gbV9vdXQuYW5jaG9yKGFkZHJlc3MudmFsdWUoKSk7CiAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gbV9vdXQu
cGhpKHBvaW50ZXJUeXBlKCksIHNtYWxsQWxsb2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7Ci0gICAg
ICAgIAorICAgICAgICByZXR1cm4gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIHNtYWxsQWxsb2Nh
dG9yLCBsYXJnZUFsbG9jYXRvcik7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0b3JG
b3JTaXplKE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXplLCBMQmFz
aWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JTaXpl
KG1fb3V0LmNvbnN0SW50UHRyKCZzdWJzcGFjZSksIHNpemUsIHNsb3dQYXRoKTsKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgorICAgIExWYWx1ZSBhbGxvY2F0
ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCisgICAgICAgIExWYWx1ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgewor
ICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAg
IHZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9mVHlwZTxDbGFzc1R5cGU+KCksIHNpemUsIHNs
b3dQYXRoKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KGFsbG9jYXRvciwgc3RydWN0
dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCkBAIC04NTkwLDI2ICs4NjAy
LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIG51bUVsZW1lbnRzKTsKICAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgK
LSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxl
bmd0aCArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLAotICAgICAgICAgICAgc2xvd1BhdGgpOwor
ICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JG
b3JBdXhpbGlhcnlEYXRhKAorICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVu
Z3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3Rv
cmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciksIHNs
b3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIo
Ci0gICAgICAgICAgICBlbmRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1Zh
bHVlKSAqIHZlY3Rvckxlbmd0aCkpOworICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQu
YWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8
SlNBcnJheT4oCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOwor
ICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJl
LCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIo
bV9vdXQuY29uc3RJbnQzMihudW1FbGVtZW50cyksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJm
bHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMy
KHZlY3Rvckxlbmd0aCksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3Ro
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwg
dmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAg
ICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQ
TmFOKSksCi0gICAgICAgICAgICAgICAgICAgIGJ1dHRlcmZseSwgbV9oZWFwcy5pbmRleGVkRG91
YmxlUHJvcGVydGllc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKworICAgICAgICBM
VmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxp
bnQ2NF90PihQTmFOKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IG1fb3V0LnN0b3JlNjQoaG9sZSwgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9w
ZXJ0aWVzW2ldKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBBcnJheVZhbHVlcyhvYmplY3Qs
IGJ1dHRlcmZseSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
eVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRv
a2VuLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDYgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgQnV0dGVyZmx5Q29weVRva2VuLAog
ICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0b3JlQ29weVRv
a2VuLAogICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTIgKzU5OCw2
IEBAIHZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5V29ya0xpc3QmIHdvcmtMaXN0ID0gYmxv
Y2stPndvcmtMaXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENvcHlXb3JrbGlz
dEl0ZW0gaXRlbSA6IHdvcmtMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGl0ZW0udG9rZW4oKSA9PSBCdXR0ZXJmbHlDb3B5VG9rZW4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3IsIEJ1dHRlcmZs
eUNvcHlUb2tlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKS0+bWV0aG9kVGFibGUo
KS0+Y29weUJhY2tpbmdTdG9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRl
bS5jZWxsKCksIGNvcHlWaXNpdG9yLCBpdGVtLnRva2VuKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjAzNjk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVu
ZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwogICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0
IEpTVmFsdWUpOyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCi0gICAgc3RhdGljIEhlYXAqIGhl
YXAoY29uc3QgSlNDZWxsKik7CisgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSGVhcENlbGwq
KTsKIAogICAgIC8vIFRoaXMgY29uc3RhbnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mgd2Ug
aXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBvZiBvdXIgCiAgICAgLy8gZGVhZGxpbmUgd2hlbiBjYWxs
aW5nIEhlYXA6OmlzUGFnZWRPdXQuIERlY3JlYXNpbmcgaXQgd2lsbCBjYXVzZSB1cyB0byBkZXRl
Y3QgCkBAIC0xNTAsNyArMTUwLDExIEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4g
bV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgTWFya2VkQWxsb2NhdG9y
JiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2Jq
ZWN0T2ZUeXBlKHNpemVfdCBieXRlcyk7CisgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JG
b3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhp
bGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdl
QWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KKyAgICB2
b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXpl
X3QpOworICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93
bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAg
IENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIs
IHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFn
ZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZv
aWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMDM2OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBib29sIEhlYXA6OmlzQ29sbGVjdGluZygpCiAgICAg
cmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb247CiB9CiAKLWlubGluZSBIZWFwKiBIZWFw
OjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKK2lubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0
IEhlYXBDZWxsKiBjZWxsKQogewogICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2Vs
bCktPmhlYXAoKTsKIH0KQEAgLTE5OSw3ICsxOTksNyBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxs
b2NhdGVXaXRob3V0RGVzdHJ1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLXZv
aWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lk
KiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlND
ZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRl
c3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJU
KCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZs
YWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5
cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2
b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENsYXNzVHlwZT4KLU1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VG
b3JPYmplY3RPZlR5cGUoKQoraW5saW5lIE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vi
c3BhY2VGb3JPYmplY3RPZlR5cGUoKQogewogICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhw
ZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBm
cm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNE
ZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1t
b3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9i
amVjdD46OnZhbHVlKSk7CkBAIC0yMjEsNyArMjIxLDcgQEAgTWFya2VkU3BhY2U6OlN1YnNwYWNl
JiBIZWFwOjpzdWJzcGFjZUZvcgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci1N
YXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0
ZXMpCitpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RPZlR5
cGUoc2l6ZV90IGJ5dGVzKQogewogICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBv
YmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVj
dGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwp
IHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46
OnZhbHVlKSk7CkBAIC0yMzEsNiArMjMxLDM3IEBAIE1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxs
b2NhdG9yRm9yT2JqZWMKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3Ry
dWN0b3IoYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVBdXhpbGlhcnko
SlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0
ID0gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZUF1eGlsaWFyeShieXRlcyk7CisjaWYgRU5BQkxFKEFM
TE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5
dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsIHJl
c3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKKyNlbmRpZgor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUF1
eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lk
KiByZXN1bHQgPSBtX29iamVjdFNwYWNlLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNp
ZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2Nh
dGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5k
ZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIp
OworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRy
eVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNl
LCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgdm9pZCogbmV3QmFzZSA9
IHRyeUFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIG5ld1NpemUpOworICAgIGlmICgh
bmV3QmFzZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgbWVtY3B5KG5ld0Jhc2UsIG9s
ZEJhc2UsIG9sZFNpemUpOworICAgIHJldHVybiBuZXdCYXNlOworfQorCiBpbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwg
c2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewogICAgIENoZWNrZWRCb29sZWFuIHJlc3Vs
dCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lv
biAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9y
OjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+ZGlkUmV0aXJlQmxvY2soZnJlZUxpc3Qp
OwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcihz
aXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdp
dGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMpCiB7CiAgICAgaWYgKG1fY3VycmVudEJs
b2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayA9PSBtX25leHRCbG9ja1RvU3dl
ZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCBieXRlcykKIHsKICAg
ICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblBy
b2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBl
cihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGlu
Z0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09w
ZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFtX2N1cnJlbnRCbG9jayk7CkBAIC0xNDgs
NiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGUKIAog
dm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKIHsK
KyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbG93
Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKK3sKKyAgICBib29sIGNyYXNo
T25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVz
LCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVT
bG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBib29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEFT
U0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAg
IGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKIApAQCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKAogICAgIEFTU0VSVCghbV9mcmVl
TGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwog
ICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAKICAgICBp
ZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAg
ICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkpIHsKLSAgICAgICAgcmVz
dWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdp
dGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgQVNTRVJUKCFtX2hlYXAtPnNob3VsZENvbGxl
Y3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0gYWxsb2NhdGVCbG9jayhieXRl
cyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSB0cnlBbGxv
Y2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAoIWJsb2NrKSB7CisgICAgICAgIGlmIChjcmFzaE9u
RmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAgICBhZGRCbG9j
ayhibG9jayk7CiAgICAgICAgIAotICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAg
ICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NF
UlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1NYXJrZWRCbG9jayogTWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBieXRlcykKK01hcmtlZEJsb2NrKiBNYXJr
ZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2soc2l6ZV90IGJ5dGVzKQogewogICAgIHNpemVf
dCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9jazo6YmxvY2tTaXplOwogICAgIHNpemVfdCBtaW5B
bGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRv
bVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1h
cmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwpAQCAtMTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJs
b2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmwKIAogICAgIHNpemVfdCBjZWxsU2l6ZSA9
IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDogV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtl
ZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwogCi0gICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVh
dGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAg
ICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNyZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUs
IGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwogfQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRk
QmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2
ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2lu
ZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQogICAg
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsK
ICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2sqIHRh
a2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsKQEAgLTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6CiAg
ICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2Fz
ZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5
QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlB
bGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwo
c2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhv
dXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVj
dGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lkKiB0cnlQb3BGcmVlTGlzdChzaXplX3QpOwotICAg
IE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNpemVfdCk7CisgICAgTWFya2VkQmxvY2sqIHRy
eUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29s
bGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZvaWQgcmV0aXJlKE1hcmtlZEJsb2NrKiwgTWFya2Vk
QmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBAIC0xMTMsMjEgKzExNiwzNSBAQCBpbmxpbmUgdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogCiAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmli
dXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6
ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxp
c3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKSB7CisgICAgICAgIHZvaWQqIHJlc3Vs
dCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOworICAgICAgICBpZiAocmVzdWx0ICYmICFB
U1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIG1fZnJlZUxpc3QuaGVh
ZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNl
dChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0dXJuIGhlYWQ7Cit9CisKIGlubGluZSB2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBieXRlcykKIHsKICAgICBNYXJrZWRC
bG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZ
KCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVz
KTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsK
LSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNl
dChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOwogICAgIHJldHVybiBo
ZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
Y3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICszNSwxNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIHN0YXRpYyBjb25zdCBib29sIGNvbXB1dGVCYWxhbmNlID0gZmFsc2U7CiBzdGF0aWMg
c2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAm
IGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVf
dCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykKK01hcmtl
ZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxs
b2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsKICAgICBpZiAoY29tcHV0ZUJhbGFuY2Up
IHsKICAgICAgICAgYmFsYW5jZSsrOwogICAgICAgICBpZiAoIShiYWxhbmNlICUgMTApKQogICAg
ICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxvY2sgQmFsYW5jZTogIiwgYmFsYW5jZSwgIlxuIik7
CiAgICAgfQotICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IG5ldyAoTm90TnVsbCwgZmFzdEFsaWdu
ZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0eSkpIE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2Fw
YWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKKyAgICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5
RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0eSk7CisgICAgaWYgKCFibG9ja1Nw
YWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBu
ZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHks
IGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKICAgICBoZWFwLmRpZEFsbG9jYXRlQmxvY2soY2FwYWNp
dHkpOwogICAgIHJldHVybiBibG9jazsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbXV0YWJsZSBSZXR1cm5UeXBlIG1fY291bnQ7
CiAgICAgICAgIH07CiAKLSAgICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiBjcmVhdGUoSGVhcCYs
IE1hcmtlZEFsbG9jYXRvciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25z
dCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7CisgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogdHJ5
Q3JlYXRlKEhlYXAmLCBNYXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBj
ZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEhlYXAmLCBNYXJrZWRCbG9jayopOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlz
QXRvbUFsaWduZWQoY29uc3Qgdm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9p
ZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRl
QXV4aWxpYXJ5KHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90
KTsKIAogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsg
cmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlOyB9CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2Jq
ZWN0c1dpdGhvdXREZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpAQCAtMTgy
LDYgKzE4MywxMSBAQCBpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlQXV4aWxpCiAg
ICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcykuYWxsb2NhdGUoYnl0ZXMpOwog
fQogCitpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVf
dCBieXRlcykKK3sKKyAgICByZXR1cm4gYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS50cnlB
bGxvY2F0ZShieXRlcyk7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUg
dm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7
CiAgICAgZm9yRWFjaFN1YnNwYWNlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDE1
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2UKICAgICAgICAgbV9o
ZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2b2lkIFNsb3RWaXNp
dG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgaWYgKEhlYXA6OnRl
c3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3Zpc2l0
Q291bnQrKzsKKyAgICBtX2J5dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoYmFz
ZSktPmNlbGxTaXplKCk7Cit9CisKIGNsYXNzIFNldEN1cnJlbnRDZWxsU2NvcGUgewogcHVibGlj
OgogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEpT
Q2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxMCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsRmluYWxpemVycygpOworICAgIAorICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJv
dXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5
b3UgZG9uJ3QgZG8KKyAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQg
ZW5kIG9mIEdDLgorICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAog
ICAgIHZvaWQgY29weUxhdGVyKEpTQ2VsbCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRP
ZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDQgKzkxLDMgQEAgaW50IG1haW4oaW50LCBjaGFyKiopCiAgICAgcmV0dXJuIDA7CiB9CiAK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJh
cnJpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
dXhpbGlhcnlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOwor
Y2xhc3MgVk07CisKKy8vIEFuIEF1eGlsaWFyeSBiYXJyaWVyIGlzIGEgYmFycmllciB0aGF0IGRv
ZXMgbm90IHRyeSB0byByZWFzb24gYWJvdXQgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBpbnRvCisv
LyBpdCwgb3RoZXIgdGhhbiBpbnRlcnByZXRpbmcgYSBmYWxzaXNoIHZhbHVlIGFzIG5vdCBuZWVk
IGEgYmFycmllci4gSXQncyBPSyB0byB1c2UgdGhpcyBmb3IgZWl0aGVyCisvLyBKU0NlbGxzIG9y
IGFueSBvdGhlciBraW5kIG9mIGRhdGEsIHNvIGxvbmcgYXMgaXQgcmVzcG9uZHMgdG8gb3BlcmF0
b3IhKCkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQXV4aWxpYXJ5QmFycmllciB7Citw
dWJsaWM6CisgICAgQXV4aWxpYXJ5QmFycmllcigpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+CisgICAgQXV4aWxpYXJ5QmFycmllcihWTSYsIEpTQ2VsbCosIFUmJik7CisgICAg
CisgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IFQoKTsgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXQoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAg
IGNvbnN0IFQmIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBz
bG90KCkgeyByZXR1cm4gJm1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICB2b2lkIHNldFdpdGhvdXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBtX3ZhbHVl
ID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUIG1fdmFs
dWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJp
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUg
VT4KK0F1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJpZXIoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVT4KK3ZvaWQgQXV4aWxpYXJ5QmFycmllcjxUPjo6
c2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVSYmIHZhbHVlKQoreworICAgIG1fdmFsdWUgPSBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzcsMTAgKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRP
d25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewot
ICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHks
IHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
aW50ZW5kZWRPd25lciwgc2l6ZSwgJnRlbXApKTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZy
b21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICB2b2lkKiBi
YXNlID0gdm0uaGVhcC5hbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCBzaXplKTsKKyAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTksNyArMTE4LDggQEAg
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRoZUJh
c2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwot
ICAgIGlmICghdm0uaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCAmdGhl
QmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgdGhlQmFzZSA9IHZtLmhlYXAudHJ5UmVhbGxv
Y2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCB0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKTsK
KyAgICBpZiAoIXRoZUJhc2UpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBmcm9tQmFz
ZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0
LDcgKzI1NCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAg
ICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3Jv
dyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgpOworICAg
IHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4ob2xkVmVjdG9yTGVuZ3RoLCBsZW5ndGgp
OwogICAgIEFTU0VSVCh1c2VkVmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpOwogICAgIC8vIENoZWNrIHRoYXQgcmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBwb3NzaWJs
ZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBmYXNoaW9uLgogICAgIGlmIChjb3VudCA+IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2VkVmVjdG9yTGVuZ3RoKQpAQCAtMjc5LDcgKzI4MCw4IEBA
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICAgICAgbmV3U3Rv
cmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNp
emVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
dHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOwotICAgICAgICBp
ZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG5ld1NpemUsICZuZXdBbGxvY0Jh
c2UpKQorICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5
KHRoaXMsIG5ld1NpemUpOworICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFj
aXR5OwogICAgIH0KQEAgLTMxNCwxMiArMzE2LDEyIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50U2xvd0Nhc2UoVk0mIHYKICAgICB9IGVsc2UgaWYgKChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVy
Zmx5LT5iYXNlKHN0cnVjdHVyZSh2bSkpKSB8fCAobmV3SW5kZXhCaWFzICE9IHN0b3JhZ2UtPm1f
aW5kZXhCaWFzKSkgewogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9y
YWdlKCkgLSBwcm9wZXJ0eVNpemUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9w
ZXJ0eVNpemUsIHNpemVvZihKU1ZhbHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGlu
Z0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwogICAgICAgICBtZW1tb3ZlKG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBzdG9yYWdlLT5tX3ZlY3Rvciwg
c2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBuZXdWZWN0b3IgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7
IGkgPCBuZXdWZWN0b3JMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVh
cigpOwogICAgIH0KIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogbmV3VmVjdG9yID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gdXNlZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgaSsrKQorICAgICAgICBu
ZXdWZWN0b3JbaV0uY2xlYXIoKTsKKwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRlcmZs
eVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE5MSw4ICsx
OTEsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShWCiAgICAgICAg
IHZtLCBpbnRlbmRlZE93bmVyLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJh
eShpbml0aWFsTGVuZ3RoKSwKICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVD
VE9SX0xFTikpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7Ci0gICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1f
c3BhcnNlTWFwLmNsZWFyKCk7CisgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwogICAgIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJldHVybiBidXR0ZXJmbHk7CiB9
CkBAIC0yMzUsMjcgKzIzNSwzMSBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0CiAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU3RvcmFnZSA9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKIAogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OwotICAgIGlmIChMSUtF
TFkoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpIHsKKyAg
ICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsK
KyAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkpIHsKICAg
ICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
Ci0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KTsKLQotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRy
dWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUp
CisgICAgICAgICAgICB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBo
YXNEb3VibGUoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhpbmRl
eGluZ1R5cGUpKTsKKworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1
eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdl
LCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAg
IGlmICghdGVtcCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwogICAg
ICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgICAgICBi
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgaWYgKGhh
c0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBpZiAoaGFzRG91
YmxlKGluZGV4aW5nVHlwZSkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRp
YWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIo
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAg
IGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxl
bmd0aCkpLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdm9pZCogdGVt
cCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZl
Y3Rvckxlbmd0aCkpKTsKKyAgICAgICAgaWYgKCF0ZW1wKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwg
b3V0T2ZMaW5lU3RvcmFnZSk7CiAgICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkg
PSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CiAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZp
c2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNzcgKzg4LDYgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFTU0VSVChi
dXR0ZXJmbHkpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0
dXJlKCk7Ci0gICAgCi0gICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0g
dGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdI
ZWFkZXIpKSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMoc3RydWN0dXJlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0eSA9
IDA7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0gICAg
c2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZseS0+
YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29s
bGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAvLyBDb3B5
IHRoZSBwcm9wZXJ0aWVzLgotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9
IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFn
ZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAgICAgICAo
LS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50U291cmNl
KS0+Z2V0KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVh
ZGVyKSkgewotICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IENvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXplX3QgY291
bnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBl
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAg
ICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0RP
VUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBu
ZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
KTsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGNvdW50ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAgICAgICAg
ICAgICAgIGN1cnJlbnRTb3VyY2UgPSAwOwotICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5
KGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhv
dXRCYXJyaWVyKG5ld0J1dHRlcmZseSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0ZXJm
bHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMp
OwotICAgIH0gCi19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJm
bHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKQEAgLTE3NSwxMyArMTA0LDE2
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJl
Q2FwYWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAg
ICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBIZWFwQ2VsbCogYmFzZSA9IGJpdHdpc2Vf
Y2FzdDxIZWFwQ2VsbCo+KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSkpOworCisgICAgQVNTRVJUKEhlYXA6OmhlYXAoYmFzZSkgPT0gdmlzaXRvci5oZWFwKCkp
OwogCisgICAgLy8gS2VlcCB0aGUgYnV0dGVyZmx5IGFsaXZlLgorICAgIHZpc2l0b3IubWFya0F1
eGlsaWFyeShiYXNlKTsKKyAgICAKICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBz
dG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIHZpc2l0b3IuY29weUxhdGVyKAotICAgICAg
ICB0aGlzLCBCdXR0ZXJmbHlDb3B5VG9rZW4sCi0gICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAgCiAgICAg
Ly8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgc3dpdGNoICh0aGlzLT5pbmRl
eGluZ1R5cGUoKSkgewpAQCAtMjI1LDE5ICsxNTcsNiBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYKIH0KIAotdm9pZCBKU09iamVjdDo6Y29weUJhY2tp
bmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9r
ZW4pCi17Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxs
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0K
LSAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5n
ZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVy
Zmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGlu
ZVNpemUoKSk7Ci19Ci0KIHZvaWQgSlNPYmplY3Q6OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNlbGws
IEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxkZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTgwNyw2ICs3MjYsOCBAQCBDb250aWd1
b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbElu
ZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAg
ICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+
Y29udGlndW91c0ludDMyKCk7CkBAIC04MjcsNiArNzQ4LDggQEAgQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0OjpjcmVhdGVJbml0aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsK
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFn
ZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7
CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0
ZUNvbnRpZ3VvdXMpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0
dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KTsKQEAgLTg0OSw2ICs3NzIsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJh
eVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAg
Zm9yIChzaXplX3QgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3Zl
Y3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAg
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg2Miw2ICs3ODcsMTEgQEAgQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycgogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0
Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVj
aWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwg
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblBy
b3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVybiBtX2J1dHRlcmZs
eS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiB9CkBAIC04ODEsNiArODExLDExIEBAIENvbnRp
Z3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWMKIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNT
RVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVy
biBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOwogfQpAQCAtOTE3LDcgKzg1Miw5IEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKIAogICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRo
b3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIC8vIE5vIG5lZWQgdG8g
Y29weSBlbGVtZW50cy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7
IGktLTspCisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9u
KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFn
ZS0+YnV0dGVyZmx5KCkpOwpAQCAtOTM4LDExICs4NzUsMTIgQEAgQ29udGlndW91c0RvdWJsZXMg
SlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1
cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91Ymxl
KiBjdXJyZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CiAgICAg
ICAgIEpTVmFsdWUgdiA9IGN1cnJlbnQtPmdldCgpOwotICAgICAgICBpZiAoIXYpIHsKKyAgICAg
ICAgLy8gTk9URTogU2luY2UgdGhpcyBtYXkgYmUgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24s
IHYgY291bGQgYmUgZ2FyYmFnZS4gSWYgaXQncyBnYXJiYWdlLAorICAgICAgICAvLyB0aGF0IG1l
YW5zIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAgICAgIGlmICghdi5pc0ludDMy
KCkpIHsKICAgICAgICAgICAgICpjdXJyZW50QXNEb3VibGUgPSBQTmFOOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHYuaXNJbnQzMigpKTsKICAgICAg
ICAgKmN1cnJlbnRBc0RvdWJsZSA9IHYuYXNJbnQzMigpOwogICAgIH0KICAgICAKQEAgLTk2Niwx
MyArOTA0LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3Ro
KCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJy
YXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1
ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7
Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKHYpOworICAgICAgICBpZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3
U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0xMDE0LDEzICs5NTAsMTEgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJh
eVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRo
b3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgaWYgKHZhbHVlID09IHZhbHVl
KSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAg
IG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVlID09IHZh
bHVlKQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5n
ZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0
cmFuc2l0aW9uKTsKQEAgLTEwNDEsMTMgKzk3NSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
Ojpjb252ZXJ0Q29udGlndW91CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJm
bHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9
IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0s
IHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsg
aSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdl
dCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAg
ICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHko
KSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpA
QCAtMjc1NCw2ICsyNjg2LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgo
Vk0mIAogICAgICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdC
dXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAg
ICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1Zl
Y3Rvckxlbmd0aCk7CiAgICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzY4LDYgKzI3
MDIsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAg
IG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0
aCkpOwogICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kp
CisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFy
KCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5l
d1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRl
eEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3Ry
dWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwpAQCAtMjc5OSw4ICsyNzM1LDEyIEBAIGJvb2wgSlNP
YmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKIAogICAgIGlmIChoYXNEb3VibGUoaW5k
ZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0
aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKCkuZGF0YSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoSlNWYWx1ZSgpKTsKICAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDM2OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAi
QXJyYXlDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUg
IkF1eGlsaWFyeUJhcnJpZXIuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVu
dGlmaWVycy5oIgotI2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0
dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAg
LTEwMyw3ICsxMDMsNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
c2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZp
c2l0b3ImLCBDb3B5VG9rZW4pOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGhl
YXBTbmFwc2hvdChKU0NlbGwqLCBIZWFwU25hcHNob3RCdWlsZGVyJik7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAt
Nzk3LDcgKzc5Niw2IEBAIHByb3RlY3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSos
IEJ1dHRlcmZseSogPSAwKTsKICAgICAgICAgCiAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90
VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSopOwotICAgIHZvaWQgY29weUJ1dHRlcmZs
eShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAv
LyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVy
ZSBpdCBoYXMgYXJyYXkKICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lz
ZS4KQEAgLTk0OSw3ICs5NDcsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEFy
cmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgQ29weUJhcnJpZXI8QnV0dGVyZmx5PiBtX2J1dHRlcmZseTsKKyAgICBBdXhpbGlhcnlCYXJy
aWVyPEJ1dHRlcmZseSo+IG1fYnV0dGVyZmx5OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2
YXRlOgogICAgIHVpbnQzMl90IG1fcGFkZGluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBKU09iamVjdElubGluZXNfaAogI2RlZmlu
ZSBKU09iamVjdElubGluZXNfaAogCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAi
TG9va3VwLmgiCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysg
U291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2
IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxMSwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIw
MDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUtMjAwOSwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpAQCAtOTcsNiArOTYsMTEg
QEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBf
YWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWdu
ZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHJldHVybiBf
YWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKK30KKwogdm9pZCBmYXN0QWxpZ25lZEZy
ZWUodm9pZCogcCkgCiB7CiAgICAgX2FsaWduZWRfZnJlZShwKTsKQEAgLTExMSw2ICsxMTUsMTMg
QEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBw
OwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkgCit7CisgICAgdm9pZCogcCA9IG51bGxwdHI7CisgICAgcG9zaXhfbWVtYWxpZ24o
JnAsIGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7Cit9CisKIHZvaWQgZmFzdEFsaWdu
ZWRGcmVlKHZvaWQqIHApIAogewogICAgIGZyZWUocCk7CkBAIC0yMzEsNiArMjQyLDExIEBAIHZv
aWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4gYm1hbGxv
Yzo6YXBpOjptZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOwogfQogCit2b2lkKiB0cnlGYXN0QWxp
Z25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgcmV0dXJu
IGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsKK30KKwogdm9pZCBm
YXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHApOwpJ
bmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL1dURi93dGYv
RmFzdE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTMsNiArNTMsNyBAQCBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0RnJlZSh2b2lkKik7CiAKIC8vIEFsbG9jYXRpb25z
IGZyb20gZmFzdEFsaWduZWRNYWxsb2MoKSBtdXN0IGJlIGZyZWVkIHVzaW5nIGZhc3RBbGlnbmVk
RnJlZSgpLgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5RmFzdEFs
aWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKik7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBzaXpl
X3QgZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCopOwpAQCAtMTA3LDYgKzEwOCw3IEBAIHVzaW5n
IFdURjo6ZmFzdE1hbGxvY1NpemU7CiB1c2luZyBXVEY6OmZhc3RSZWFsbG9jOwogdXNpbmcgV1RG
OjpmYXN0U3RyRHVwOwogdXNpbmcgV1RGOjpmYXN0WmVyb2VkTWFsbG9jOwordXNpbmcgV1RGOjp0
cnlGYXN0QWxpZ25lZE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdENhbGxvYzsKIHVzaW5nIFdU
Rjo6dHJ5RmFzdE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdFplcm9lZE1hbGxvYzsKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
NCw2ICs2NCwxOCBAQCB2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBzaXplCiAK
IHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
CiB7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRl
SW1wbChhbGlnbm1lbnQsIHNpemUsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBi
b29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbChhbGln
bm1lbnQsIHNpemUsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjphbGxv
Y2F0ZUltcGwoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIGJvb2wgY3Jhc2hPbkZhaWx1
cmUpCit7CiAgICAgQkFTU0VSVChpc1Bvd2VyT2ZUd28oYWxpZ25tZW50KSk7CiAKICAgICBpZiAo
IW1faXNCbWFsbG9jRW5hYmxlZCkgewpAQCAtODAsNyArOTIsMTAgQEAgdm9pZCogQWxsb2NhdG9y
OjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZQogICAgICAgICByZXR1cm4gYWxsb2NhdGUocm91bmRV
cFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIHNpemUpKTsKIAogICAgIHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICByZXR1cm4g
UGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGln
bm1lbnQsIHNpemUpOworICAgIEhlYXAqIGhlYXAgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0
Q2FzZSgpOworICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgcmV0dXJuIGhlYXAtPmFs
bG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gaGVhcC0+dHJ5
QWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogfQogCiB2b2lkKiBBbGxvY2F0
b3I6OnJlYWxsb2NhdGUodm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE1IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2Nh
dGUoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3QpOwogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAg
dm9pZCogcmVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90KTsKIAogICAgIHZvaWQgc2NhdmVuZ2UoKTsK
IAogcHJpdmF0ZToKKyAgICB2b2lkKiBhbGxvY2F0ZUltcGwoc2l6ZV90IGFsaWdubWVudCwgc2l6
ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAgICAKICAgICBib29sIGFsbG9jYXRlRmFzdENh
c2Uoc2l6ZV90LCB2b2lkKiYpOwogICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBz
dGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2Nh
dGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv
aWQqKTsKICAgICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90KTsKQEAgLTc5
LDYgKzgwLDE0IEBAIGlubGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUKICAg
ICByZXR1cm4gY2FjaGUtPmFsbG9jYXRvcigpLmFsbG9jYXRlKHNpemUpOwogfQogCitpbmxpbmUg
dm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQor
eworICAgIENhY2hlKiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7Cisg
ICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUo
YWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gY2FjaGUtPmFsbG9jYXRvcigpLnRyeUFsbG9j
YXRlKGFsaWdubWVudCwgc2l6ZSk7Cit9CisKIGlubGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgQ2FjaGUqIGNhY2hlID0gUGVy
VGhyZWFkPENhY2hlPjo6Z2V0RmFzdENhc2UoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvYm1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxv
Yy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw2ICs0MywxMiBAQCBpbmxpbmUgdm9pZCogbWFsbG9j
KHNpemVfdCBzaXplKQogICAgIHJldHVybiBDYWNoZTo6YWxsb2NhdGUoc2l6ZSk7CiB9CiAKKy8v
IFJldHVybnMgbnVsbCBvbiBmYWlsdXJlLgoraW5saW5lIHZvaWQqIHRyeU1lbWFsaWduKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBDYWNoZTo6dHJ5QWxsb2Nh
dGUoYWxpZ25tZW50LCBzaXplKTsKK30KKwogLy8gQ3Jhc2hlcyBvbiBmYWlsdXJlLgogaW5saW5l
IHZvaWQqIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284709</attachid>
            <date>2016-07-27 10:58:15 -0700</date>
            <delta_ts>2016-07-27 14:01:57 -0700</delta_ts>
            <desc>passing more tests than ever</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>85189</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc3MSw3ICszNzcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzaXplLCBtX291
dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZVZhcmlh
YmxlU2l6ZWRPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAgICAgICAgICBzaXplLCBz
dHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKHNpemUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQ
YXRoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgu
dmFsdWUsIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7CkBAIC00
MDY3LDkgKzQwNjcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlT
aXplID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5jb25z
dEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChi
dXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAgICAgICB2bSgpLmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIExW
YWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBmYWlsQ2Fz
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5z
dWIoZW5kT2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBvYmpl
Y3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENh
c2UpOwogICAgICAgICAgICAgCkBAIC02OTQ3LDExICs2OTQ5LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFu
ZEdldEVuZChidXR0ZXJmbHlTaXplLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgTFZhbHVl
IHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIGJ1
dHRlcmZseVNpemUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwog
CiAgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gaW5kZXhpbmdIZWFkZXJTaXplKSk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0T2ZTdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSk7CiAKICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAg
ICAgICAgICAgICAgIApAQCAtNzc0NSwxMCArNzc0OSwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBpbml0aWFsaXplQXJyYXlFbGVtZW50cyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBMVmFs
dWUgdmVjdG9yTGVuZ3RoLCBMVmFsdWUgYnV0dGVyZmx5KQogICAgIHsKLSAgICAgICAgaWYgKCFo
YXNEb3VibGUoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgLy8gVGhlIEdDIGFscmVhZHkg
aW5pdGlhbGl6ZWQgZXZlcnl0aGluZyB0byBKU1ZhbHVlKCkgZm9yIHVzLgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgICAgIExWYWx1ZSBob2xlOworICAgICAgICBpZiAoaGFz
RG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBob2xlID0gbV9vdXQuY29uc3RJbnQ2
NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBob2xlID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSk7CiAK
ICAgICAgICAgLy8gRG91YmxlcyBtdXN0IGJlIGluaXRpYWxpemVkIHRvIFBOYU4uCiAgICAgICAg
IExCYXNpY0Jsb2NrIGluaXRMb29wID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTc3NjMsOSArNzc2
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwg
b3JpZ2luYWxJbmRleCk7CiAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKHBvaW50
ZXJUeXBlKCksIG9yaWdpbmFsUG9pbnRlcik7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZTY0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4o
UE5hTikpLAotICAgICAgICAgICAgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVBy
b3BlcnRpZXMuYXRBbnlJbmRleCgpLCBwb2ludGVyKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQo
aG9sZSwgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMuYXRBbnlJ
bmRleCgpLCBwb2ludGVyKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbmV4dEluZGV4ID0g
bV9vdXQuc3ViKGluZGV4LCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIG1fb3V0LmFkZEluY29t
aW5nVG9QaGkoaW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0SW5kZXgpKTsKQEAgLTc4MjYsMTIgKzc4
MjksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVl
KSksIHNsb3dQYXRoKTsKKworICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1
ZXMgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
ID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZUluQnl0ZXMpOworICAg
ICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0
SW50UHRyKCZhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQu
YWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3Jh
Z2UpKTsKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRl
cyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTg0MDEsNyAr
ODQwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAg
fQogCi0gICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9y
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nl
c3MgPSBtX291dC5uZXdCbG9jaygpOwogICAgIApAQCAtODQzNiw3ICs4NDQwLDcgQEAgcHJpdmF0
ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC04NDY0LDQ2ICs4NDY4LDU0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xv
d1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0g
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNp
emUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2UsIExW
YWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VT
dGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0
d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3Rl
cCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXBy
ZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVlIHN1
YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9m
VHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxD
YXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJnZU9y
T3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9j
ayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBMVmFs
dWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291
dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVj
aXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNp
emUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5j
b25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291dC5i
cmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVy
c2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
KTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAg
ICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBz
dWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5k
ZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0
ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1
ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9j
ayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikp
LAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQ
dHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxseShs
YXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFkZHJl
c3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1
YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQu
emVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0
TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291
dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNw
YWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxv
Y2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGko
cG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAgICAg
CisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3Is
IGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNp
emUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Js
b2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9v
dXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlVmFy
aWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgdm0o
KS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xvd1Bh
dGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1OTAsMjYgKzg2MDIsMjQg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0
ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAgICAg
TFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3Ro
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7CisgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEoCisgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1Bh
dGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigKLSAg
ICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUp
ICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQo
c3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikp
KTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0Fy
cmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CisgICAg
ICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291
dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9w
dWJsaWNMZW5ndGgpOwogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIodmVj
dG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4p
KSwKLSAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExWYWx1
ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbV9v
dXQuc3RvcmU2NChob2xlLCBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRp
ZXNbaV0pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwgYnV0
dGVyZmx5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9r
ZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4u
aAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRv
a2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjksNiBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIGVudW0gQ29weVRva2VuIHsKLSAgICBCdXR0ZXJmbHlDb3B5VG9rZW4sCiAgICAg
VHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwKICAgICBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4s
CiAgICAgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5OCwxMiArNTk4LDYgQEAg
dm9pZCBIZWFwOjpjb3B5QmFja2luZ1N0b3JlcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QgPSBibG9jay0+
d29ya0xpc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ29weVdvcmtsaXN0SXRl
bSBpdGVtIDogd29ya0xpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRl
bS50b2tlbigpID09IEJ1dHRlcmZseUNvcHlUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZW0uY2VsbCgpLCBjb3B5VmlzaXRvciwgQnV0dGVyZmx5Q29w
eVRva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2VsbCgpLT5tZXRob2RUYWJsZSgpLT5j
b3B5QmFja2luZ1N0b3JlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNl
bGwoKSwgY29weVZpc2l0b3IsIGl0ZW0udG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDM2OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5
LDcgKzg5LDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNs
YXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7CiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNW
YWx1ZSk7IC8vIDAgZm9yIGltbWVkaWF0ZSB2YWx1ZXMKLSAgICBzdGF0aWMgSGVhcCogaGVhcChj
b25zdCBKU0NlbGwqKTsKKyAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBIZWFwQ2VsbCopOwog
CiAgICAgLy8gVGhpcyBjb25zdGFudCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVy
YXRlIGJldHdlZW4gY2hlY2tzIG9mIG91ciAKICAgICAvLyBkZWFkbGluZSB3aGVuIGNhbGxpbmcg
SGVhcDo6aXNQYWdlZE91dC4gRGVjcmVhc2luZyBpdCB3aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAK
QEAgLTE1MCw3ICsxNTAsMTEgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29i
amVjdFNwYWNlLmFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvckZvck9iamVjdFdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9v
YmplY3RTcGFjZS5kZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENsYXNzVHlwZT4gTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RP
ZlR5cGUoc2l6ZV90IGJ5dGVzKTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmF1eGlsaWFy
eUFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBDb3BpZWRBbGxvY2F0b3ImIHN0b3JhZ2VBbGxv
Y2F0b3IoKSB7IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxvY2F0b3IoKTsgfQorICAgIHZvaWQq
IGFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKKyAgICB2
b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7
CisgICAgdm9pZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIs
IHZvaWQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgQ2hl
Y2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6
ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2NhdGVTdG9yYWdlKEpT
Q2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CiAgICAgdm9pZCBh
c2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6aXNDb2xsZWN0aW5nKCkKICAgICByZXR1
cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbjsKIH0KIAotaW5saW5lIEhlYXAqIEhlYXA6Omhl
YXAoY29uc3QgSlNDZWxsKiBjZWxsKQoraW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSGVh
cENlbGwqIGNlbGwpCiB7CiAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+
aGVhcCgpOwogfQpAQCAtMTk5LDcgKzE5OSw3IEBAIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0
ZVdpdGhvdXREZXN0cnUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotdm9pZCog
SGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIEhl
YXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKIHsKICAgICAvLyBKU0NlbGw6
OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1
Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KICAgICBBU1NFUlQoKCFD
bGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3Mg
JiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwg
SlNEZXN0cnVjdGlibGVPYmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQq
IEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCAKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ2xhc3NUeXBlPgotTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvck9i
amVjdE9mVHlwZSgpCitpbmxpbmUgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFj
ZUZvck9iamVjdE9mVHlwZSgpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3Rz
IG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20g
SlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3Ry
dWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRh
bCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
Pjo6dmFsdWUpKTsKQEAgLTIyMSw3ICsyMjEsNyBAQCBNYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhl
YXA6OnN1YnNwYWNlRm9yCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLU1hcmtl
ZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykK
K2lubGluZSBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZShz
aXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVj
dHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0
cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9u
IHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgfHwg
c3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFs
dWUpKTsKQEAgLTIzMSw2ICsyMzEsMzcgQEAgTWFya2VkQWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0
b3JGb3JPYmplYwogICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3Rv
cihieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZUF1eGlsaWFyeShKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBt
X29iamVjdFNwYWNlLmFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBFTkFCTEUoQUxMT0NB
VElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMg
b2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25lciwgcmVzdWx0
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlQXV4aWxp
YXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJl
c3VsdCA9IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoYnl0ZXMpOworI2lmIEVO
QUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5n
ICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93
bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7Cisj
ZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCogSGVhcDo6dHJ5UmVh
bGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNp
emVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICB2b2lkKiBuZXdCYXNlID0gdHJ5
QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7CisgICAgaWYgKCFuZXdC
YXNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBtZW1jcHkobmV3QmFzZSwgb2xkQmFz
ZSwgb2xkU2l6ZSk7CisgICAgcmV0dXJuIG5ld0Jhc2U7Cit9CisKIGlubGluZSBDaGVja2VkQm9v
bGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXpl
X3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiB7CiAgICAgQ2hlY2tlZEJvb2xlYW4gcmVzdWx0ID0g
bV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJl
dGlyZShNYXJrZWRCbG9jawogICAgIGJsb2NrLT5kaWRSZXRpcmVCbG9jayhmcmVlTGlzdCk7CiB9
CiAKLWlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKHNpemVf
dCBieXRlcykKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91
dENvbGxlY3RpbmdJbXBsKHNpemVfdCBieXRlcykKIHsKICAgICBpZiAobV9jdXJyZW50QmxvY2sp
IHsKICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrID09IG1fbmV4dEJsb2NrVG9Td2VlcCk7
CkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlQ
b3BGcmVlCiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAKLWlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rpbmcoc2l6ZV90IGJ5dGVzKQogewogICAgIEFT
U0VSVCghbV9oZWFwLT5pc0J1c3koKSk7CiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jl
c3MgPSBBbGxvY2F0aW9uOwotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSGVscGVyKGJ5
dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1w
bChieXRlcyk7CiAKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0
aW9uOwogICAgIEFTU0VSVChyZXN1bHQgfHwgIW1fY3VycmVudEJsb2NrKTsKQEAgLTE0OCw2ICsx
NDgsMTggQEAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZQogCiB2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5dGVzKQogeworICAg
IGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0cnVlOworICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNl
SW1wbChieXRlcywgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5dGVzKQoreworICAgIGJvb2wgY3Jhc2hPbkZh
aWx1cmUgPSBmYWxzZTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNy
YXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlSW1wbChzaXplX3QgYnl0ZXMsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit7CiAgICAgQVNTRVJU
KG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgZG9U
ZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogCkBAIC0xNTUsMjkgKzE2NywzNCBAQCB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoCiAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0
LmhlYWQpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5ieXRlcyk7CiAgICAg
Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgIHZvaWQqIHJlc3Vs
dCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwogICAgIAogICAgIGlmIChM
SUtFTFkocmVzdWx0ICE9IDApKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAogICAgIGlm
IChtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKSkgewotICAgICAgICByZXN1bHQg
PSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91
dENvbGxlY3RpbmcoYnl0ZXMpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBBU1NFUlQoIW1faGVhcC0+c2hvdWxkQ29sbGVjdCgp
KTsKICAgICAKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBhbGxvY2F0ZUJsb2NrKGJ5dGVzKTsK
LSAgICBBU1NFUlQoYmxvY2spOworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IHRyeUFsbG9jYXRl
QmxvY2soYnl0ZXMpOworICAgIGlmICghYmxvY2spIHsKKyAgICAgICAgaWYgKGNyYXNoT25GYWls
dXJlKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogICAgIGFkZEJsb2NrKGJs
b2NrKTsKICAgICAgICAgCi0gICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgIHJl
c3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwogICAgIEFTU0VSVChy
ZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRBbGxv
Y2F0b3I6OmFsbG9jYXRlQmxvY2soc2l6ZV90IGJ5dGVzKQorTWFya2VkQmxvY2sqIE1hcmtlZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jayhzaXplX3QgYnl0ZXMpCiB7CiAgICAgc2l6ZV90IG1p
bkJsb2NrU2l6ZSA9IE1hcmtlZEJsb2NrOjpibG9ja1NpemU7CiAgICAgc2l6ZV90IG1pbkFsbG9j
YXRpb25TaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6
ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSkgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2Vk
QmxvY2s6OmF0b21TaXplPihieXRlcyk7CkBAIC0xODYsNyArMjAzLDcgQEAgTWFya2VkQmxvY2sq
IE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVCbAogCiAgICAgc2l6ZV90IGNlbGxTaXplID0gbV9j
ZWxsU2l6ZSA/IG1fY2VsbFNpemUgOiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxv
Y2s6OmF0b21TaXplPihieXRlcyk7CiAKLSAgICByZXR1cm4gTWFya2VkQmxvY2s6OmNyZWF0ZSgq
bV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOworICAgIHJl
dHVybiBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKCptX2hlYXAsIHRoaXMsIGJsb2NrU2l6ZSwgY2Vs
bFNpemUsIG1fYXR0cmlidXRlcyk7CiB9CiAKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9j
ayhNYXJrZWRCbG9jayogYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUz
LDcgQEAgcHVibGljOgogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpLaW5kIGNl
bGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9CiAgICAgdm9p
ZCogYWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAg
IEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KICAgICBNYXJrZWRCbG9jayogdGFrZUxh
c3RBY3RpdmVCbG9jaygpCiAgICAgewpAQCAtNzEsMTAgKzcyLDEyIEBAIHB1YmxpYzoKICAgIAog
cHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKHNp
emVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxv
Y2F0ZUhlbHBlcihzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9j
YXRlU2xvd0Nhc2Uoc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChzaXpl
X3QsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENv
bGxlY3Rpbmcoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5n
SW1wbChzaXplX3QpOwogICAgIHZvaWQqIHRyeVBvcEZyZWVMaXN0KHNpemVfdCk7Ci0gICAgTWFy
a2VkQmxvY2sqIGFsbG9jYXRlQmxvY2soc2l6ZV90KTsKKyAgICBNYXJrZWRCbG9jayogdHJ5QWxs
b2NhdGVCbG9jayhzaXplX3QpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0
aW9uc0lmTmVlZGVkKCk7CiAgICAgdm9pZCByZXRpcmUoTWFya2VkQmxvY2sqLCBNYXJrZWRCbG9j
azo6RnJlZUxpc3QmKTsKICAgICAKQEAgLTExMywyMSArMTE2LDM1IEBAIGlubGluZSB2b2lkIE1h
cmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiAKICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVz
OwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qg
Ynl0ZXMpCit7CisgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5o
ZWFkOworICAgIGlmIChVTkxJS0VMWSghaGVhZCkpIHsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0g
dHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcyk7CisgICAgICAgIGlmIChyZXN1bHQgJiYgIUFTU0VS
VF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgbV9mcmVlTGlzdC5oZWFkID0g
aGVhZC0+bmV4dDsKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgbWVtc2V0KGhl
YWQsIDB4Q0QsIGJ5dGVzKTsKKyAgICByZXR1cm4gaGVhZDsKK30KKwogaW5saW5lIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogewogICAgIE1hcmtlZEJsb2Nr
OjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIWhl
YWQpKSB7CiAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOwot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgbWVtc2V0KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOwotI2Vu
ZGlmCisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgbWVtc2V0KHJl
c3VsdCwgMHhDRCwgYnl0ZXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAK
ICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotI2lmbmRlZiBOREVCVUcKLSAgICBt
ZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOwotI2VuZGlmCisgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CiAgICAgcmV0dXJuIGhlYWQ7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTQgKzM1LDE3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogc3RhdGljIGNvbnN0IGJvb2wgY29tcHV0ZUJhbGFuY2UgPSBmYWxzZTsKIHN0YXRpYyBzaXpl
X3QgYmFsYW5jZTsKIAotTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpjcmVhdGUoSGVhcCYgaGVh
cCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNl
bGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQorTWFya2VkQmxv
Y2sqIE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0
b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQogewogICAgIGlmIChjb21wdXRlQmFsYW5jZSkgewog
ICAgICAgICBiYWxhbmNlKys7CiAgICAgICAgIGlmICghKGJhbGFuY2UgJSAxMCkpCiAgICAgICAg
ICAgICBkYXRhTG9nKCJNYXJrZWRCbG9jayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsKICAg
ICB9Ci0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1h
bGxvYyhibG9ja1NpemUsIGNhcGFjaXR5KSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0
eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMpOworICAgIHZvaWQqIGJsb2NrU3BhY2UgPSB0cnlGYXN0
QWxpZ25lZE1hbGxvYyhibG9ja1NpemUsIGNhcGFjaXR5KTsKKyAgICBpZiAoIWJsb2NrU3BhY2Up
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IG5ldyAo
Tm90TnVsbCwgYmxvY2tTcGFjZSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2Vs
bFNpemUsIGF0dHJpYnV0ZXMpOwogICAgIGhlYXAuZGlkQWxsb2NhdGVCbG9jayhjYXBhY2l0eSk7
CiAgICAgcmV0dXJuIGJsb2NrOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtdXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAg
ICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFy
a2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVh
dGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxT
aXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9t
QWxpZ25lZChjb25zdCB2b2lkKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBh
bGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVBdXhp
bGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOwog
CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhEZXN0cnVjdG9yKCkgeyByZXR1
cm4gbV9kZXN0cnVjdG9yU3BhY2U7IH0KICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3Rz
V2l0aG91dERlc3RydWN0b3IoKSB7IHJldHVybiBtX25vcm1hbFNwYWNlOyB9CkBAIC0xODIsNiAr
MTgzLDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGkKICAgICBy
ZXR1cm4gYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZShieXRlcyk7CiB9CiAK
K2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90IGJ5
dGVzKQoreworICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLnRyeUFsbG9j
YXRlKGJ5dGVzKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lk
IE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAg
ICBmb3JFYWNoU3Vic3BhY2UoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksMTUgQEAg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZQogICAgICAgICBtX2hlYXBT
bmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUoY2VsbCk7CiB9CiAKK3ZvaWQgU2xvdFZpc2l0b3I6
Om1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkKK3sKKyAgICBpZiAoSGVhcDo6dGVzdEFu
ZFNldE1hcmtlZChiYXNlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fdmlzaXRDb3Vu
dCsrOworICAgIG1fYnl0ZXNWaXNpdGVkICs9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihiYXNlKS0+
Y2VsbFNpemUoKTsKK30KKwogY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZSB7CiBwdWJsaWM6CiAg
ICAgU2V0Q3VycmVudENlbGxTY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlNDZWxs
KiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzKCk7CisgICAgCisgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBh
dXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBk
b24ndCBkbworICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQg
b2YgR0MuCisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOwogCiAgICAg
dm9pZCBjb3B5TGF0ZXIoSlNDZWxsKiwgQ29weVRva2VuLCB2b2lkKiwgc2l6ZV90KTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNl
dHNFeHRyYWN0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NCArOTEsMyBAQCBpbnQgbWFpbihpbnQsIGNoYXIqKikKICAgICByZXR1cm4gMDsKIH0KIAotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmll
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGls
aWFyeUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFz
cyBWTTsKKworLy8gQW4gQXV4aWxpYXJ5IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBu
b3QgdHJ5IHRvIHJlYXNvbiBhYm91dCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0
LCBvdGhlciB0aGFuIGludGVycHJldGluZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBi
YXJyaWVyLiBJdCdzIE9LIHRvIHVzZSB0aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55
IG90aGVyIGtpbmQgb2YgZGF0YSwgc28gbG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEo
KS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1Ymxp
YzoKKyAgICBBdXhpbGlhcnlCYXJyaWVyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICBBdXhpbGlhcnlCYXJyaWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAg
ICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICB2b2lkIHNldChWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29u
c3QgVCYgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3Qo
KSB7IHJldHVybiAmbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpOyB9CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
QXV4aWxpYXJ5QmFycmllcjxUPjo6QXV4aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIFUmJiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsK
KyAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNywxMCArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7Ci0gICAg
dm9pZCogdGVtcDsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbnRl
bmRlZE93bmVyLCBzaXplLCAmdGVtcCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJh
c2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHZvaWQqIGJhc2Ug
PSB2bS5oZWFwLmFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIHNpemUpOworICAgIEJ1
dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExOSw3ICsxMTgsOCBAQCBpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9
IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNp
emUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9w
ZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAg
aWYgKCF2bS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIsICZ0aGVCYXNl
LCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICB0aGVCYXNlID0gdm0uaGVhcC50cnlSZWFsbG9jYXRl
QXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIHRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpOworICAg
IGlmICghdGhlQmFzZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyb21CYXNlKHRo
ZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMDM2OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4IEBAIENsb25lZEFyZ3VtZW50cyogQ2xvbmVkQXJn
dW1lbnRzOjpjcmVhdGUKICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB2b2lkKiB0ZW1wOwotICAgIGlmICgh
dm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFs
bG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkpOworICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgo
dmVjdG9yTGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw4IEBAIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNp
dHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFz
ZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxl
bmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JM
ZW5ndGggPSBtaW4ob2xkVmVjdG9yTGVuZ3RoLCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVj
dG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRo
YXQgcmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2Fm
ZSBmYXNoaW9uLgogICAgIGlmIChjb3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1
c2VkVmVjdG9yTGVuZ3RoKQpAQCAtMjc5LDcgKzI4MCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVu
dENhcGFjaXR5OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKHRoaXMsIG5ld1NpemUsICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICBuZXdBbGxv
Y0Jhc2UgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KHRoaXMsIG5ld1NpemUpOworICAg
ICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwogICAgIH0KQEAgLTMxNCwx
MiArMzE2LDEyIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAg
ICB9IGVsc2UgaWYgKChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSh2
bSkpKSB8fCAobmV3SW5kZXhCaWFzICE9IHN0b3JhZ2UtPm1faW5kZXhCaWFzKSkgewogICAgICAg
ICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUs
IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1Zh
bHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IoMCkpOwogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yLCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNl
ZFZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBuZXdWZWN0
b3IgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7
IGkrKykKLSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAorICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogbmV3VmVjdG9yID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3I7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdXNlZFZlY3Rvckxlbmd0aDsg
aSA8IG5ld1ZlY3Rvckxlbmd0aDsgaSsrKQorICAgICAgICBuZXdWZWN0b3JbaV0uY2xlYXIoKTsK
KwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdW
ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhC
aWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVj
dHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE5MSw4ICsxOTEsOCBAQCBpbmxpbmUgQnV0dGVy
Zmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShWCiAgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCAw
LCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwKICAg
ICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOwogICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgc3RvcmFn
ZS0+bV9pbmRleEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7Cisg
ICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSAwOwogICAgIHJldHVybiBidXR0ZXJmbHk7CiB9CkBAIC0yMTUsNiArMjE1LDkgQEAg
aW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShWTSYgdm0sIAogICAgICAgICBpZiAoaGFz
RG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoCkBAIC0yMzUsMjcgKzIzOCwzMSBA
QCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgdW5zaWduZWQg
b3V0T2ZMaW5lU3RvcmFnZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAogICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5OwotICAgIGlmIChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFn
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpIHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBpZiAoTElLRUxZKCFoYXNB
bnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkpIHsKICAgICAgICAgQVNTRVJUKAotICAgICAg
ICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAg
ICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwg
aGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXND
b250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKLQotICAgICAgICB2b2lkKiB0
ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBoYXNJ
bnQzMihpbmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBl
KQorICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUpKTsKKworICAgICAg
ICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIGlmICghdGVtcCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21C
YXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwogICAgICAgICBidXR0ZXJmbHktPnNldFZl
Y3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JM
ZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KVtpXSA9IFBOYU47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxv
Y2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwg
dHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2Nh
dGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3Rv
cmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAg
ICAgaWYgKCF0ZW1wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CiAg
ICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFy
cmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODgsNzcgKzg4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNz
UHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpj
b3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwg
c2l6ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFTU0VSVChidXR0ZXJmbHkpOwotICAgIAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAgCi0gICAgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0g
ICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gdGhpcy0+aGFzSW5kZXhpbmdIZWFk
ZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAgIHBy
ZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1
Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+
aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRl
cyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBo
YXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICh2
aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0
dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzLgotICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVy
dHlTdG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBz
dG9yYWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0
V2l0aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50U291cmNlKS0+Z2V0KCkpOwotICAgICAgICAK
LSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewotICAgICAgICAgICAg
Km5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENvcHkgdGhlIGFycmF5IGlmIGFw
cHJvcHJpYXRlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1
cnJlbnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzog
ewotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+
Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChuZXdC
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
OwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAg
ICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJv
bUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBj
dXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0g
ICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2Ug
PSAwOwotICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5KGN1cnJlbnRUYXJnZXQsIGN1cnJl
bnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKG5ld0J1dHRlcmZs
eSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHks
IHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwotICAgIH0gCi19Ci0KIEFMV0FZ
U19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBB
U1NFUlQoYnV0dGVyZmx5KTsKQEAgLTE3NSwxMyArMTA0LDE2IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwogICAgICAg
ICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAgICAgfQotICAgIHNpemVfdCBjYXBh
Y2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KyAgICAKKyAgICBIZWFwQ2VsbCogYmFzZSA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJ1dHRl
cmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpOworCisgICAgQVNTRVJU
KEhlYXA6OmhlYXAoYmFzZSkgPT0gdmlzaXRvci5oZWFwKCkpOwogCisgICAgLy8gS2VlcCB0aGUg
YnV0dGVyZmx5IGFsaXZlLgorICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShiYXNlKTsKKyAgICAK
ICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlk
ZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNp
emUpOwotICAgIHZpc2l0b3IuY29weUxhdGVyKAotICAgICAgICB0aGlzLCBCdXR0ZXJmbHlDb3B5
VG9rZW4sCi0gICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAgCiAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYg
YXBwcm9wcmlhdGUuCiAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewpAQCAtMjI1
LDE5ICsxNTcsNiBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAj
ZW5kaWYKIH0KIAotdm9pZCBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGws
IENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAgICBpZiAodG9rZW4gIT0gQnV0
dGVyZmx5Q29weVRva2VuKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVy
Zmx5KQotICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZs
eSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7Ci19Ci0KIHZvaWQg
SlNPYmplY3Q6OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXIm
IGJ1aWxkZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihjZWxsKTsKQEAgLTgwNyw2ICs3MjYsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6
OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5n
dGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+Y29u
dGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQz
Mik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1
dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CkBA
IC04MjcsNiArNzQ4LDggQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0
aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAgIHNl
dFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwog
ICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTg0OSw2ICs3NzIsOCBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5t
X3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7
CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IHZlY3Rv
ckxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1
Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTg2Miw2ICs3ODcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbEFycgogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9J
bnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkp
OworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
SlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxs
b2NhdGVJbnQzMikpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0lu
dDMyKCk7CiB9CkBAIC04ODEsNiArODExLDExIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0
Ojpjb252ZXJ0VW5kZWMKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVj
aWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRl
eGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBp
LS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OkFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+
Y29udGlndW91cygpOwogfQpAQCAtOTE3LDcgKzg1Miw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNvbnZlcnRVbmRlY2lkZWQKIAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZt
LCB2ZWN0b3JMZW5ndGgpOwotICAgIC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50cy4KKyAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICAK
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKICAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOwpAQCAt
OTM4LDExICs4NzUsMTIgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQz
MgogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5j
b250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBjdXJyZW50QXNEb3VibGUgPSBi
aXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CiAgICAgICAgIEpTVmFsdWUgdiA9IGN1cnJl
bnQtPmdldCgpOwotICAgICAgICBpZiAoIXYpIHsKKyAgICAgICAgLy8gTk9URTogU2luY2UgdGhp
cyBtYXkgYmUgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHYgY291bGQgYmUgZ2FyYmFnZS4g
SWYgaXQncyBnYXJiYWdlLAorICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IHdpbGwgYmUgb3Zlcndy
aXR0ZW4gbGF0ZXIuCisgICAgICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICpj
dXJyZW50QXNEb3VibGUgPSBQTmFOOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
LSAgICAgICAgQVNTRVJUKHYuaXNJbnQzMigpKTsKICAgICAgICAgKmN1cnJlbnRBc0RvdWJsZSA9
IHYuYXNJbnQzMigpOwogICAgIH0KICAgICAKQEAgLTk2NiwxMyArOTA0LDExIEBAIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdl
KiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlp
bmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdTdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdT
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBp
ZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0u
Z2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
dHJhbnNpdGlvbik7CkBAIC0xMDE0LDEzICs5NTAsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydERvdWJsZVRvQQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVy
Zmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2Ug
PSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZt
LCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7
IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXTsKLSAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKSB7Ci0gICAgICAgICAgICBuZXdT
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1
ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKQogICAgICAgICAgICAgbmV3
U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAg
IH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEwNDEs
MTMgKzk3NSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0
aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFy
cmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFs
dWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikg
ewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5l
d1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMjc1NCw2ICsyNjg2LDggQEAg
Ym9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICAgICAgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihu
ZXdWZWN0b3JMZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsg
aSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAg
IHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzY4LDYgKzI3MDIsOCBAQCBib29sIEpTT2JqZWN0
OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3QnV0
dGVyZmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVj
dG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7
CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJm
bHkpOwpAQCAtMjc5OSw4ICsyNzM1LDEyIEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNs
b3coVk0mIHZtLCAKIAogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0
aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgp
W2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ld
ID0gUE5hTjsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0
b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAg
ICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTEg
QEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgog
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIK
ICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgotI2luY2x1ZGUg
IkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVk
ZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTEwMyw3ICsxMDMsNiBAQCBwdWJs
aWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUo
SlNDZWxsKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGhlYXBTbmFwc2hvdChKU0NlbGwqLCBI
ZWFwU25hcHNob3RCdWlsZGVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3Ry
aW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtNzk3LDcgKzc5Niw2IEBAIHByb3Rl
Y3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKICAg
ICAgICAgCiAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSos
IFN0cnVjdHVyZSopOwotICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRl
cmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtu
b3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAv
LyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTk0OSw3ICs5NDcsNyBA
QCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJlQXJy
YXlTdG9yYWdlU2xvdyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29weUJhcnJpZXI8QnV0dGVy
Zmx5PiBtX2J1dHRlcmZseTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPEJ1dHRlcmZseSo+IG1fYnV0
dGVyZmx5OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1f
cGFkZGluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBA
QAogI2lmbmRlZiBKU09iamVjdElubGluZXNfaAogI2RlZmluZSBKU09iamVjdElubGluZXNfaAog
CisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDkgQEAgQUxXQVlTX0lO
TElORSBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYQogICAgIGlmICh2ZWN0b3JMZW5ndGggPiBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZvaWQq
IHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6
OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCi0gICAgICAgIHJldHVy
biAwOworICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxw
dHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIGlm
ICghdGVtcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CiAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
ICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0
TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDYgQEAKLS8vIENvcHlyaWdodCAo
YykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDExLCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKICAqIGFyZSBtZXQ6CkBAIC05Nyw2ICs5NiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25l
ZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXpl
LCBhbGlnbm1lbnQpOwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgcmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXpl
LCBhbGlnbm1lbnQpOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAg
ICBfYWxpZ25lZF9mcmVlKHApOwpAQCAtMTExLDYgKzExNSwxMyBAQCB2b2lkKiBmYXN0QWxpZ25l
ZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJuIHA7CiB9CiAKK3ZvaWQqIHRyeUZh
c3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICB2
b2lkKiBwID0gbnVsbHB0cjsKKyAgICBwb3NpeF9tZW1hbGlnbigmcCwgYWxpZ25tZW50LCBzaXpl
KTsKKyAgICByZXR1cm4gcDsKK30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7
CiAgICAgZnJlZShwKTsKQEAgLTIzMSw2ICsyNDIsMTEgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxs
b2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBibWFsbG9jOjphcGk6Om1lbWFsaWduKGFs
aWdubWVudCwgc2l6ZSk7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICByZXR1cm4gYm1hbGxvYzo6YXBpOjp0cnlN
ZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lk
KiBwKSAKIHsKICAgICBibWFsbG9jOjphcGk6OmZyZWUocCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5o
CShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDUtMjAwOSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Myw2ICs1Myw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGZhc3RGcmVlKHZvaWQqKTsKIAogLy8gQWxsb2NhdGlvbnMgZnJvbSBmYXN0QWxpZ25lZE1h
bGxvYygpIG11c3QgYmUgZnJlZWQgdXNpbmcgZmFzdEFsaWduZWRGcmVlKCkuCiBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3QpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEFsaWduZWRG
cmVlKHZvaWQqKTsKIAogV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmYXN0TWFsbG9jU2l6ZShj
b25zdCB2b2lkKik7CkBAIC0xMDcsNiArMTA4LDcgQEAgdXNpbmcgV1RGOjpmYXN0TWFsbG9jU2l6
ZTsKIHVzaW5nIFdURjo6ZmFzdFJlYWxsb2M7CiB1c2luZyBXVEY6OmZhc3RTdHJEdXA7CiB1c2lu
ZyBXVEY6OmZhc3RaZXJvZWRNYWxsb2M7Cit1c2luZyBXVEY6OnRyeUZhc3RBbGlnbmVkTWFsbG9j
OwogdXNpbmcgV1RGOjp0cnlGYXN0Q2FsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0TWFsbG9jOwog
dXNpbmcgV1RGOjp0cnlGYXN0WmVyb2VkTWFsbG9jOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9BbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDE4IEBAIHZvaWQq
IEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNpemUKIAogdm9pZCogQWxsb2NhdG9yOjph
bGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBib29sIGNyYXNo
T25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6
ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUg
PSBmYWxzZTsKKyAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6ZSwgY3Jhc2hP
bkZhaWx1cmUpOworfQorCit2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbChzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBCQVNTRVJU
KGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKIAogICAgIGlmICghbV9pc0JtYWxsb2NFbmFibGVk
KSB7CkBAIC04MCw3ICs5MiwxMCBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBh
bGlnbm1lCiAgICAgICAgIHJldHVybiBhbGxvY2F0ZShyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdu
bWVudCwgc2l6ZSkpOwogCiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBl
clByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+Ojpn
ZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAg
SGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCk7CisgICAgaWYgKGNy
YXNoT25GYWlsdXJlKQorICAgICAgICByZXR1cm4gaGVhcC0+YWxsb2NhdGVMYXJnZShsb2NrLCBh
bGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBoZWFwLT50cnlBbGxvY2F0ZUxhcmdlKGxvY2ss
IGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxvY2F0ZSh2b2lk
KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
bGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MywxMiArNDMsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCog
dHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZv
aWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogYWxs
b2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiByZWFsbG9jYXRlKHZv
aWQqLCBzaXplX3QpOwogCiAgICAgdm9pZCBzY2F2ZW5nZSgpOwogCiBwcml2YXRlOgorICAgIHZv
aWQqIGFsbG9jYXRlSW1wbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIGJvb2wgY3Jhc2hPbkZh
aWx1cmUpOworICAgIAogICAgIGJvb2wgYWxsb2NhdGVGYXN0Q2FzZShzaXplX3QsIHZvaWQqJik7
CiAgICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwogICAgIApJbmRleDogU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQ2FjaGUuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0
ZShzaXplX3QpOworICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50
LCBzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBz
aXplX3QpOwogICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCopOwogICAgIHN0YXRpYyB2
b2lkKiByZWFsbG9jYXRlKHZvaWQqLCBzaXplX3QpOwpAQCAtNzksNiArODAsMTQgQEAgaW5saW5l
IHZvaWQqIENhY2hlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZQogICAgIHJldHVybiBjYWNoZS0+YWxs
b2NhdG9yKCkuYWxsb2NhdGUoc2l6ZSk7CiB9CiAKK2lubGluZSB2b2lkKiBDYWNoZTo6dHJ5QWxs
b2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgQ2FjaGUqIGNhY2hl
ID0gUGVyVGhyZWFkPENhY2hlPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoIWNhY2hlKQorICAg
ICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShhbGlnbm1lbnQsIHNpemUpOwor
ICAgIHJldHVybiBjYWNoZS0+YWxsb2NhdG9yKCkudHJ5QWxsb2NhdGUoYWxpZ25tZW50LCBzaXpl
KTsKK30KKwogaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBz
aXplX3Qgc2l6ZSkKIHsKICAgICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRG
YXN0Q2FzZSgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHJldmlzaW9uIDIwMzY5
OSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQzLDYgKzQzLDEyIEBAIGlubGluZSB2b2lkKiBtYWxsb2Moc2l6ZV90IHNpemUpCiAgICAg
cmV0dXJuIENhY2hlOjphbGxvY2F0ZShzaXplKTsKIH0KIAorLy8gUmV0dXJucyBudWxsIG9uIGZh
aWx1cmUuCitpbmxpbmUgdm9pZCogdHJ5TWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpCit7CisgICAgcmV0dXJuIENhY2hlOjp0cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUp
OworfQorCiAvLyBDcmFzaGVzIG9uIGZhaWx1cmUuCiBpbmxpbmUgdm9pZCogbWVtYWxpZ24oc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284728</attachid>
            <date>2016-07-27 14:01:57 -0700</date>
            <delta_ts>2016-07-28 10:37:34 -0700</delta_ts>
            <desc>starting to get quite solid</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>95607</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc3MSw3ICszNzcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzaXplLCBtX291
dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZVZhcmlh
YmxlU2l6ZWRPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAgICAgICAgICBzaXplLCBz
dHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKHNpemUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQ
YXRoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgu
dmFsdWUsIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7CkBAIC00
MDY3LDkgKzQwNjcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlT
aXplID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5jb25z
dEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChi
dXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAgICAgICB2bSgpLmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIExW
YWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBmYWlsQ2Fz
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5z
dWIoZW5kT2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBvYmpl
Y3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENh
c2UpOwogICAgICAgICAgICAgCkBAIC02OTQ3LDExICs2OTQ5LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFu
ZEdldEVuZChidXR0ZXJmbHlTaXplLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgTFZhbHVl
IHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIGJ1
dHRlcmZseVNpemUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwog
CiAgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gaW5kZXhpbmdIZWFkZXJTaXplKSk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0T2ZTdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSk7CiAKICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAg
ICAgICAgICAgICAgIApAQCAtNzc0NSwxMCArNzc0OSwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBpbml0aWFsaXplQXJyYXlFbGVtZW50cyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBMVmFs
dWUgdmVjdG9yTGVuZ3RoLCBMVmFsdWUgYnV0dGVyZmx5KQogICAgIHsKLSAgICAgICAgaWYgKCFo
YXNEb3VibGUoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgLy8gVGhlIEdDIGFscmVhZHkg
aW5pdGlhbGl6ZWQgZXZlcnl0aGluZyB0byBKU1ZhbHVlKCkgZm9yIHVzLgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgICAgIExWYWx1ZSBob2xlOworICAgICAgICBpZiAoaGFz
RG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBob2xlID0gbV9vdXQuY29uc3RJbnQ2
NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBob2xlID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSk7CiAK
ICAgICAgICAgLy8gRG91YmxlcyBtdXN0IGJlIGluaXRpYWxpemVkIHRvIFBOYU4uCiAgICAgICAg
IExCYXNpY0Jsb2NrIGluaXRMb29wID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTc3NjMsOSArNzc2
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwg
b3JpZ2luYWxJbmRleCk7CiAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKHBvaW50
ZXJUeXBlKCksIG9yaWdpbmFsUG9pbnRlcik7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZTY0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4o
UE5hTikpLAotICAgICAgICAgICAgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVBy
b3BlcnRpZXMuYXRBbnlJbmRleCgpLCBwb2ludGVyKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQo
aG9sZSwgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMuYXRBbnlJ
bmRleCgpLCBwb2ludGVyKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbmV4dEluZGV4ID0g
bV9vdXQuc3ViKGluZGV4LCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIG1fb3V0LmFkZEluY29t
aW5nVG9QaGkoaW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0SW5kZXgpKTsKQEAgLTc4MjYsMTIgKzc4
MjksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVl
KSksIHNsb3dQYXRoKTsKKworICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1
ZXMgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
ID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZUluQnl0ZXMpOworICAg
ICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0
SW50UHRyKCZhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQu
YWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3Jh
Z2UpKTsKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRl
cyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTg0MDEsNyAr
ODQwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAg
fQogCi0gICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9y
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nl
c3MgPSBtX291dC5uZXdCbG9jaygpOwogICAgIApAQCAtODQzNiw3ICs4NDQwLDcgQEAgcHJpdmF0
ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC04NDY0LDQ2ICs4NDY4LDU0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xv
d1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0g
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNp
emUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2UsIExW
YWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VT
dGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0
d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3Rl
cCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXBy
ZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVlIHN1
YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9m
VHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxD
YXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJnZU9y
T3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9j
ayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBMVmFs
dWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291
dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVj
aXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNp
emUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5j
b25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291dC5i
cmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVy
c2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
KTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAg
ICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBz
dWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5k
ZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0
ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1
ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9j
ayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikp
LAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQ
dHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxseShs
YXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFkZHJl
c3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1
YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQu
emVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0
TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291
dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNw
YWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxv
Y2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGko
cG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAgICAg
CisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3Is
IGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNp
emUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Js
b2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9v
dXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlVmFy
aWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgdm0o
KS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xvd1Bh
dGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1OTAsMjYgKzg2MDIsMjQg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0
ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAgICAg
TFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3Ro
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7CisgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEoCisgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1Bh
dGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigKLSAg
ICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUp
ICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQo
c3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikp
KTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0Fy
cmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CisgICAg
ICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291
dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9w
dWJsaWNMZW5ndGgpOwogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIodmVj
dG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4p
KSwKLSAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExWYWx1
ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbV9v
dXQuc3RvcmU2NChob2xlLCBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRp
ZXNbaV0pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwgYnV0
dGVyZmx5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDE2ICs1MSwxNiBAQCBDb25zZXJ2YXRpdmVSb290czo6Q29uc2VydmF0aXZlUm9vdHMoTWFyCiBD
b25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3RzKCkKIHsKICAgICBpZiAobV9yb290
cyAhPSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxl
YXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSlNDZWxsKikpOworICAgICAgICBPU0Fs
bG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2Yo
SGVhcENlbGwqKSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogewogICAg
IHNpemVfdCBuZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkgPT0gaW5saW5lQ2FwYWNpdHkgPyBub25J
bmxpbmVDYXBhY2l0eSA6IG1fY2FwYWNpdHkgKiAyOwotICAgIEpTQ2VsbCoqIG5ld1Jvb3RzID0g
c3RhdGljX2Nhc3Q8SlNDZWxsKio+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KG5ld0Nh
cGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKSk7Ci0gICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3Rz
LCBtX3NpemUgKiBzaXplb2YoSlNDZWxsKikpOworICAgIEhlYXBDZWxsKiogbmV3Um9vdHMgPSBz
dGF0aWNfY2FzdDxIZWFwQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChuZXdD
YXBhY2l0eSAqIHNpemVvZihIZWFwQ2VsbCopKSk7CisgICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jv
b3RzLCBtX3NpemUgKiBzaXplb2YoSGVhcENlbGwqKSk7CiAgICAgaWYgKG1fcm9vdHMgIT0gbV9p
bmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jv
b3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICAgICAgT1NBbGxvY2F0b3I6
OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEhlYXBDZWxs
KikpOwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICBtX3Jvb3RzID0gbmV3Um9v
dHM7CiB9CkBAIC03MiwxMyArNzIsMTQgQEAgaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmdlbmVyaWNBZAogCiAgICAgbV9jb3BpZWRTcGFjZS0+cGluSWZOZWNlc3NhcnkocCk7CiAKLSAg
ICBpZiAoIUhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZpbHRlciwgKm1fYmxvY2tzLCBwKSkKKyAg
ICBwID0gSGVhcDo6ZmluZEdDT2JqZWN0UG9pbnRlcihmaWx0ZXIsICptX2Jsb2NrcywgcCk7Cisg
ICAgaWYgKCFwKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9zaXplID09IG1fY2FwYWNp
dHkpCiAgICAgICAgIGdyb3coKTsKIAotICAgIG1fcm9vdHNbbV9zaXplKytdID0gc3RhdGljX2Nh
c3Q8SlNDZWxsKj4ocCk7CisgICAgbV9yb290c1ttX3NpemUrK10gPSBiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBDb2RlQmxvY2tTZXQ7CitjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIEpJVFN0dWJSb3V0aW5l
U2V0OwotY2xhc3MgSlNDZWxsOwogCiBjbGFzcyBDb25zZXJ2YXRpdmVSb290cyB7CiBwdWJsaWM6
CkBAIC00NCwxMSArNDQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2
b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0Jik7CiAgICAgCiAgICAg
c2l6ZV90IHNpemUoKTsKLSAgICBKU0NlbGwqKiByb290cygpOworICAgIEhlYXBDZWxsKiogcm9v
dHMoKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZUNhcGFjaXR5
ID0gMTI4OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkgPSA4MTky
IC8gc2l6ZW9mKEpTQ2VsbCopOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2Fw
YWNpdHkgPSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWFya0hvb2s+CiAgICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgVGlueUJs
b29tRmlsdGVyLCBNYXJrSG9vayYpOwpAQCAtNTgsMTIgKzU4LDEyIEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdm9pZCBncm93KCk7CiAKLSAgICBKU0NlbGwqKiBtX3Jvb3RzOworICAgIEhlYXBDZWxs
KiogbV9yb290czsKICAgICBzaXplX3QgbV9zaXplOwogICAgIHNpemVfdCBtX2NhcGFjaXR5Owog
ICAgIE1hcmtlZEJsb2NrU2V0KiBtX2Jsb2NrczsKICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRT
cGFjZTsKLSAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOworICAgIEhl
YXBDZWxsKiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5XTsKIH07CiAKIGlubGluZSBzaXpl
X3QgQ29uc2VydmF0aXZlUm9vdHM6OnNpemUoKQpAQCAtNzEsNyArNzEsNyBAQCBpbmxpbmUgc2l6
ZV90IENvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKICAgICByZXR1cm4gbV9zaXplOwogfQogCi1p
bmxpbmUgSlNDZWxsKiogQ29uc2VydmF0aXZlUm9vdHM6OnJvb3RzKCkKK2lubGluZSBIZWFwQ2Vs
bCoqIENvbnNlcnZhdGl2ZVJvb3RzOjpyb290cygpCiB7CiAgICAgcmV0dXJuIG1fcm9vdHM7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkocmV2aXNpb24gMjAz
Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjksNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0g
Q29weVRva2VuIHsKLSAgICBCdXR0ZXJmbHlDb3B5VG9rZW4sCiAgICAgVHlwZWRBcnJheVZlY3Rv
ckNvcHlUb2tlbiwKICAgICBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sCiAgICAgRGlyZWN0QXJn
dW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5OCwxMiArNTk4LDYgQEAgdm9pZCBIZWFwOjpjb3B5
QmFja2luZ1N0b3JlcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QgPSBibG9jay0+d29ya0xpc3QoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ29weVdvcmtsaXN0SXRlbSBpdGVtIDogd29ya0xp
c3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS50b2tlbigpID09IEJ1
dHRlcmZseUNvcHlUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09i
amVjdDo6Y29weUJhY2tpbmdTdG9yZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGl0ZW0uY2VsbCgpLCBjb3B5VmlzaXRvciwgQnV0dGVyZmx5Q29weVRva2VuKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGl0ZW0uY2VsbCgpLT5tZXRob2RUYWJsZSgpLT5jb3B5QmFja2luZ1N0b3Jl
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0
b3IsIGl0ZW0udG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHVi
bGljOgogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3Vs
YXRpdmVKSVQ7CiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNWYWx1ZSk7IC8vIDAgZm9y
IGltbWVkaWF0ZSB2YWx1ZXMKLSAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU0NlbGwqKTsK
KyAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBIZWFwQ2VsbCopOwogCiAgICAgLy8gVGhpcyBj
b25zdGFudCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRlIGJldHdlZW4gY2hl
Y2tzIG9mIG91ciAKICAgICAvLyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVhcDo6aXNQYWdlZE91
dC4gRGVjcmVhc2luZyBpdCB3aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKQEAgLTEwNCw3ICsxMDQs
OCBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcnVuIGFmdGVyIHN0
b3BBbGxvY2F0aW9uKCkgaXMgY2FsbGVkIGFuZCAKICAgICAvLyBiZWZvcmUgbGl2ZW5lc3MgZGF0
YSBpcyBjbGVhcmVkIHRvIGJlIGFjY3VyYXRlLgotICAgIHN0YXRpYyBib29sIGlzUG9pbnRlckdD
T2JqZWN0KFRpbnlCbG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQmLCB2b2lkKiBwb2ludGVyKTsK
KyAgICBzdGF0aWMgdm9pZCogZmluZEdDT2JqZWN0UG9pbnRlcihUaW55Qmxvb21GaWx0ZXIsIE1h
cmtlZEJsb2NrU2V0Jiwgdm9pZCogcG9pbnRlcik7CisgICAgc3RhdGljIGJvb2wgaXNQb2ludGVy
R0NPYmplY3RKU0NlbGwoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIGNvbnN0IHZv
aWQqIHBvaW50ZXIpOwogICAgIHN0YXRpYyBib29sIGlzVmFsdWVHQ09iamVjdChUaW55Qmxvb21G
aWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiwgSlNWYWx1ZSk7CiAKICAgICB2b2lkIHdyaXRlQmFycmll
cihjb25zdCBKU0NlbGwqKTsKQEAgLTE1MCw3ICsxNTEsMTEgQEAgcHVibGljOgogICAgIE1hcmtl
ZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5
dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBN
YXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhEZXN0cnVjdG9yKHNpemVfdCBi
eXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5kZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVz
KTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gTWFya2VkQWxsb2NhdG9yJiBh
bGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKTsKKyAgICBNYXJrZWRBbGxvY2F0
b3ImIGFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29i
amVjdFNwYWNlLmF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBDb3BpZWRBbGxv
Y2F0b3ImIHN0b3JhZ2VBbGxvY2F0b3IoKSB7IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxvY2F0
b3IoKTsgfQorICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25l
ciwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVu
ZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSk7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJl
YWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCoqLCBzaXplX3QsIHNp
emVfdCk7CiAgICAgdm9pZCBhc2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lk
Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlz
aW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6aXNDb2xs
ZWN0aW5nKCkKICAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0
aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbjsKIH0KIAotaW5s
aW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQoraW5saW5lIEhlYXAqIEhl
YXA6OmhlYXAoY29uc3QgSGVhcENlbGwqIGNlbGwpCiB7CiAgICAgcmV0dXJuIE1hcmtlZEJsb2Nr
OjpibG9ja0ZvcihjZWxsKS0+aGVhcCgpOwogfQpAQCAtMTk5LDcgKzE5OSw3IEBAIGlubGluZSB2
b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q2xhc3NUeXBlPgotdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVz
KQoraW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykK
IHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQg
d2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVj
dC4KICAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlw
ZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZl
cnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjEw
LDcgKzIxMCw3IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCAKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBI
ZWFwOjpzdWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCitpbmxpbmUgTWFya2VkU3BhY2U6OlN1YnNw
YWNlJiBIZWFwOjpzdWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCiB7CiAgICAgLy8gSlNDZWxsOjpj
bGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0
b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xh
c3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYg
U3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIyMSw3ICsyMjEsNyBAQCBNYXJrZWRT
cGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENsYXNzVHlwZT4KLU1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZU
eXBlKHNpemVfdCBieXRlcykKK2lubGluZSBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRv
ckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0lu
Zm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8g
ZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBl
OjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0
dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIzMSw2ICsyMzEsMzcgQEAgTWFya2VkQWxsb2Nh
dG9yJiBIZWFwOjphbGxvY2F0b3JGb3JPYmplYwogICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmpl
Y3RXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxv
Y2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAg
ICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNwYWNlLmFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsK
KyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxs
b2NhdGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50
ZW5kZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3du
ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6
OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVz
KQoreworICAgIHZvaWQqIHJlc3VsdCA9IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlh
cnkoYnl0ZXMpOworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0Yo
IkpTQyBHQyBhbGxvY2F0aW5nICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIs
IGJ5dGVzLCBpbnRlbmRlZE93bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
aW50ZW5kZWRPd25lcik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUg
dm9pZCogSGVhcDo6dHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIs
IHZvaWQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICB2
b2lkKiBuZXdCYXNlID0gdHJ5QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6
ZSk7CisgICAgaWYgKCFuZXdCYXNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBtZW1j
cHkobmV3QmFzZSwgb2xkQmFzZSwgb2xkU2l6ZSk7CisgICAgcmV0dXJuIG5ld0Jhc2U7Cit9CisK
IGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBp
bnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiB7CiAgICAgQ2hlY2tl
ZEJvb2xlYW4gcmVzdWx0ID0gbV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0
cik7CkBAIC0zNTQsMjAgKzM4NSw0NiBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2so
c2l6ZV90IGNhCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmpl
Y3QoVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0
LCB2b2lkKiBwb2ludGVyKQoraW5saW5lIHZvaWQqIEhlYXA6OmZpbmRHQ09iamVjdFBvaW50ZXIo
VGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2
b2lkKiBwb2ludGVyKQogewogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9j
azo6YmxvY2tGb3IocG9pbnRlcik7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2Fz
dDxCaXRzPihjYW5kaWRhdGUpKSkgewogICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAhbWFy
a2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIAorICAgIGlmICghbWFy
a2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpID09IEhlYXBDZWxsOjpKU0Nl
bGwpIHsKKyAgICAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0gZWxzZQorICAgICAgICBwb2ludGVy
ID0gY2FuZGlkYXRlLT5jZWxsQWxpZ24ocG9pbnRlcik7CisKKyAgICBpZiAoIWNhbmRpZGF0ZS0+
aXNMaXZlQ2VsbChwb2ludGVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gcG9pbnRlcjsKK30KIAoraW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3RKU0Nl
bGwoVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0
LCBjb25zdCB2b2lkKiBwb2ludGVyKQoreworICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBN
YXJrZWRCbG9jazo6YmxvY2tGb3IocG9pbnRlcik7CisgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJp
dHdpc2VfY2FzdDxCaXRzPihjYW5kaWRhdGUpKSkgeworICAgICAgICBBU1NFUlQoIWNhbmRpZGF0
ZSB8fCAhbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9t
QWxpZ25lZChwb2ludGVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtYXJr
ZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpICE9IEhlYXBDZWxsOjpKU0NlbGwp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghY2FuZGlkYXRlLT5pc0xpdmVDZWxs
KHBvaW50ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM3OCw3ICs0MzUsNyBAQCBp
bmxpbmUgYm9vbCBIZWFwOjppc1ZhbHVlR0NPYmplY3QoVGlueUJsCiB7CiAgICAgaWYgKCF2YWx1
ZS5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc1BvaW50ZXJH
Q09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBzdGF0aWNfY2FzdDx2b2lkKj4odmFsdWUu
YXNDZWxsKCkpKTsKKyAgICByZXR1cm4gaXNQb2ludGVyR0NPYmplY3RKU0NlbGwoZmlsdGVyLCBt
YXJrZWRCbG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHZhbHVlLmFzQ2VsbCgpKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBi
bG9jay0+ZGlkUmV0aXJlQmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3Qg
Ynl0ZXMpCiB7CiAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRCbG9jayA9PSBtX25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAg
aW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFk
OwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qg
Ynl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRD
b2xsZWN0aW5nKHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkp
OwogICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2
b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0
ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFw
LT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0
IHx8ICFtX2N1cnJlbnRCbG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0g
dHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWls
dXJlKTsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNp
emVfdCBieXRlcykKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0
dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3Zv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBi
b29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQo
KTsKIApAQCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKAogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRp
ZEFsbG9jYXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRy
eUFsbG9jYXRlKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRD
b2xsZWN0aW5nKGJ5dGVzKTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwor
ICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAg
ICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgQVNTRVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxv
Y2sqIGJsb2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAg
ICBNYXJrZWRCbG9jayogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAo
IWJsb2NrKSB7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJl
c3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhv
dXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1NYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNp
emVfdCBieXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxv
Y2soc2l6ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9j
azo6YmxvY2tTaXplOwogICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykp
ICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMp
OwpAQCAtMTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9j
YXRlQmwKIAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDog
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwog
Ci0gICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXpl
LCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNy
ZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwog
fQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0
cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVz
dHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4g
bV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsK
QEAgLTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFs
bG9jYXRlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7Cisg
ICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJl
KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAg
dm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lk
KiB0cnlQb3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2Nr
KHNpemVfdCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZv
aWQgcmV0aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBA
IC0xMTMsMjEgKzExNiwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVh
cCogCiAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJs
b2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFko
IWhlYWQpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0
ZXMpOworICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAg
ICBtZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAg
cmV0dXJuIGhlYWQ7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRl
KHNpemVfdCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2Zy
ZWVMaXN0LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiBy
ZXN1bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAg
IG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0g
aGVhZC0+bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVz
KTsKLSNlbmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVh
ZCwgMHhDRCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDE0ICszNSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29sIGNv
bXB1dGVCYWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtlZEJs
b2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9y
QXR0cmlidXRlcyYgYXR0cmlidXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5Q3Jl
YXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRl
cykKIHsKICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5jZSsrOwogICAg
ICAgICBpZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxv
Y2sgQmFsYW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtlZEJsb2NrKiBi
bG9jayA9IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0
eSkpIE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVz
KTsKKyAgICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXpl
LCBjYXBhY2l0eSk7CisgICAgaWYgKCFibG9ja1NwYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1h
cmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKICAg
ICBoZWFwLmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJldHVybiBibG9jazsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTA5LDEwICsxMDksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBtdXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBz
dGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90
IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsK
KyAgICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9j
YXRvciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JB
dHRyaWJ1dGVzJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJs
b2NrKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7
CisgICAgICAgIHZvaWQqIGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRC
bG9jayogYmxvY2tGb3IoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZpcnN0
QXRvbSgpOwogICAgICAgICAKQEAgLTIzNiw2ICsyMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBhdG9tQWxpZ25tZW50
TWFzayk7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpjZWxsQWxpZ24o
dm9pZCogcCkKKyAgICB7CisgICAgICAgIEJpdHMgYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qml0
cz4ocCk7CisgICAgICAgIGJpdHMgLT0gYml0cyAlIGNlbGxTaXplKCk7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PHZvaWQqPihiaXRzKTsKKyAgICB9CisKICAgICBpbmxpbmUgTWFy
a2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2b2lkKiBwKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9j
YXN0PEJpdHM+KHApICYgYmxvY2tNYXNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZv
aWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0
ZUF1eGlsaWFyeShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVf
dCk7CiAKICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7
IHJldHVybiBtX2Rlc3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9i
amVjdHNXaXRob3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KQEAgLTE4
Miw2ICsxODMsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUF1eGlsaQog
ICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKGJ5dGVzKTsK
IH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXpl
X3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcykudHJ5
QWxsb2NhdGUoYnl0ZXMpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5l
IHZvaWQgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQog
ewogICAgIGZvckVhY2hTdWJzcGFjZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgs
MTAgKzExOCw0MiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCiAKIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMp
CiB7Ci0gICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAg
IEhlYXBDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOwogICAgIHNpemVf
dCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBhcHBlbmQocm9vdHNbaV0pOworICAgICAgICBhcHBl
bmRKU0NlbGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFw
cGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKiBoZWFwQ2VsbCkKK3sKKyAgICBpZiAoIWhl
YXBDZWxsKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFtX2lzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7CisgICAgCisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRN
YXJrZWQoaGVhcENlbGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTWFya2VkQmxvY2sq
IGJsb2NrID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGhlYXBDZWxsKTsKKyAgICBzd2l0Y2ggKGJs
b2NrLT5jZWxsS2luZCgpKSB7CisgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsOiB7CisgICAgICAg
IEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFqc0NlbGwtPnN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKwor
ICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhibG9jaywganNDZWxsKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5OiB7CisgICAg
ICAgIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChibG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9
IH0KIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCkBAIC0xNjgs
MTcgKzIwMCwzNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hCiAK
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKIHsKKyAg
ICBhcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCksIGNlbGwpOwor
fQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayogYmxv
Y2ssIEpTQ2VsbCogY2VsbCkKK3sKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwog
ICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAKICAgICBtX3Zpc2l0Q291bnQrKzsKLSAg
ICBtX2J5dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXpl
KCk7CisgICAgbV9ieXRlc1Zpc2l0ZWQgKz0gYmxvY2stPmNlbGxTaXplKCk7CiAgICAgbV9zdGFj
ay5hcHBlbmQoY2VsbCk7CiAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVy
KSkKICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQog
Cit2b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7Cisg
ICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGJhc2Up
KTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6bm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJs
b2NrKiBibG9jaykKK3sKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBtX2J5dGVzVmlzaXRlZCAr
PSBibG9jay0+Y2VsbFNpemUoKTsKK30KKwogY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZSB7CiBw
dWJsaWM6CiAgICAgU2V0Q3VycmVudENlbGxTY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgSlNDZWxsKiBjZWxsKQpAQCAtMjA0LDcgKzI1NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwog
CiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsK
LQorICAgIAogICAgIG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nID0gY2Vs
bC0+Y2VsbFN0YXRlKCk7CiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkQmxh
Y2spOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw4ICszNywxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJl
YWRTaGFyZWREYXRhOwogY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcFNu
YXBzaG90QnVpbGRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEpJVFdyaXRlQmFycmll
cjsKK2NsYXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplcjsKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CiBjbGFzcyBXZWFrUmVmZXJlbmNlSGFydmVz
dGVyOwpAQCAtMTA1LDYgKzEwNywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhcnZlc3RXZWFr
UmVmZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygp
OworICAgIAorICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNv
bWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KKyAgICAv
LyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgorICAgIHZv
aWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAogICAgIHZvaWQgY29weUxhdGVy
KEpTQ2VsbCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCkBAIC0xMjQsMTAgKzEz
MCwxMyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwog
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKEpTVmFsdWUpOyAvLyBUaGlz
IGlzIHByaXZhdGUgdG8gZW5jb3VyYWdlIGNsaWVudHMgdG8gdXNlIFdyaXRlQmFycmllcjxUPi4K
KyAgICB2b2lkIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKik7CiAgICAgdm9pZCBh
cHBlbmRIaWRkZW4oSlNWYWx1ZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1h
cmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIHZvaWQgYXBwZW5kVG9NYXJr
U3RhY2soSlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayos
IEpTQ2VsbCopOworICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKik7
CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAg
ICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZz
ZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNCArOTEsMyBAQCBpbnQgbWFp
bihpbnQsIGNoYXIqKikKICAgICByZXR1cm4gMDsKIH0KIAotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKKworLy8gQW4gQXV4
aWxpYXJ5IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBub3QgdHJ5IHRvIHJlYXNvbiBh
Ym91dCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0LCBvdGhlciB0aGFuIGludGVy
cHJldGluZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBiYXJyaWVyLiBJdCdzIE9LIHRv
IHVzZSB0aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55IG90aGVyIGtpbmQgb2YgZGF0
YSwgc28gbG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEoKS4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1YmxpYzoKKyAgICBBdXhpbGlhcnlC
YXJyaWVyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBBdXhpbGlh
cnlCYXJyaWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBt
X3ZhbHVlID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lk
IHNldChWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29uc3QgVCYgZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3QoKSB7IHJldHVybiAmbV92YWx1
ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0
V2l0aG91dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpOyB9CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlC
YXJyaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJIZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQXV4aWxpYXJ5QmFycmllcjxU
Pjo6QXV4aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2YWx1ZSkKK3sK
KyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7
CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eUlubGluZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMCArMzcsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmlu
aXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7Ci0gICAgdm9pZCogdGVtcDsKICAgICBz
aXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBSRUxFQVNF
X0FTU0VSVCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCBzaXplLCAm
dGVtcCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHZvaWQqIGJhc2UgPSB2bS5oZWFwLmFsbG9jYXRl
QXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIHNpemUpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTExOSw3ICsxMTgsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlD
YXBhY2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
ICAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVl
LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeVJl
YWxsb2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIsICZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXpl
KSkKKyAgICB0aGVCYXNlID0gdm0uaGVhcC50cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVk
T3duZXIsIHRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpOworICAgIGlmICghdGhlQmFzZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5
Q2FwYWNpdHkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbG9uZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw4ICs0OCw4IEBAIENsb25lZEFyZ3VtZW50cyogQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGUKICAg
ICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICB2b2lkKiB0ZW1wOwotICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
JnRlbXApKQorICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51
bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
IGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7CiAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAy
MDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UoVk0mIHYKICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hv
dWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRW
ZWN0b3JMZW5ndGguCiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsK
LSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4ob2xkVmVj
dG9yTGVuZ3RoLCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVjdG9yTGVuZ3RoIDw9IE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRoYXQgcmVxdWlyZWQgdmVjdG9y
IGxlbmd0aCBpcyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBmYXNoaW9uLgogICAgIGlm
IChjb3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2VkVmVjdG9yTGVuZ3RoKQpA
QCAtMjc5LDcgKzI4MCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0m
IHYKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5OwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBh
Y2l0eSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG5l
d1NpemUsICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5oZWFwLnRy
eUFsbG9jYXRlQXV4aWxpYXJ5KHRoaXMsIG5ld1NpemUpOworICAgICAgICBpZiAoIW5ld0FsbG9j
QmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFj
aXR5ID0gZGVzaXJlZENhcGFjaXR5OwogICAgIH0KQEAgLTMxNCwxMiArMzE2LDEyIEBAIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICB9IGVsc2UgaWYgKChuZXdB
bGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSh2bSkpKSB8fCAobmV3SW5kZXhC
aWFzICE9IHN0b3JhZ2UtPm1faW5kZXhCaWFzKSkgewogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIGJ1dHRlcmZseS0+cHJvcGVy
dHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1ZhbHVlKSAqIHByb3BlcnR5U2l6
ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwog
ICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBz
dG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0K
LSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBuZXdWZWN0b3IgPSBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVx
dWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7IGkrKykKLSAgICAgICAgICAg
IG5ld1ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAorICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogbmV3VmVjdG9yID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gdXNlZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0
aDsgaSsrKQorICAgICAgICBuZXdWZWN0b3JbaV0uY2xlYXIoKTsKKwogICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFz
OwogICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVy
Zmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlz
aW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTE5MSw4ICsxOTEsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1
dHRlcmZseShWCiAgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCAwLCAwLCB0cnVlLCBiYXNlSW5k
ZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwKICAgICAgICAgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAw
OwogICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgc3RvcmFnZS0+bV9pbmRl
eEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJl
dHVybiBidXR0ZXJmbHk7CiB9CkBAIC0yMTUsNiArMjE1LDkgQEAgaW5saW5lIEpTQXJyYXkqIEpT
QXJyYXk6OmNyZWF0ZShWTSYgdm0sIAogICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICBBU1NFUlQoCkBAIC0yMzUsMjcgKzIzOCwzMSBAQCBpbmxpbmUgSlNBcnJheSog
SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU3RvcmFnZSA9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAogICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5OwotICAgIGlmIChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkpIHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKTsKKyAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2UoaW5k
ZXhpbmdUeXBlKSkpIHsKICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFzVW5kZWNpZGVk
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpKTsKLQotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAo
IXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91
dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGhhc1VuZGVj
aWRlZChpbmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUp
CisgICAgICAgICAgICB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwg
aGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUpKTsKKworICAgICAgICB2b2lkKiB0ZW1wID0gdm0u
aGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgw
LCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7CisgICAgICAgIGlmICghdGVtcCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9m
TGluZVN0b3JhZ2UpOwogICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JM
ZW5ndGgpOwogICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3Ro
KTsKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewor
ICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAg
ICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3Ro
OyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHZv
aWQqIHRlbXA7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0
dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0
ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAgICAgaWYgKCF0ZW1wKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CiAgICAgICAgICpidXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgs
IHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSW5saW5lcy5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgs
NzcgKzg4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAg
IH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KENvcHlW
aXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXpl
KQotewotICAgIEFTU0VSVChidXR0ZXJmbHkpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAgCi0gICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFj
aXR5OwotICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKLSAgICBib29sIGhh
c0luZGV4aW5nSGVhZGVyID0gdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKLSAgICBpZiAoVU5M
SUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOwotICAgICAgICBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBwcmVDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
ID0gMDsKLSAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90
YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91
bGRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpKSB7
Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmlu
aXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
LQotICAgICAgICAvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzLgotICAgICAgICBQcm9wZXJ0eVN0b3Jh
Z2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKTsKLSAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQt
LTspCi0gICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmll
cigoLS1jdXJyZW50U291cmNlKS0+Z2V0KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKFVOTElL
RUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewotICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIENvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7Ci0gICAg
ICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAo
dGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAg
IGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEo
KTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAg
IGNvdW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAg
ICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJn
ZXQgPSAwOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSAwOwotICAgICAgICAgICAg
ICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbWVtY3B5KGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1f
YnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKG5ld0J1dHRlcmZseSk7Ci0gICAgICAgIHZpc2l0
b3IuZGlkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkp
LCBjYXBhY2l0eUluQnl0ZXMpOwotICAgIH0gCi19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKU09i
amVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0
dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsK
QEAgLTE3NSwxMyArMTA0LDE2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRC
dXR0ZXIKICAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyA9IDA7CiAgICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBIZWFwQ2Vs
bCogYmFzZSA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpOworCisgICAgQVNTRVJUKEhlYXA6OmhlYXAoYmFzZSkg
PT0gdmlzaXRvci5oZWFwKCkpOwogCisgICAgLy8gS2VlcCB0aGUgYnV0dGVyZmx5IGFsaXZlLgor
ICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShiYXNlKTsKKyAgICAKICAgICAvLyBNYXJrIHRoZSBw
cm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIHZpc2l0b3Iu
Y29weUxhdGVyKAotICAgICAgICB0aGlzLCBCdXR0ZXJmbHlDb3B5VG9rZW4sCi0gICAgICAgIGJ1
dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5C
eXRlcyk7CiAgICAgCiAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAg
c3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewpAQCAtMjI1LDE5ICsxNTcsNiBAQCB2b2lk
IEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYKIH0KIAotdm9pZCBK
U09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNp
dG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0KLSAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlz
T2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7Ci19Ci0KIHZvaWQgSlNPYmplY3Q6OmhlYXBTbmFw
c2hvdChKU0NlbGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxkZXIpCiB7CiAgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTgwNyw2
ICs3MjYsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiB7CiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2
bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7CiAgICAgc2V0U3RydWN0
dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0
dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CkBAIC04MjcsNiArNzQ4LDggQEAg
Q29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogewogICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUlu
aXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07
KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTg0OSw2ICs3NzIsOCBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigp
OwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2lu
ZGV4QmlhcyA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAg
ICAgICAgcmVzdWx0LT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUo
KSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dlc3RlZEFycmF5U3RvcmFn
ZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1
Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg2Miw2ICs3ODcs
MTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycgogQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAg
ICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRp
Z3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAg
IHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwogICAg
IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiB9CkBAIC04ODEs
NiArODExLDExIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWMKIENv
bnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhW
TSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7
CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGln
dW91cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOwogfQpA
QCAtOTE3LDcgKzg1Miw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lk
ZWQKIAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0
b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0
ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwot
ICAgIC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50cy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCB0cmFuc2l0aW9uKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5l
d1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOwpAQCAtOTM4LDExICs4NzUsMTIgQEAg
Q29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtp
XTsKICAgICAgICAgZG91YmxlKiBjdXJyZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91Ymxl
Kj4oY3VycmVudCk7CiAgICAgICAgIEpTVmFsdWUgdiA9IGN1cnJlbnQtPmdldCgpOwotICAgICAg
ICBpZiAoIXYpIHsKKyAgICAgICAgLy8gTk9URTogU2luY2UgdGhpcyBtYXkgYmUgdXNlZCBkdXJp
bmcgaW5pdGlhbGl6YXRpb24sIHYgY291bGQgYmUgZ2FyYmFnZS4gSWYgaXQncyBnYXJiYWdlLAor
ICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAg
ICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICpjdXJyZW50QXNEb3VibGUgPSBQ
TmFOOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHYu
aXNJbnQzMigpKTsKICAgICAgICAgKmN1cnJlbnRBc0RvdWJsZSA9IHYuYXNJbnQzMigpOwogICAg
IH0KICAgICAKQEAgLTk2NiwxMyArOTA0LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnZlcnRJbnQzMlRvQXIKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5n
ZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29u
c3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVj
dG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKysp
IHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBpZiAodikKICAgICAgICAgICAg
IG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsK
ICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0x
MDE0LDEzICs5NTAsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRv
QQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JM
ZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0
ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwog
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBk
b3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAg
aWYgKHZhbHVlID09IHZhbHVlKSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHZhbHVlKSk7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAg
ICAgaWYgKHZhbHVlID09IHZhbHVlKQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEwNDEsMTMgKzk3NSwxMSBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3Rv
cmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRD
b3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3
U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAg
bmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAg
ICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2
bSksIHRyYW5zaXRpb24pOwpAQCAtMjc1NCw2ICsyNjg2LDggQEAgYm9vbCBKU09iamVjdDo6aW5j
cmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsK
ICAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0
aDsgKytpKQorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3JbaV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0
VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIHNldEJ1dHRlcmZseVdpdGhv
dXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0yNzY4LDYgKzI3MDIsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxl
bmd0aChWTSYgCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3
VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5
V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwpAQCAtMjc5OSw4ICsy
NzM1LDEyIEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKIAogICAg
IGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpW2ldID0gUE5hTjsKKyAgICAg
ICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICB9IGVs
c2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdW
ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmNsZWFyKCk7CiAgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkFycmF5Q29u
dmVudGlvbnMuaCIKICNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJBdXhpbGlh
cnlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMu
aCIKLSNpbmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRl
ci5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0xMDMsNyAr
MTAzLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBl
c3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwg
Q29weVRva2VuKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBoZWFwU25hcHNo
b3QoSlNDZWxsKiwgSGVhcFNuYXBzaG90QnVpbGRlciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKQEAgLTc5Nyw3ICs3
OTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJm
bHkqID0gMCk7CiAgICAgICAgIAogICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3Im
LCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29weVZp
c2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOwogCiAgICAgLy8gQ2FsbCB0
aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFz
IGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC05
NDksNyArOTQ3LDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBBcnJheVN0b3Jh
Z2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coVk0mKTsKIAogcHJvdGVjdGVkOgotICAgIENvcHlC
YXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CisgICAgQXV4aWxpYXJ5QmFycmllcjxCdXR0
ZXJmbHkqPiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToKICAg
ICB1aW50MzJfdCBtX3BhZGRpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDYgKzI0LDcgQEAKICNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKICNkZWZpbmUgSlNPYmpl
Y3RJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxvb2t1cC5o
IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5
IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKICAgICBpZiAodmVj
dG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICB2b2lkKiB0ZW1wOwotICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
MCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1
eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpKTsKKyAgICBpZiAoIXRlbXApCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZl
Y3Rvckxlbmd0aCk7CiAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaW5pdGlhbExlbmd0
aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNyw3ICs0
MzcsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVj
dXRhYmxlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjppc1BvaW50ZXJHQ09i
amVjdEpTQ2VsbChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7CiAgICAgICAg
ICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6RXhlY3V0YWJsZTsKICAgICAg
ICAgICAgIHN0YWNrRnJhbWUuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBt
X2xpdmVDZWxsUG9pbnRlcnMuYWRkKGV4ZWN1dGFibGUpOwpJbmRleDogU291cmNlL1dURi93dGYv
RmFzdE1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA1LTIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTEsIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICog
YXJlIG1ldDoKQEAgLTk3LDYgKzk2LDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVf
dCBhbGlnbm1lbnQKICAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7
CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKSAKK3sKKyAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7
Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIF9hbGlnbmVkX2Zy
ZWUocCk7CkBAIC0xMTEsNiArMTE1LDEzIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVf
dCBhbGlnbm1lbnQKICAgICByZXR1cm4gcDsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxs
b2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHZvaWQqIHAgPSBudWxs
cHRyOworICAgIHBvc2l4X21lbWFsaWduKCZwLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVy
biBwOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBmcmVlKHAp
OwpAQCAtMjMxLDYgKzI0MiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxp
Z25tZW50CiAgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6bWVtYWxpZ24oYWxpZ25tZW50LCBzaXpl
KTsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6
ZV90IHNpemUpIAoreworICAgIHJldHVybiBibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKGFsaWdu
bWVudCwgc2l6ZSk7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAg
IGJtYWxsb2M6OmFwaTo6ZnJlZShwKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTUzLDYgKzUzLDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEZyZWUo
dm9pZCopOwogCiAvLyBBbGxvY2F0aW9ucyBmcm9tIGZhc3RBbGlnbmVkTWFsbG9jKCkgbXVzdCBi
ZSBmcmVlZCB1c2luZyBmYXN0QWxpZ25lZEZyZWUoKS4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
KiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCopOwog
CiBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqKTsK
QEAgLTEwNyw2ICsxMDgsNyBAQCB1c2luZyBXVEY6OmZhc3RNYWxsb2NTaXplOwogdXNpbmcgV1RG
OjpmYXN0UmVhbGxvYzsKIHVzaW5nIFdURjo6ZmFzdFN0ckR1cDsKIHVzaW5nIFdURjo6ZmFzdFpl
cm9lZE1hbGxvYzsKK3VzaW5nIFdURjo6dHJ5RmFzdEFsaWduZWRNYWxsb2M7CiB1c2luZyBXVEY6
OnRyeUZhc3RDYWxsb2M7CiB1c2luZyBXVEY6OnRyeUZhc3RNYWxsb2M7CiB1c2luZyBXVEY6OnRy
eUZhc3RaZXJvZWRNYWxsb2M7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3Bw
CShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsMTggQEAgdm9pZCogQWxsb2NhdG9yOjp0
cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZQogCiB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogeworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0
cnVlOworICAgIHJldHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFp
bHVyZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOworICAg
IHJldHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9
CisKK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplLCBib29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdv
KGFsaWdubWVudCkpOwogCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJsZWQpIHsKQEAgLTgwLDcg
KzkyLDEwIEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlKHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplKSk7
CiAKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFw
Pjo6bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCkt
PmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICBIZWFwKiBoZWFwID0g
UGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoY3Jhc2hPbkZhaWx1cmUp
CisgICAgICAgIHJldHVybiBoZWFwLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6
ZSk7CisgICAgcmV0dXJuIGhlYXAtPnRyeUFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBz
aXplKTsKIH0KIAogdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdCwgc2l6
ZV90IG5ld1NpemUpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQzLDEyICs0MywxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZShz
aXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2Nh
dGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7
CiAKICAgICB2b2lkIHNjYXZlbmdlKCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCogYWxsb2NhdGVJ
bXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAg
CiAgICAgYm9vbCBhbGxvY2F0ZUZhc3RDYXNlKHNpemVfdCwgdm9pZComKTsKICAgICB2b2lkKiBh
bGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5o
CShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQqIHRy
eUFsbG9jYXRlKHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7Cisg
ICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAg
ICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAg
c3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQqIHJlYWxsb2Nh
dGUodm9pZCosIHNpemVfdCk7CkBAIC03OSw2ICs4MCwxNCBAQCBpbmxpbmUgdm9pZCogQ2FjaGU6
OmFsbG9jYXRlKHNpemVfdCBzaXplCiAgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS5hbGxv
Y2F0ZShzaXplKTsKIH0KIAoraW5saW5lIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZShzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8
Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBh
bGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGNh
Y2hlLT5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiBpbmxp
bmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQog
ewogICAgIENhY2hlKiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7Cklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMs
MTIgQEAgaW5saW5lIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkKICAgICByZXR1cm4gQ2FjaGU6
OmFsbG9jYXRlKHNpemUpOwogfQogCisvLyBSZXR1cm5zIG51bGwgb24gZmFpbHVyZS4KK2lubGlu
ZSB2b2lkKiB0cnlNZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAg
ICByZXR1cm4gQ2FjaGU6OnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Cit9CisKIC8vIENy
YXNoZXMgb24gZmFpbHVyZS4KIGlubGluZSB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50
LCBzaXplX3Qgc2l6ZSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284788</attachid>
            <date>2016-07-28 10:37:34 -0700</date>
            <delta_ts>2016-07-28 14:00:37 -0700</delta_ts>
            <desc>so awesome</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>97143</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc3MSw3ICszNzcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzaXplLCBtX291
dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZVZhcmlh
YmxlU2l6ZWRPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAgICAgICAgICBzaXplLCBz
dHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKHNpemUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQ
YXRoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgu
dmFsdWUsIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7CkBAIC00
MDY3LDkgKzQwNjcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlT
aXplID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5jb25z
dEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChi
dXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAgICAgICB2bSgpLmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIExW
YWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBmYWlsQ2Fz
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5z
dWIoZW5kT2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBvYmpl
Y3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENh
c2UpOwogICAgICAgICAgICAgCkBAIC02OTQ3LDExICs2OTQ5LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFu
ZEdldEVuZChidXR0ZXJmbHlTaXplLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgTFZhbHVl
IHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIGJ1
dHRlcmZseVNpemUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwog
CiAgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gaW5kZXhpbmdIZWFkZXJTaXplKSk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0T2ZTdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSk7CiAKICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAg
ICAgICAgICAgICAgIApAQCAtNzc0NSwxMCArNzc0OSwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBpbml0aWFsaXplQXJyYXlFbGVtZW50cyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBMVmFs
dWUgdmVjdG9yTGVuZ3RoLCBMVmFsdWUgYnV0dGVyZmx5KQogICAgIHsKLSAgICAgICAgaWYgKCFo
YXNEb3VibGUoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgLy8gVGhlIEdDIGFscmVhZHkg
aW5pdGlhbGl6ZWQgZXZlcnl0aGluZyB0byBKU1ZhbHVlKCkgZm9yIHVzLgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgICAgIExWYWx1ZSBob2xlOworICAgICAgICBpZiAoaGFz
RG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBob2xlID0gbV9vdXQuY29uc3RJbnQ2
NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBob2xlID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSk7CiAK
ICAgICAgICAgLy8gRG91YmxlcyBtdXN0IGJlIGluaXRpYWxpemVkIHRvIFBOYU4uCiAgICAgICAg
IExCYXNpY0Jsb2NrIGluaXRMb29wID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTc3NjMsOSArNzc2
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwg
b3JpZ2luYWxJbmRleCk7CiAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKHBvaW50
ZXJUeXBlKCksIG9yaWdpbmFsUG9pbnRlcik7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZTY0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4o
UE5hTikpLAotICAgICAgICAgICAgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVBy
b3BlcnRpZXMuYXRBbnlJbmRleCgpLCBwb2ludGVyKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQo
aG9sZSwgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMuYXRBbnlJ
bmRleCgpLCBwb2ludGVyKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbmV4dEluZGV4ID0g
bV9vdXQuc3ViKGluZGV4LCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIG1fb3V0LmFkZEluY29t
aW5nVG9QaGkoaW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0SW5kZXgpKTsKQEAgLTc4MjYsMTIgKzc4
MjksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVl
KSksIHNsb3dQYXRoKTsKKworICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1
ZXMgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
ID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZUluQnl0ZXMpOworICAg
ICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0
SW50UHRyKCZhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQu
YWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3Jh
Z2UpKTsKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRl
cyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTg0MDEsNyAr
ODQwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAg
fQogCi0gICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9y
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nl
c3MgPSBtX291dC5uZXdCbG9jaygpOwogICAgIApAQCAtODQzNiw3ICs4NDQwLDcgQEAgcHJpdmF0
ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC04NDY0LDQ2ICs4NDY4LDU0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xv
d1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0g
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNp
emUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2UsIExW
YWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VT
dGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0
d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3Rl
cCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXBy
ZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVlIHN1
YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9m
VHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxD
YXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJnZU9y
T3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9j
ayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBMVmFs
dWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291
dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVj
aXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNp
emUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5j
b25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291dC5i
cmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVy
c2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
KTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAg
ICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBz
dWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5k
ZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0
ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1
ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9j
ayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikp
LAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQ
dHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxseShs
YXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFkZHJl
c3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1
YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQu
emVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0
TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291
dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNw
YWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxv
Y2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGko
cG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAgICAg
CisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3Is
IGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNp
emUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Js
b2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9v
dXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlVmFy
aWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgdm0o
KS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xvd1Bh
dGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1OTAsMjYgKzg2MDIsMjQg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0
ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAgICAg
TFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3Ro
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7CisgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEoCisgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1Bh
dGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigKLSAg
ICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUp
ICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQo
c3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikp
KTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0Fy
cmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CisgICAg
ICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291
dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9w
dWJsaWNMZW5ndGgpOwogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIodmVj
dG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4p
KSwKLSAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExWYWx1
ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbV9v
dXQuc3RvcmU2NChob2xlLCBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRp
ZXNbaV0pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwgYnV0
dGVyZmx5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDE2
ICs1MSwxNiBAQCBDb25zZXJ2YXRpdmVSb290czo6Q29uc2VydmF0aXZlUm9vdHMoTWFyCiBDb25z
ZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3RzKCkKIHsKICAgICBpZiAobV9yb290cyAh
PSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNl
KG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSlNDZWxsKikpOworICAgICAgICBPU0FsbG9j
YXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSGVh
cENlbGwqKSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogewogICAgIHNp
emVfdCBuZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkgPT0gaW5saW5lQ2FwYWNpdHkgPyBub25Jbmxp
bmVDYXBhY2l0eSA6IG1fY2FwYWNpdHkgKiAyOwotICAgIEpTQ2VsbCoqIG5ld1Jvb3RzID0gc3Rh
dGljX2Nhc3Q8SlNDZWxsKio+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KG5ld0NhcGFj
aXR5ICogc2l6ZW9mKEpTQ2VsbCopKSk7Ci0gICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBt
X3NpemUgKiBzaXplb2YoSlNDZWxsKikpOworICAgIEhlYXBDZWxsKiogbmV3Um9vdHMgPSBzdGF0
aWNfY2FzdDxIZWFwQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChuZXdDYXBh
Y2l0eSAqIHNpemVvZihIZWFwQ2VsbCopKSk7CisgICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3Rz
LCBtX3NpemUgKiBzaXplb2YoSGVhcENlbGwqKSk7CiAgICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxp
bmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3Rz
LCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEhlYXBDZWxsKikp
OwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7
CiB9CkBAIC03MiwxMyArNzIsMTQgQEAgaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdl
bmVyaWNBZAogCiAgICAgbV9jb3BpZWRTcGFjZS0+cGluSWZOZWNlc3NhcnkocCk7CiAKLSAgICBp
ZiAoIUhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZpbHRlciwgKm1fYmxvY2tzLCBwKSkKKyAgICBw
ID0gSGVhcDo6ZmluZEdDT2JqZWN0UG9pbnRlcihmaWx0ZXIsICptX2Jsb2NrcywgcCk7CisgICAg
aWYgKCFwKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkp
CiAgICAgICAgIGdyb3coKTsKIAotICAgIG1fcm9vdHNbbV9zaXplKytdID0gc3RhdGljX2Nhc3Q8
SlNDZWxsKj4ocCk7CisgICAgbV9yb290c1ttX3NpemUrK10gPSBiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBD
b2RlQmxvY2tTZXQ7CitjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0Owot
Y2xhc3MgSlNDZWxsOwogCiBjbGFzcyBDb25zZXJ2YXRpdmVSb290cyB7CiBwdWJsaWM6CkBAIC00
NCwxMSArNDQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0Jik7CiAgICAgCiAgICAgc2l6ZV90
IHNpemUoKTsKLSAgICBKU0NlbGwqKiByb290cygpOworICAgIEhlYXBDZWxsKiogcm9vdHMoKTsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMTI4
OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkgPSA4MTkyIC8gc2l6
ZW9mKEpTQ2VsbCopOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+CiAgICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgVGlueUJsb29tRmls
dGVyLCBNYXJrSG9vayYpOwpAQCAtNTgsMTIgKzU4LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBncm93KCk7CiAKLSAgICBKU0NlbGwqKiBtX3Jvb3RzOworICAgIEhlYXBDZWxsKiogbV9y
b290czsKICAgICBzaXplX3QgbV9zaXplOwogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogICAgIE1h
cmtlZEJsb2NrU2V0KiBtX2Jsb2NrczsKICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsK
LSAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOworICAgIEhlYXBDZWxs
KiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5XTsKIH07CiAKIGlubGluZSBzaXplX3QgQ29u
c2VydmF0aXZlUm9vdHM6OnNpemUoKQpAQCAtNzEsNyArNzEsNyBAQCBpbmxpbmUgc2l6ZV90IENv
bnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKICAgICByZXR1cm4gbV9zaXplOwogfQogCi1pbmxpbmUg
SlNDZWxsKiogQ29uc2VydmF0aXZlUm9vdHM6OnJvb3RzKCkKK2lubGluZSBIZWFwQ2VsbCoqIENv
bnNlcnZhdGl2ZVJvb3RzOjpyb290cygpCiB7CiAgICAgcmV0dXJuIG1fcm9vdHM7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkocmV2aXNpb24gMjAzNjk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksNyArMjksNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gQ29weVRv
a2VuIHsKLSAgICBCdXR0ZXJmbHlDb3B5VG9rZW4sCiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlU
b2tlbiwKICAgICBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sCiAgICAgRGlyZWN0QXJndW1lbnRz
T3ZlcnJpZGVzQ29weVRva2VuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5OCwxMiArNTk4LDYgQEAgdm9pZCBIZWFwOjpjb3B5QmFja2lu
Z1N0b3JlcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QgPSBibG9jay0+d29ya0xpc3QoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoQ29weVdvcmtsaXN0SXRlbSBpdGVtIDogd29ya0xpc3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS50b2tlbigpID09IEJ1dHRlcmZs
eUNvcHlUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6
Y29weUJhY2tpbmdTdG9yZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
ZW0uY2VsbCgpLCBjb3B5VmlzaXRvciwgQnV0dGVyZmx5Q29weVRva2VuKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGl0ZW0uY2VsbCgpLT5tZXRob2RUYWJsZSgpLT5jb3B5QmFja2luZ1N0b3JlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3IsIGl0
ZW0udG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgog
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVK
SVQ7CiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNWYWx1ZSk7IC8vIDAgZm9yIGltbWVk
aWF0ZSB2YWx1ZXMKLSAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU0NlbGwqKTsKKyAgICBz
dGF0aWMgSGVhcCogaGVhcChjb25zdCBIZWFwQ2VsbCopOwogCiAgICAgLy8gVGhpcyBjb25zdGFu
dCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRlIGJldHdlZW4gY2hlY2tzIG9m
IG91ciAKICAgICAvLyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVhcDo6aXNQYWdlZE91dC4gRGVj
cmVhc2luZyBpdCB3aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKQEAgLTEwNCw3ICsxMDQsOCBAQCBw
dWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcnVuIGFmdGVyIHN0b3BBbGxv
Y2F0aW9uKCkgaXMgY2FsbGVkIGFuZCAKICAgICAvLyBiZWZvcmUgbGl2ZW5lc3MgZGF0YSBpcyBj
bGVhcmVkIHRvIGJlIGFjY3VyYXRlLgotICAgIHN0YXRpYyBib29sIGlzUG9pbnRlckdDT2JqZWN0
KFRpbnlCbG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQmLCB2b2lkKiBwb2ludGVyKTsKKyAgICBz
dGF0aWMgdm9pZCogZmluZEdDT2JqZWN0UG9pbnRlcihUaW55Qmxvb21GaWx0ZXIsIE1hcmtlZEJs
b2NrU2V0Jiwgdm9pZCogcG9pbnRlcik7CisgICAgc3RhdGljIGJvb2wgaXNQb2ludGVyR0NPYmpl
Y3RKU0NlbGwoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIGNvbnN0IHZvaWQqIHBv
aW50ZXIpOwogICAgIHN0YXRpYyBib29sIGlzVmFsdWVHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIs
IE1hcmtlZEJsb2NrU2V0JiwgSlNWYWx1ZSk7CiAKICAgICB2b2lkIHdyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqKTsKQEAgLTE1MCw3ICsxNTEsMTEgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9j
YXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7
IHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykg
eyByZXR1cm4gbV9vYmplY3RTcGFjZS5kZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0
b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNw
YWNlLmF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBDb3BpZWRBbGxvY2F0b3Im
IHN0b3JhZ2VBbGxvY2F0b3IoKSB7IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxvY2F0b3IoKTsg
fQorICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6
ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGlu
dGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6
ZSk7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5k
ZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2Nh
dGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCoqLCBzaXplX3QsIHNpemVfdCk7
CiAgICAgdm9pZCBhc2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6aXNDb2xsZWN0aW5n
KCkKICAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbjsKIH0KIAotaW5saW5lIEhl
YXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQoraW5saW5lIEhlYXAqIEhlYXA6Omhl
YXAoY29uc3QgSGVhcENlbGwqIGNlbGwpCiB7CiAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKS0+aGVhcCgpOwogfQpAQCAtMTk5LDcgKzE5OSw3IEBAIGlubGluZSB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NU
eXBlPgotdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQoraW5s
aW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKIHsKICAg
ICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBu
b3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KICAg
ICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3Ry
dWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxl
PENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjEwLDcgKzIx
MCw3IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCAKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpz
dWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCitpbmxpbmUgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBI
ZWFwOjpzdWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0lu
Zm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8g
ZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBl
OjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0
dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIyMSw3ICsyMjEsNyBAQCBNYXJrZWRTcGFjZTo6
U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNz
VHlwZT4KLU1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNp
emVfdCBieXRlcykKK2lubGluZSBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9i
amVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBl
eHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZl
IGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVk
c0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJ
bW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIzMSw2ICsyMzEsMzcgQEAgTWFya2VkQWxsb2NhdG9yJiBI
ZWFwOjphbGxvY2F0b3JGb3JPYmplYwogICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmplY3RXaXRo
b3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZUF1
eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lk
KiByZXN1bHQgPSBtX29iamVjdFNwYWNlLmFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBF
TkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGlu
ZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRP
d25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFs
bG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQorewor
ICAgIHZvaWQqIHJlc3VsdCA9IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoYnl0
ZXMpOworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBH
QyBhbGxvY2F0aW5nICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVz
LCBpbnRlbmRlZE93bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5k
ZWRPd25lcik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCog
SGVhcDo6dHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQq
IG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICB2b2lkKiBu
ZXdCYXNlID0gdHJ5QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7Cisg
ICAgaWYgKCFuZXdCYXNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBtZW1jcHkobmV3
QmFzZSwgb2xkQmFzZSwgb2xkU2l6ZSk7CisgICAgcmV0dXJuIG5ld0Jhc2U7Cit9CisKIGlubGlu
ZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRl
ZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiB7CiAgICAgQ2hlY2tlZEJvb2xl
YW4gcmVzdWx0ID0gbV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CkBA
IC0zNTQsMjAgKzM4NSw0NiBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2soc2l6ZV90
IGNhCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3QoVGlu
eUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lk
KiBwb2ludGVyKQoraW5saW5lIHZvaWQqIEhlYXA6OmZpbmRHQ09iamVjdFBvaW50ZXIoVGlueUJs
b29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lkKiBw
b2ludGVyKQogewogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tGb3IocG9pbnRlcik7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRz
PihjYW5kaWRhdGUpKSkgewogICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAhbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIAorICAgIGlmICghbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpID09IEhlYXBDZWxsOjpKU0NlbGwpIHsK
KyAgICAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0gZWxzZQorICAgICAgICBwb2ludGVyID0gY2Fu
ZGlkYXRlLT5jZWxsQWxpZ24ocG9pbnRlcik7CisKKyAgICBpZiAoIWNhbmRpZGF0ZS0+aXNMaXZl
Q2VsbChwb2ludGVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gcG9p
bnRlcjsKK30KIAoraW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3RKU0NlbGwoVGlu
eUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCBjb25z
dCB2b2lkKiBwb2ludGVyKQoreworICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRC
bG9jazo6YmxvY2tGb3IocG9pbnRlcik7CisgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2Vf
Y2FzdDxCaXRzPihjYW5kaWRhdGUpKSkgeworICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAh
bWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25l
ZChwb2ludGVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtYXJrZWRCbG9j
a1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpICE9IEhlYXBDZWxsOjpKU0NlbGwpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghY2FuZGlkYXRlLT5pc0xpdmVDZWxsKHBvaW50
ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM3OCw3ICs0MzUsNyBAQCBpbmxpbmUg
Ym9vbCBIZWFwOjppc1ZhbHVlR0NPYmplY3QoVGlueUJsCiB7CiAgICAgaWYgKCF2YWx1ZS5pc0Nl
bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc1BvaW50ZXJHQ09iamVj
dChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBzdGF0aWNfY2FzdDx2b2lkKj4odmFsdWUuYXNDZWxs
KCkpKTsKKyAgICByZXR1cm4gaXNQb2ludGVyR0NPYmplY3RKU0NlbGwoZmlsdGVyLCBtYXJrZWRC
bG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHZhbHVlLmFzQ2VsbCgpKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3
IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+
ZGlkUmV0aXJlQmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMp
CiB7CiAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRC
bG9jayA9PSBtX25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5l
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQog
Ci1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAg
IG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5
QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFt
X2N1cnJlbnRCbG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNs
b3dDYXNlKHNpemVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsK
KyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsK
K30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBi
eXRlcykKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFs
bG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBib29sIGNy
YXNoT25GYWlsdXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKIApA
QCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlKAogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRpZEFsbG9j
YXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9j
YXRlKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKGJ5dGVzKTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlP
ckRlZmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgICAg
ICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAgICAg
aWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgQVNT
RVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAgICBNYXJr
ZWRCbG9jayogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAoIWJsb2Nr
KSB7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJlc3VsdCA9
IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xs
ZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1NYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBi
eXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2soc2l6
ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplOwogICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpICsgV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwpAQCAt
MTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmwK
IAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDogV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwogCi0gICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxs
U2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNyZWF0ZSgq
bV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwogfQogCiB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rp
b247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFw
OyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsKQEAgLTcx
LDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRl
KHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CisgICAgdm9p
ZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAg
ICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAgdm9pZCog
dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lkKiB0cnlQ
b3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNpemVf
dCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZvaWQgcmV0
aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBAIC0xMTMs
MjEgKzExNiwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogCiAg
ICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJsb2NrOjpG
cmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFkoIWhlYWQp
KSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOwor
ICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1z
ZXQocmVzdWx0LCAweENELCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0dXJu
IGhlYWQ7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVf
dCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0
LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1bHQg
PSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1lbXNl
dChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+
bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKLSNl
bmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhD
RCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDE0ICszNSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29sIGNvbXB1dGVC
YWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtlZEJsb2NrKiBN
YXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
LCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmli
dXRlcyYgYXR0cmlidXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKEhl
YXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNp
emVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsK
ICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5jZSsrOwogICAgICAgICBp
ZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxvY2sgQmFs
YW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtlZEJsb2NrKiBibG9jayA9
IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0eSkpIE1h
cmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKKyAg
ICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBh
Y2l0eSk7CisgICAgaWYgKCFibG9ja1NwYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1hcmtlZEJs
b2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKICAgICBoZWFw
LmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJldHVybiBibG9jazsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjAzNjk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDEwICsxMDksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
dXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMg
TWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAg
ICAgc3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvcios
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1
dGVzJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7
CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CisgICAg
ICAgIHZvaWQqIGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayog
YmxvY2tGb3IoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZpcnN0QXRvbSgp
OwogICAgICAgICAKQEAgLTIzNiw2ICsyMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBhdG9tQWxpZ25tZW50TWFzayk7
CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpjZWxsQWxpZ24odm9pZCog
cCkKKyAgICB7CisgICAgICAgIEJpdHMgYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCk7
CisgICAgICAgIGJpdHMgLT0gYml0cyAlIGNlbGxTaXplKCk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihiaXRzKTsKKyAgICB9CisKICAgICBpbmxpbmUgTWFya2VkQmxv
Y2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2b2lkKiBwKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJp
dHM+KHApICYgYmxvY2tNYXNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFs
bG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZUF1eGls
aWFyeShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CiAK
ICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7IHJldHVy
biBtX2Rlc3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNX
aXRob3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KQEAgLTE4Miw2ICsx
ODMsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUF1eGlsaQogICAgIHJl
dHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKGJ5dGVzKTsKIH0KIAor
aW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0
ZXMpCit7CisgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcykudHJ5QWxsb2Nh
dGUoYnl0ZXMpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQg
TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAg
IGZvckVhY2hTdWJzcGFjZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsMTAgKzEx
OCw0MiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCiAKIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7Ci0g
ICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIEhlYXBD
ZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOwogICAgIHNpemVfdCBzaXpl
ID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBhcHBlbmQocm9vdHNbaV0pOworICAgICAgICBhcHBlbmRKU0Nl
bGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpT
Q2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKiBoZWFwQ2VsbCkKK3sKKyAgICBpZiAoIWhlYXBDZWxs
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbik7CisgICAgCisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQo
aGVhcENlbGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTWFya2VkQmxvY2sqIGJsb2Nr
ID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGhlYXBDZWxsKTsKKyAgICBzd2l0Y2ggKGJsb2NrLT5j
ZWxsS2luZCgpKSB7CisgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsOiB7CisgICAgICAgIEpTQ2Vs
bCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFqc0NlbGwtPnN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKworICAgICAg
ICBhcHBlbmRUb01hcmtTdGFjayhibG9jaywganNDZWxsKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5OiB7CisgICAgICAgIG5v
dGVMaXZlQXV4aWxpYXJ5Q2VsbChibG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KIH0K
IAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCkBAIC0xNjgsMTcgKzIw
MCwzNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hCiAKIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKIHsKKyAgICBhcHBl
bmRUb01hcmtTdGFjayhNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCksIGNlbGwpOworfQorCit2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayogYmxvY2ssIEpT
Q2VsbCogY2VsbCkKK3sKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFT
U0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAKICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5
dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7Cisg
ICAgbV9ieXRlc1Zpc2l0ZWQgKz0gYmxvY2stPmNlbGxTaXplKCk7CiAgICAgbV9zdGFjay5hcHBl
bmQoY2VsbCk7CiAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAg
ICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2b2lk
IFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgaWYg
KEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGJhc2UpKTsKK30K
Kwordm9pZCBTbG90VmlzaXRvcjo6bm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKiBi
bG9jaykKK3sKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBtX2J5dGVzVmlzaXRlZCArPSBibG9j
ay0+Y2VsbFNpemUoKTsKK30KKwogY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZSB7CiBwdWJsaWM6
CiAgICAgU2V0Q3VycmVudENlbGxTY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlND
ZWxsKiBjZWxsKQpAQCAtMjA0LDcgKzI1NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6dmlzaXRDaGkKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAgICAg
U2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKLQorICAg
IAogICAgIG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nID0gY2VsbC0+Y2Vs
bFN0YXRlKCk7CiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkQmxhY2spOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZp
c2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw4ICszNywxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFy
ZWREYXRhOwogY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcFNuYXBzaG90
QnVpbGRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEpJVFdyaXRlQmFycmllcjsKK2Ns
YXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplcjsKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CiBjbGFzcyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyOwpA
QCAtMTA1LDYgKzEwNywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJl
bmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAg
IAorICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6
ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KKyAgICAvLyB0aGlz
IHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgorICAgIHZvaWQgbWFy
a0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAogICAgIHZvaWQgY29weUxhdGVyKEpTQ2Vs
bCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCkBAIC0xMjQsMTAgKzEzMCwxMyBA
QCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKEpTVmFsdWUpOyAvLyBUaGlzIGlzIHBy
aXZhdGUgdG8gZW5jb3VyYWdlIGNsaWVudHMgdG8gdXNlIFdyaXRlQmFycmllcjxUPi4KKyAgICB2
b2lkIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKik7CiAgICAgdm9pZCBhcHBlbmRI
aWRkZW4oSlNWYWx1ZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1hcmtlZEFu
ZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2so
SlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayosIEpTQ2Vs
bCopOworICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKik7CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShyZXZpc2lv
biAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0
cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNCArOTEsMyBAQCBpbnQgbWFpbihpbnQs
IGNoYXIqKikKICAgICByZXR1cm4gMDsKIH0KIAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKKworLy8gQW4gQXV4aWxpYXJ5
IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBub3QgdHJ5IHRvIHJlYXNvbiBhYm91dCB0
aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0LCBvdGhlciB0aGFuIGludGVycHJldGlu
ZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBiYXJyaWVyLiBJdCdzIE9LIHRvIHVzZSB0
aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55IG90aGVyIGtpbmQgb2YgZGF0YSwgc28g
bG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEoKS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1YmxpYzoKKyAgICBBdXhpbGlhcnlCYXJyaWVy
KCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBBdXhpbGlhcnlCYXJy
aWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVl
ID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHNldChW
TSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29uc3QgVCYgZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3QoKSB7IHJldHVybiAmbV92YWx1ZTsgfQor
ICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFs
dWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0V2l0aG91
dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOyB9
CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1
eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQXV4aWxpYXJ5QmFycmllcjxUPjo6QXV4
aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2YWx1ZSkKK3sKKyAgICBt
X3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmll
cihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBV
Pgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBV
JiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGlu
ZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMCArMzcsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7Ci0gICAgdm9pZCogdGVtcDsKICAgICBzaXplX3Qg
c2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCBzaXplLCAmdGVtcCkp
OwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpOworICAgIHZvaWQqIGJhc2UgPSB2bS5oZWFwLmFsbG9jYXRlQXV4aWxp
YXJ5KGludGVuZGVkT3duZXIsIHNpemUpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJh
c2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTExOSw3ICsxMTgsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0
eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
aGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBz
aXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeVJlYWxsb2Nh
dGVTdG9yYWdlKGludGVuZGVkT3duZXIsICZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAg
ICB0aGVCYXNlID0gdm0uaGVhcC50cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIs
IHRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpOworICAgIGlmICghdGhlQmFzZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNp
dHkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiAr
NDgsMTUgQEAgQ2xvbmVkQXJndW1lbnRzKiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZQogICAgIGlm
ICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHZvaWQqIHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVt
cCkpCisgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0
ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYg
KCF0ZW1wKQogICAgICAgICByZXR1cm4gMDsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAKICAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9
CiAgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPENsb25lZEFyZ3VtZW50cz4odm0u
aGVhcCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsOCBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93
IGxhcmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4
IHJlcXVpcmVkVmVjdG9yTGVuZ3RoLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0g
bWluKG9sZFZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVp
cmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlv
bi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rv
ckxlbmd0aCkKQEAgLTI3OSw3ICsyODAsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKFZNJiB2CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0
eTsKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihk
ZXNpcmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFn
ZSh0aGlzLCBuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgbmV3QWxsb2NCYXNlID0g
dm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBuZXdTaXplKTsKKyAgICAgICAgaWYg
KCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0
b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKICAgICB9CkBAIC0zMTQsMTIgKzMxNiwx
MiBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgfSBlbHNl
IGlmICgobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUodm0pKSkgfHwg
KG5ld0luZGV4QmlhcyAhPSBzdG9yYWdlLT5tX2luZGV4QmlhcykpIHsKICAgICAgICAgbWVtbW92
ZShuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBidXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBzaXplb2YoSlNWYWx1ZSkgKiBw
cm9wZXJ0eVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKICAgICAgICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3Rvciwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0b3JM
ZW5ndGgpOwotCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogbmV3VmVjdG9yID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyBpKyspCi0g
ICAgICAgICAgICBuZXdWZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAKKyAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIG5ld1ZlY3RvciA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOworICAgIGZvciAodW5zaWduZWQgaSA9IHVzZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdW
ZWN0b3JMZW5ndGg7IGkrKykKKyAgICAgICAgbmV3VmVjdG9yW2ldLmNsZWFyKCk7CisKICAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVu
Z3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5l
d0luZGV4QmlhczsKICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0s
IG5ld0J1dHRlcmZseSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC0xOTEsOCArMTkxLDggQEAgaW5saW5lIEJ1dHRlcmZseSogY3Jl
YXRlQXJyYXlCdXR0ZXJmbHkoVgogICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1
ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCksCiAgICAgICAgIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RPUl9MRU4pKTsKICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgIHN0b3Jh
Z2UtPm1faW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
MDsKICAgICByZXR1cm4gYnV0dGVyZmx5OwogfQpAQCAtMjE1LDYgKzIxNSw5IEBAIGlubGluZSBK
U0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCAKICAgICAgICAgaWYgKGhhc0RvdWJsZShz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAg
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKApAQCAtMjM1LDMzICsyMzgsMzkgQEAgaW5saW5l
IEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdAogICAgIHVuc2lnbmVkIG91dE9mTGlu
ZVN0b3JhZ2UgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAKICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseTsKLSAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpKSB7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9
IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgaWYgKExJS0VMWSghaGFzQW55QXJyYXlT
dG9yYWdlKGluZGV4aW5nVHlwZSkpKSB7CiAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgIGhh
c1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFz
SW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgIHx8IGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzQ29udGlndW91
cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0KLSAgICAgICAgdm9pZCogdGVtcDsKLSAg
ICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzSW50MzIoaW5k
ZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSkKKyAgICAg
ICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CisKKyAgICAgICAgdm9pZCog
dGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICBpZiAoIXRlbXApCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaW5p
dGlhbExlbmd0aCk7Ci0gICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpIHsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKSB7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyAr
K2kpCiAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQ
TmFOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5p
dGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQotICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxp
YXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRy
dWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSk7CisgICAgICAgIGlmICgh
dGVtcCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwogICAgICAgICAq
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0
aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4Qmlh
cyA9IDA7CiAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgICAgIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVy
biBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZpc2lvbiAyMDM2
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNzcgKzg4LDYgQEAgc3RhdGljIGlubGluZSB2
b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFTU0VSVChidXR0ZXJmbHkp
OwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0g
ICAgCi0gICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gdGhpcy0+aGFz
SW5kZXhpbmdIZWFkZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7
Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVD
YXBhY2l0eShzdHJ1Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9
IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMo
c3RydWN0dXJlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0eSA9IDA7Ci0gICAg
ICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0gICAgc2l6ZV90IGNh
cGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2
aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBwcm9w
ZXJ0aWVzLgotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50
U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAgICAgICAoLS1jdXJyZW50
VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50U291cmNlKS0+Z2V0KCkp
OwotICAgICAgICAKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewot
ICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENvcHkgdGhl
IGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFM
TF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRF
WElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9
IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6IHsKLSAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5j
b3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAg
ICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAgICAgICAgICAgICAgIGN1
cnJlbnRTb3VyY2UgPSAwOwotICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5KGN1cnJlbnRU
YXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVy
KG5ld0J1dHRlcmZseSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0ZXJmbHktPmJhc2Uo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwotICAgIH0g
Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKQEAgLTE3NSwxMyArMTA0LDE2IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJlQ2FwYWNpdHkg
PSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAgICAgfQotICAg
IHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKyAgICAKKyAgICBIZWFwQ2VsbCogYmFzZSA9IGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpOwor
CisgICAgQVNTRVJUKEhlYXA6OmhlYXAoYmFzZSkgPT0gdmlzaXRvci5oZWFwKCkpOwogCisgICAg
Ly8gS2VlcCB0aGUgYnV0dGVyZmx5IGFsaXZlLgorICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShi
YXNlKTsKKyAgICAKICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6
ZSwgc3RvcmFnZVNpemUpOwotICAgIHZpc2l0b3IuY29weUxhdGVyKAotICAgICAgICB0aGlzLCBC
dXR0ZXJmbHlDb3B5VG9rZW4sCi0gICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAgCiAgICAgLy8gTWFyayB0
aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUo
KSkgewpAQCAtMjI1LDE5ICsxNTcsNiBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsCiAjZW5kaWYKIH0KIAotdm9pZCBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShK
U0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0g
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAgICBpZiAo
dG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAg
ICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0
b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7
Ci19Ci0KIHZvaWQgSlNPYmplY3Q6OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNlbGwsIEhlYXBTbmFw
c2hvdEJ1aWxkZXImIGJ1aWxkZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTgwNyw2ICs3MjYsOCBAQCBDb250aWd1b3VzSlNWYWx1
ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9y
YWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1
dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1Zh
bHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6
QWxsb2NhdGVJbnQzMik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1
Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91
c0ludDMyKCk7CkBAIC04MjcsNiArNzQ4LDggQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0
OjpjcmVhdGVJbml0aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVu
Z3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdC
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3Vv
dXMpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdC
dXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTg0
OSw2ICs3NzIsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAg
ICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJ
blZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAgZm9yIChzaXpl
X3QgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBz
dHJ1Y3R1cmUtPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTg2Miw2ICs3ODcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycgogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0
VW5kZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRl
eGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBp
LS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+
Y29udGlndW91c0ludDMyKCk7CiB9CkBAIC04ODEsNiArODExLDExIEBAIENvbnRpZ3VvdXNEb3Vi
bGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWMKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6
Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1Vu
ZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBtX2J1dHRl
cmZseS5nZXQoKS0+Y29udGlndW91cygpOwogfQpAQCAtOTE3LDcgKzg1Miw5IEBAIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKIAogICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWlu
Z0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIC8vIE5vIG5lZWQgdG8gY29weSBlbGVt
ZW50cy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1
ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKICAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVy
Zmx5KCkpOwpAQCAtOTM4LDExICs4NzUsMTIgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6
OmNvbnZlcnRJbnQzMgogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAm
YnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBjdXJyZW50
QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CiAgICAgICAgIEpTVmFs
dWUgdiA9IGN1cnJlbnQtPmdldCgpOwotICAgICAgICBpZiAoIXYpIHsKKyAgICAgICAgLy8gTk9U
RTogU2luY2UgdGhpcyBtYXkgYmUgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHYgY291bGQg
YmUgZ2FyYmFnZS4gSWYgaXQncyBnYXJiYWdlLAorICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IHdp
bGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAgICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAg
ICAgICAgICAgICpjdXJyZW50QXNEb3VibGUgPSBQTmFOOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHYuaXNJbnQzMigpKTsKICAgICAgICAgKmN1cnJl
bnRBc0RvdWJsZSA9IHYuYXNJbnQzMigpOwogICAgIH0KICAgICAKQEAgLTk2NiwxMyArOTA0LDEx
IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAg
QXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdl
V2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAg
ICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwor
ICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYp
OworICAgICAgICBpZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+
bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0xMDE0LDEzICs5NTAsMTEgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2Uq
IG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWlu
Z0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2
ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKSB7Ci0gICAg
ICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpT
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIG5ld1N0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpF
bmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKQogICAg
ICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0Vt
cHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9u
KTsKQEAgLTEwNDEsMTMgKzk3NSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
Q29udGlndW91CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCkt
PnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVj
dENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxl
bmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsr
KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAg
ICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAg
ICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0
aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdT
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAg
fQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMjc1NCw2
ICsyNjg2LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZl
Y3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0
aCk7CiAgICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3
QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzY4LDYgKzI3MDIsOCBAQCBi
b29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0luZGV4
QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAg
IGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxl
bmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBu
ZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZt
LCBuZXdCdXR0ZXJmbHkpOwpAQCAtMjc5OSw4ICsyNzM1LDEyIEBAIGJvb2wgSlNPYmplY3Q6OmVu
c3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKIAogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBl
KCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5l
d1ZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKCkuZGF0YSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgfQorCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSAi
QXJnTGlzdC5oIgogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJBcnJh
eVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQnV0
dGVyZmx5LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgi
CiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJDb3B5QmFycmllci5o
IgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIK
ICNpbmNsdWRlICJIZWFwLmgiCkBAIC0xMDMsNyArMTAzLDYgQEAgcHVibGljOgogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5QmFja2lu
Z1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBoZWFwU25hcHNob3QoSlNDZWxsKiwgSGVhcFNuYXBzaG90QnVp
bGRlciYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUo
Y29uc3QgSlNPYmplY3QqKTsKQEAgLTc5Nyw3ICs3OTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNP
YmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgIHZv
aWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsK
LSAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qg
c3RvcmFnZVNpemUpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9i
amVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhp
cyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC05NDksNyArOTQ3LDcgQEAgcHJpdmF0ZToKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3co
Vk0mKTsKIAogcHJvdGVjdGVkOgotICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJm
bHk7CisgICAgQXV4aWxpYXJ5QmFycmllcjxCdXR0ZXJmbHkqPiBtX2J1dHRlcmZseTsKICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3BhZGRpbmc7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMDYsIDIwMDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMDgsIDIwMDksIDIw
MTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0
LDYgKzI0LDcgQEAKICNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKICNkZWZpbmUgSlNPYmplY3RJ
bmxpbmVzX2gKIAorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hl
c0FycmF5LmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5IEBA
IEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKICAgICBpZiAodmVjdG9y
TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICB2b2lkKiB0ZW1wOwotICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwg
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0
cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGls
aWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKKyAgICBpZiAoIXRlbXApCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rv
ckxlbmd0aCk7CiAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaW5pdGlhbExlbmd0aCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNyw3ICs0Mzcs
NyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRh
YmxlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjppc1BvaW50ZXJHQ09iamVj
dEpTQ2VsbChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7CiAgICAgICAgICAg
ICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6RXhlY3V0YWJsZTsKICAgICAgICAg
ICAgIHN0YWNrRnJhbWUuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBtX2xp
dmVDZWxsUG9pbnRlcnMuYWRkKGV4ZWN1dGFibGUpOwpJbmRleDogU291cmNlL1dURi93dGYvRmFz
dE1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA1LTIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTEsIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJl
IG1ldDoKQEAgLTk3LDYgKzk2LDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBh
bGlnbm1lbnQKICAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7CiB9
CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplKSAKK3sKKyAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7Cit9
CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIF9hbGlnbmVkX2ZyZWUo
cCk7CkBAIC0xMTEsNiArMTE1LDEzIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBh
bGlnbm1lbnQKICAgICByZXR1cm4gcDsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Mo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHZvaWQqIHAgPSBudWxscHRy
OworICAgIHBvc2l4X21lbWFsaWduKCZwLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBw
OworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBmcmVlKHApOwpA
QCAtMjMxLDYgKzI0MiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25t
ZW50CiAgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6bWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsK
IH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpIAoreworICAgIHJldHVybiBibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKGFsaWdubWVu
dCwgc2l6ZSk7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIGJt
YWxsb2M6OmFwaTo6ZnJlZShwKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlzaW9uIDIwMzY5
OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTUzLDYgKzUzLDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEZyZWUodm9p
ZCopOwogCiAvLyBBbGxvY2F0aW9ucyBmcm9tIGZhc3RBbGlnbmVkTWFsbG9jKCkgbXVzdCBiZSBm
cmVlZCB1c2luZyBmYXN0QWxpZ25lZEZyZWUoKS4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiBm
YXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCopOwogCiBX
VEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqKTsKQEAg
LTEwNyw2ICsxMDgsNyBAQCB1c2luZyBXVEY6OmZhc3RNYWxsb2NTaXplOwogdXNpbmcgV1RGOjpm
YXN0UmVhbGxvYzsKIHVzaW5nIFdURjo6ZmFzdFN0ckR1cDsKIHVzaW5nIFdURjo6ZmFzdFplcm9l
ZE1hbGxvYzsKK3VzaW5nIFdURjo6dHJ5RmFzdEFsaWduZWRNYWxsb2M7CiB1c2luZyBXVEY6OnRy
eUZhc3RDYWxsb2M7CiB1c2luZyBXVEY6OnRyeUZhc3RNYWxsb2M7CiB1c2luZyBXVEY6OnRyeUZh
c3RaZXJvZWRNYWxsb2M7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsMTggQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZShzaXplX3Qgc2l6ZQogCiB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKQogeworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0cnVl
OworICAgIHJldHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVy
ZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IHNpemUpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOworICAgIHJl
dHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisK
K3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplLCBib29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFs
aWdubWVudCkpOwogCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJsZWQpIHsKQEAgLTgwLDcgKzky
LDEwIEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICAgICAg
cmV0dXJuIGFsbG9jYXRlKHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplKSk7CiAK
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6
bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmFs
bG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICBIZWFwKiBoZWFwID0gUGVy
UHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisg
ICAgICAgIHJldHVybiBoZWFwLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7
CisgICAgcmV0dXJuIGhlYXAtPnRyeUFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXpl
KTsKIH0KIAogdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90
IG5ld1NpemUpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQzLDEyICs0MywxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXpl
X3QpOwogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7CiAK
ICAgICB2b2lkIHNjYXZlbmdlKCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCogYWxsb2NhdGVJbXBs
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgCiAg
ICAgYm9vbCBhbGxvY2F0ZUZhc3RDYXNlKHNpemVfdCwgdm9pZComKTsKICAgICB2b2lkKiBhbGxv
Y2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQqIHRyeUFs
bG9jYXRlKHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAg
c3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAg
c3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUo
dm9pZCosIHNpemVfdCk7CkBAIC03OSw2ICs4MCwxNCBAQCBpbmxpbmUgdm9pZCogQ2FjaGU6OmFs
bG9jYXRlKHNpemVfdCBzaXplCiAgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS5hbGxvY2F0
ZShzaXplKTsKIH0KIAoraW5saW5lIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2Fj
aGU+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBhbGxv
Y2F0ZVNsb3dDYXNlTnVsbENhY2hlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGNhY2hl
LT5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiBpbmxpbmUg
dm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewog
ICAgIENhY2hlKiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMsMTIg
QEAgaW5saW5lIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkKICAgICByZXR1cm4gQ2FjaGU6OmFs
bG9jYXRlKHNpemUpOwogfQogCisvLyBSZXR1cm5zIG51bGwgb24gZmFpbHVyZS4KK2lubGluZSB2
b2lkKiB0cnlNZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBy
ZXR1cm4gQ2FjaGU6OnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Cit9CisKIC8vIENyYXNo
ZXMgb24gZmFpbHVyZS4KIGlubGluZSB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBz
aXplX3Qgc2l6ZSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284814</attachid>
            <date>2016-07-28 14:00:37 -0700</date>
            <delta_ts>2016-07-29 12:56:09 -0700</delta_ts>
            <desc>passing even more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>99304</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc3MSw3ICszNzcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzaXplLCBtX291
dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZVZhcmlh
YmxlU2l6ZWRPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAgICAgICAgICBzaXplLCBz
dHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKHNpemUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQ
YXRoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgu
dmFsdWUsIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7CkBAIC00
MDY3LDkgKzQwNjcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlT
aXplID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5jb25z
dEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChi
dXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAgICAgICB2bSgpLmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIExW
YWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBmYWlsQ2Fz
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5z
dWIoZW5kT2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBvYmpl
Y3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENh
c2UpOwogICAgICAgICAgICAgCkBAIC02OTQ3LDExICs2OTQ5LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFu
ZEdldEVuZChidXR0ZXJmbHlTaXplLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgTFZhbHVl
IHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIGJ1
dHRlcmZseVNpemUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwog
CiAgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gaW5kZXhpbmdIZWFkZXJTaXplKSk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0T2ZTdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSk7CiAKICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAg
ICAgICAgICAgICAgIApAQCAtNzc0NSwxMCArNzc0OSwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBpbml0aWFsaXplQXJyYXlFbGVtZW50cyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBMVmFs
dWUgdmVjdG9yTGVuZ3RoLCBMVmFsdWUgYnV0dGVyZmx5KQogICAgIHsKLSAgICAgICAgaWYgKCFo
YXNEb3VibGUoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgLy8gVGhlIEdDIGFscmVhZHkg
aW5pdGlhbGl6ZWQgZXZlcnl0aGluZyB0byBKU1ZhbHVlKCkgZm9yIHVzLgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgICAgIExWYWx1ZSBob2xlOworICAgICAgICBpZiAoaGFz
RG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBob2xlID0gbV9vdXQuY29uc3RJbnQ2
NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBob2xlID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSk7CiAK
ICAgICAgICAgLy8gRG91YmxlcyBtdXN0IGJlIGluaXRpYWxpemVkIHRvIFBOYU4uCiAgICAgICAg
IExCYXNpY0Jsb2NrIGluaXRMb29wID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTc3NjMsOSArNzc2
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwg
b3JpZ2luYWxJbmRleCk7CiAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKHBvaW50
ZXJUeXBlKCksIG9yaWdpbmFsUG9pbnRlcik7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZTY0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4o
UE5hTikpLAotICAgICAgICAgICAgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVBy
b3BlcnRpZXMuYXRBbnlJbmRleCgpLCBwb2ludGVyKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQo
aG9sZSwgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMuYXRBbnlJ
bmRleCgpLCBwb2ludGVyKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbmV4dEluZGV4ID0g
bV9vdXQuc3ViKGluZGV4LCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIG1fb3V0LmFkZEluY29t
aW5nVG9QaGkoaW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0SW5kZXgpKTsKQEAgLTc4MjYsMTIgKzc4
MjksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVl
KSksIHNsb3dQYXRoKTsKKworICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1
ZXMgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
ID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZUluQnl0ZXMpOworICAg
ICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0
SW50UHRyKCZhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQu
YWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3Jh
Z2UpKTsKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRl
cyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTg0MDEsNyAr
ODQwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAg
fQogCi0gICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9y
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nl
c3MgPSBtX291dC5uZXdCbG9jaygpOwogICAgIApAQCAtODQzNiw3ICs4NDQwLDcgQEAgcHJpdmF0
ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC04NDY0LDQ2ICs4NDY4LDU0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xv
d1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0g
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNp
emUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2UsIExW
YWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VT
dGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0
d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3Rl
cCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXBy
ZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVlIHN1
YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9m
VHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxD
YXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJnZU9y
T3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9j
ayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBMVmFs
dWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291
dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVj
aXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNp
emUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5j
b25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291dC5i
cmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVy
c2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
KTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAg
ICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBz
dWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5k
ZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0
ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1
ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9j
ayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikp
LAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQ
dHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxseShs
YXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFkZHJl
c3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1
YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQu
emVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0
TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291
dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNw
YWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxv
Y2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGko
cG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAgICAg
CisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3Is
IGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNp
emUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Js
b2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9v
dXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlVmFy
aWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgdm0o
KS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xvd1Bh
dGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1OTAsMjYgKzg2MDIsMjQg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0
ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAgICAg
TFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3Ro
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7CisgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEoCisgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1Bh
dGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigKLSAg
ICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUp
ICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQo
c3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikp
KTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0Fy
cmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CisgICAg
ICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291
dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9w
dWJsaWNMZW5ndGgpOwogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIodmVj
dG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4p
KSwKLSAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExWYWx1
ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbV9v
dXQuc3RvcmU2NChob2xlLCBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRp
ZXNbaV0pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwgYnV0
dGVyZmx5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDE2
ICs1MSwxNiBAQCBDb25zZXJ2YXRpdmVSb290czo6Q29uc2VydmF0aXZlUm9vdHMoTWFyCiBDb25z
ZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3RzKCkKIHsKICAgICBpZiAobV9yb290cyAh
PSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNl
KG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSlNDZWxsKikpOworICAgICAgICBPU0FsbG9j
YXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSGVh
cENlbGwqKSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogewogICAgIHNp
emVfdCBuZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkgPT0gaW5saW5lQ2FwYWNpdHkgPyBub25Jbmxp
bmVDYXBhY2l0eSA6IG1fY2FwYWNpdHkgKiAyOwotICAgIEpTQ2VsbCoqIG5ld1Jvb3RzID0gc3Rh
dGljX2Nhc3Q8SlNDZWxsKio+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KG5ld0NhcGFj
aXR5ICogc2l6ZW9mKEpTQ2VsbCopKSk7Ci0gICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBt
X3NpemUgKiBzaXplb2YoSlNDZWxsKikpOworICAgIEhlYXBDZWxsKiogbmV3Um9vdHMgPSBzdGF0
aWNfY2FzdDxIZWFwQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChuZXdDYXBh
Y2l0eSAqIHNpemVvZihIZWFwQ2VsbCopKSk7CisgICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3Rz
LCBtX3NpemUgKiBzaXplb2YoSGVhcENlbGwqKSk7CiAgICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxp
bmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3Rz
LCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEhlYXBDZWxsKikp
OwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7
CiB9CkBAIC03MiwxMyArNzIsMTQgQEAgaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdl
bmVyaWNBZAogCiAgICAgbV9jb3BpZWRTcGFjZS0+cGluSWZOZWNlc3NhcnkocCk7CiAKLSAgICBp
ZiAoIUhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZpbHRlciwgKm1fYmxvY2tzLCBwKSkKKyAgICBw
ID0gSGVhcDo6ZmluZEdDT2JqZWN0UG9pbnRlcihmaWx0ZXIsICptX2Jsb2NrcywgcCk7CisgICAg
aWYgKCFwKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkp
CiAgICAgICAgIGdyb3coKTsKIAotICAgIG1fcm9vdHNbbV9zaXplKytdID0gc3RhdGljX2Nhc3Q8
SlNDZWxsKj4ocCk7CisgICAgbV9yb290c1ttX3NpemUrK10gPSBiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBD
b2RlQmxvY2tTZXQ7CitjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0Owot
Y2xhc3MgSlNDZWxsOwogCiBjbGFzcyBDb25zZXJ2YXRpdmVSb290cyB7CiBwdWJsaWM6CkBAIC00
NCwxMSArNDQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0Jik7CiAgICAgCiAgICAgc2l6ZV90
IHNpemUoKTsKLSAgICBKU0NlbGwqKiByb290cygpOworICAgIEhlYXBDZWxsKiogcm9vdHMoKTsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMTI4
OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkgPSA4MTkyIC8gc2l6
ZW9mKEpTQ2VsbCopOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+CiAgICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgVGlueUJsb29tRmls
dGVyLCBNYXJrSG9vayYpOwpAQCAtNTgsMTIgKzU4LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBncm93KCk7CiAKLSAgICBKU0NlbGwqKiBtX3Jvb3RzOworICAgIEhlYXBDZWxsKiogbV9y
b290czsKICAgICBzaXplX3QgbV9zaXplOwogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogICAgIE1h
cmtlZEJsb2NrU2V0KiBtX2Jsb2NrczsKICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsK
LSAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOworICAgIEhlYXBDZWxs
KiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5XTsKIH07CiAKIGlubGluZSBzaXplX3QgQ29u
c2VydmF0aXZlUm9vdHM6OnNpemUoKQpAQCAtNzEsNyArNzEsNyBAQCBpbmxpbmUgc2l6ZV90IENv
bnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKICAgICByZXR1cm4gbV9zaXplOwogfQogCi1pbmxpbmUg
SlNDZWxsKiogQ29uc2VydmF0aXZlUm9vdHM6OnJvb3RzKCkKK2lubGluZSBIZWFwQ2VsbCoqIENv
bnNlcnZhdGl2ZVJvb3RzOjpyb290cygpCiB7CiAgICAgcmV0dXJuIG1fcm9vdHM7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkocmV2aXNpb24gMjAzNjk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksNyArMjksNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gQ29weVRv
a2VuIHsKLSAgICBCdXR0ZXJmbHlDb3B5VG9rZW4sCiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlU
b2tlbiwKICAgICBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sCiAgICAgRGlyZWN0QXJndW1lbnRz
T3ZlcnJpZGVzQ29weVRva2VuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5OCwxMiArNTk4LDYgQEAgdm9pZCBIZWFwOjpjb3B5QmFja2lu
Z1N0b3JlcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QgPSBibG9jay0+d29ya0xpc3QoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoQ29weVdvcmtsaXN0SXRlbSBpdGVtIDogd29ya0xpc3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS50b2tlbigpID09IEJ1dHRlcmZs
eUNvcHlUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6
Y29weUJhY2tpbmdTdG9yZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
ZW0uY2VsbCgpLCBjb3B5VmlzaXRvciwgQnV0dGVyZmx5Q29weVRva2VuKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGl0ZW0uY2VsbCgpLT5tZXRob2RUYWJsZSgpLT5jb3B5QmFja2luZ1N0b3JlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3IsIGl0
ZW0udG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgog
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVK
SVQ7CiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNWYWx1ZSk7IC8vIDAgZm9yIGltbWVk
aWF0ZSB2YWx1ZXMKLSAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU0NlbGwqKTsKKyAgICBz
dGF0aWMgSGVhcCogaGVhcChjb25zdCBIZWFwQ2VsbCopOwogCiAgICAgLy8gVGhpcyBjb25zdGFu
dCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRlIGJldHdlZW4gY2hlY2tzIG9m
IG91ciAKICAgICAvLyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVhcDo6aXNQYWdlZE91dC4gRGVj
cmVhc2luZyBpdCB3aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKQEAgLTEwNCw3ICsxMDQsOCBAQCBw
dWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcnVuIGFmdGVyIHN0b3BBbGxv
Y2F0aW9uKCkgaXMgY2FsbGVkIGFuZCAKICAgICAvLyBiZWZvcmUgbGl2ZW5lc3MgZGF0YSBpcyBj
bGVhcmVkIHRvIGJlIGFjY3VyYXRlLgotICAgIHN0YXRpYyBib29sIGlzUG9pbnRlckdDT2JqZWN0
KFRpbnlCbG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQmLCB2b2lkKiBwb2ludGVyKTsKKyAgICBz
dGF0aWMgdm9pZCogZmluZEdDT2JqZWN0UG9pbnRlcihUaW55Qmxvb21GaWx0ZXIsIE1hcmtlZEJs
b2NrU2V0Jiwgdm9pZCogcG9pbnRlcik7CisgICAgc3RhdGljIGJvb2wgaXNQb2ludGVyR0NPYmpl
Y3RKU0NlbGwoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIGNvbnN0IHZvaWQqIHBv
aW50ZXIpOwogICAgIHN0YXRpYyBib29sIGlzVmFsdWVHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIs
IE1hcmtlZEJsb2NrU2V0JiwgSlNWYWx1ZSk7CiAKICAgICB2b2lkIHdyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqKTsKQEAgLTE1MCw3ICsxNTEsMTEgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9j
YXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7
IHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykg
eyByZXR1cm4gbV9vYmplY3RTcGFjZS5kZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0
b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNw
YWNlLmF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBDb3BpZWRBbGxvY2F0b3Im
IHN0b3JhZ2VBbGxvY2F0b3IoKSB7IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxvY2F0b3IoKTsg
fQorICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6
ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGlu
dGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6
ZSk7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5k
ZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2Nh
dGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCoqLCBzaXplX3QsIHNpemVfdCk7
CiAgICAgdm9pZCBhc2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6aXNDb2xsZWN0aW5n
KCkKICAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbjsKIH0KIAotaW5saW5lIEhl
YXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQoraW5saW5lIEhlYXAqIEhlYXA6Omhl
YXAoY29uc3QgSGVhcENlbGwqIGNlbGwpCiB7CiAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKS0+aGVhcCgpOwogfQpAQCAtMTk5LDcgKzE5OSw3IEBAIGlubGluZSB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NU
eXBlPgotdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQoraW5s
aW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKIHsKICAg
ICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBu
b3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KICAg
ICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3Ry
dWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxl
PENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjEwLDcgKzIx
MCw3IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCAKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpz
dWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCitpbmxpbmUgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBI
ZWFwOjpzdWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0lu
Zm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8g
ZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBl
OjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0
dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIyMSw3ICsyMjEsNyBAQCBNYXJrZWRTcGFjZTo6
U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNz
VHlwZT4KLU1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNp
emVfdCBieXRlcykKK2lubGluZSBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9i
amVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBl
eHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZl
IGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVk
c0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJ
bW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIzMSw2ICsyMzEsMzcgQEAgTWFya2VkQWxsb2NhdG9yJiBI
ZWFwOjphbGxvY2F0b3JGb3JPYmplYwogICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmplY3RXaXRo
b3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZUF1
eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lk
KiByZXN1bHQgPSBtX29iamVjdFNwYWNlLmFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBF
TkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGlu
ZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRP
d25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFs
bG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQorewor
ICAgIHZvaWQqIHJlc3VsdCA9IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoYnl0
ZXMpOworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBH
QyBhbGxvY2F0aW5nICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVz
LCBpbnRlbmRlZE93bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5k
ZWRPd25lcik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCog
SGVhcDo6dHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQq
IG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICB2b2lkKiBu
ZXdCYXNlID0gdHJ5QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7Cisg
ICAgaWYgKCFuZXdCYXNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBtZW1jcHkobmV3
QmFzZSwgb2xkQmFzZSwgb2xkU2l6ZSk7CisgICAgcmV0dXJuIG5ld0Jhc2U7Cit9CisKIGlubGlu
ZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRl
ZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiB7CiAgICAgQ2hlY2tlZEJvb2xl
YW4gcmVzdWx0ID0gbV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CkBA
IC0zNTQsMjAgKzM4NSw0NiBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2soc2l6ZV90
IGNhCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3QoVGlu
eUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lk
KiBwb2ludGVyKQoraW5saW5lIHZvaWQqIEhlYXA6OmZpbmRHQ09iamVjdFBvaW50ZXIoVGlueUJs
b29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lkKiBw
b2ludGVyKQogewogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tGb3IocG9pbnRlcik7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRz
PihjYW5kaWRhdGUpKSkgewogICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAhbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIAorICAgIGlmICghbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpID09IEhlYXBDZWxsOjpKU0NlbGwpIHsK
KyAgICAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0gZWxzZQorICAgICAgICBwb2ludGVyID0gY2Fu
ZGlkYXRlLT5jZWxsQWxpZ24ocG9pbnRlcik7CisKKyAgICBpZiAoIWNhbmRpZGF0ZS0+aXNMaXZl
Q2VsbChwb2ludGVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gcG9p
bnRlcjsKK30KIAoraW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3RKU0NlbGwoVGlu
eUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCBjb25z
dCB2b2lkKiBwb2ludGVyKQoreworICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRC
bG9jazo6YmxvY2tGb3IocG9pbnRlcik7CisgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2Vf
Y2FzdDxCaXRzPihjYW5kaWRhdGUpKSkgeworICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAh
bWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25l
ZChwb2ludGVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtYXJrZWRCbG9j
a1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpICE9IEhlYXBDZWxsOjpKU0NlbGwpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghY2FuZGlkYXRlLT5pc0xpdmVDZWxsKHBvaW50
ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM3OCw3ICs0MzUsNyBAQCBpbmxpbmUg
Ym9vbCBIZWFwOjppc1ZhbHVlR0NPYmplY3QoVGlueUJsCiB7CiAgICAgaWYgKCF2YWx1ZS5pc0Nl
bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc1BvaW50ZXJHQ09iamVj
dChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBzdGF0aWNfY2FzdDx2b2lkKj4odmFsdWUuYXNDZWxs
KCkpKTsKKyAgICByZXR1cm4gaXNQb2ludGVyR0NPYmplY3RKU0NlbGwoZmlsdGVyLCBtYXJrZWRC
bG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHZhbHVlLmFzQ2VsbCgpKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3
IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+
ZGlkUmV0aXJlQmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMp
CiB7CiAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRC
bG9jayA9PSBtX25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5l
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQog
Ci1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAg
IG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5
QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFt
X2N1cnJlbnRCbG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNs
b3dDYXNlKHNpemVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsK
KyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsK
K30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBi
eXRlcykKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFs
bG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBib29sIGNy
YXNoT25GYWlsdXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKIApA
QCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlKAogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRpZEFsbG9j
YXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9j
YXRlKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKGJ5dGVzKTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlP
ckRlZmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgICAg
ICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAgICAg
aWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgQVNT
RVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAgICBNYXJr
ZWRCbG9jayogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAoIWJsb2Nr
KSB7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJlc3VsdCA9
IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xs
ZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1NYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBi
eXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2soc2l6
ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplOwogICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpICsgV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwpAQCAt
MTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmwK
IAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDogV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwogCi0gICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxs
U2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNyZWF0ZSgq
bV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwogfQogCiB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rp
b247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFw
OyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsKQEAgLTcx
LDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRl
KHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CisgICAgdm9p
ZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAg
ICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAgdm9pZCog
dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lkKiB0cnlQ
b3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNpemVf
dCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZvaWQgcmV0
aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBAIC0xMTMs
MjEgKzExNiwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogCiAg
ICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJsb2NrOjpG
cmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFkoIWhlYWQp
KSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOwor
ICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1z
ZXQocmVzdWx0LCAweENELCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0dXJu
IGhlYWQ7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVf
dCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0
LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1bHQg
PSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1lbXNl
dChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+
bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKLSNl
bmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhD
RCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDE0ICszNSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29sIGNvbXB1dGVC
YWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtlZEJsb2NrKiBN
YXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
LCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmli
dXRlcyYgYXR0cmlidXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKEhl
YXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNp
emVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsK
ICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5jZSsrOwogICAgICAgICBp
ZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxvY2sgQmFs
YW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtlZEJsb2NrKiBibG9jayA9
IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0eSkpIE1h
cmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKKyAg
ICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBh
Y2l0eSk7CisgICAgaWYgKCFibG9ja1NwYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1hcmtlZEJs
b2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKICAgICBoZWFw
LmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJldHVybiBibG9jazsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjAzNjk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDEwICsxMDksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
dXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMg
TWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAg
ICAgc3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvcios
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1
dGVzJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7
CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CisgICAg
ICAgIHZvaWQqIGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayog
YmxvY2tGb3IoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZpcnN0QXRvbSgp
OwogICAgICAgICAKQEAgLTIzNiw2ICsyMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBhdG9tQWxpZ25tZW50TWFzayk7
CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpjZWxsQWxpZ24odm9pZCog
cCkKKyAgICB7CisgICAgICAgIEJpdHMgYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCk7
CisgICAgICAgIGJpdHMgLT0gYml0cyAlIGNlbGxTaXplKCk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihiaXRzKTsKKyAgICB9CisKICAgICBpbmxpbmUgTWFya2VkQmxv
Y2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2b2lkKiBwKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJp
dHM+KHApICYgYmxvY2tNYXNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFs
bG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZUF1eGls
aWFyeShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CiAK
ICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7IHJldHVy
biBtX2Rlc3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNX
aXRob3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KQEAgLTE4Miw2ICsx
ODMsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUF1eGlsaQogICAgIHJl
dHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKGJ5dGVzKTsKIH0KIAor
aW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0
ZXMpCit7CisgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcykudHJ5QWxsb2Nh
dGUoYnl0ZXMpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQg
TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAg
IGZvckVhY2hTdWJzcGFjZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsMTAgKzEx
OCw0MiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCiAKIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7Ci0g
ICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIEhlYXBD
ZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOwogICAgIHNpemVfdCBzaXpl
ID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBhcHBlbmQocm9vdHNbaV0pOworICAgICAgICBhcHBlbmRKU0Nl
bGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpT
Q2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKiBoZWFwQ2VsbCkKK3sKKyAgICBpZiAoIWhlYXBDZWxs
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbik7CisgICAgCisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQo
aGVhcENlbGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTWFya2VkQmxvY2sqIGJsb2Nr
ID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGhlYXBDZWxsKTsKKyAgICBzd2l0Y2ggKGJsb2NrLT5j
ZWxsS2luZCgpKSB7CisgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsOiB7CisgICAgICAgIEpTQ2Vs
bCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFqc0NlbGwtPnN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKworICAgICAg
ICBhcHBlbmRUb01hcmtTdGFjayhibG9jaywganNDZWxsKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5OiB7CisgICAgICAgIG5v
dGVMaXZlQXV4aWxpYXJ5Q2VsbChibG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KIH0K
IAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCkBAIC0xNjgsMTcgKzIw
MCwzNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hCiAKIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKIHsKKyAgICBhcHBl
bmRUb01hcmtTdGFjayhNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCksIGNlbGwpOworfQorCit2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayogYmxvY2ssIEpT
Q2VsbCogY2VsbCkKK3sKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFT
U0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAKICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5
dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7Cisg
ICAgbV9ieXRlc1Zpc2l0ZWQgKz0gYmxvY2stPmNlbGxTaXplKCk7CiAgICAgbV9zdGFjay5hcHBl
bmQoY2VsbCk7CiAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAg
ICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2b2lk
IFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgaWYg
KEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGJhc2UpKTsKK30K
Kwordm9pZCBTbG90VmlzaXRvcjo6bm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKiBi
bG9jaykKK3sKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBtX2J5dGVzVmlzaXRlZCArPSBibG9j
ay0+Y2VsbFNpemUoKTsKK30KKwogY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZSB7CiBwdWJsaWM6
CiAgICAgU2V0Q3VycmVudENlbGxTY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlND
ZWxsKiBjZWxsKQpAQCAtMjA0LDcgKzI1NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6dmlzaXRDaGkKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAgICAg
U2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKLQorICAg
IAogICAgIG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nID0gY2VsbC0+Y2Vs
bFN0YXRlKCk7CiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkQmxhY2spOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZp
c2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw4ICszNywxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFy
ZWREYXRhOwogY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcFNuYXBzaG90
QnVpbGRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEpJVFdyaXRlQmFycmllcjsKK2Ns
YXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplcjsKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CiBjbGFzcyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyOwpA
QCAtMTA1LDYgKzEwNywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJl
bmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAg
IAorICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6
ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KKyAgICAvLyB0aGlz
IHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgorICAgIHZvaWQgbWFy
a0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAogICAgIHZvaWQgY29weUxhdGVyKEpTQ2Vs
bCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCkBAIC0xMjQsMTAgKzEzMCwxMyBA
QCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKEpTVmFsdWUpOyAvLyBUaGlzIGlzIHBy
aXZhdGUgdG8gZW5jb3VyYWdlIGNsaWVudHMgdG8gdXNlIFdyaXRlQmFycmllcjxUPi4KKyAgICB2
b2lkIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKik7CiAgICAgdm9pZCBhcHBlbmRI
aWRkZW4oSlNWYWx1ZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1hcmtlZEFu
ZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2so
SlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayosIEpTQ2Vs
bCopOworICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKik7CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShyZXZpc2lv
biAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0
cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNCArOTEsMyBAQCBpbnQgbWFpbihpbnQs
IGNoYXIqKikKICAgICByZXR1cm4gMDsKIH0KIAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKKworLy8gQW4gQXV4aWxpYXJ5
IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBub3QgdHJ5IHRvIHJlYXNvbiBhYm91dCB0
aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0LCBvdGhlciB0aGFuIGludGVycHJldGlu
ZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBiYXJyaWVyLiBJdCdzIE9LIHRvIHVzZSB0
aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55IG90aGVyIGtpbmQgb2YgZGF0YSwgc28g
bG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEoKS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1YmxpYzoKKyAgICBBdXhpbGlhcnlCYXJyaWVy
KCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBBdXhpbGlhcnlCYXJy
aWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVl
ID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHNldChW
TSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29uc3QgVCYgZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3QoKSB7IHJldHVybiAmbV92YWx1ZTsgfQor
ICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFs
dWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0V2l0aG91
dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOyB9
CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1
eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQXV4aWxpYXJ5QmFycmllcjxUPjo6QXV4
aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2YWx1ZSkKK3sKKyAgICBt
X3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmll
cihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBV
Pgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBV
JiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGlu
ZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMCArMzcsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7Ci0gICAgdm9pZCogdGVtcDsKICAgICBzaXplX3Qg
c2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCBzaXplLCAmdGVtcCkp
OwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpOworICAgIHZvaWQqIGJhc2UgPSB2bS5oZWFwLmFsbG9jYXRlQXV4aWxp
YXJ5KGludGVuZGVkT3duZXIsIHNpemUpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJh
c2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTExOSw3ICsxMTgsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0
eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
aGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBz
aXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeVJlYWxsb2Nh
dGVTdG9yYWdlKGludGVuZGVkT3duZXIsICZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAg
ICB0aGVCYXNlID0gdm0uaGVhcC50cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIs
IHRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpOworICAgIGlmICghdGhlQmFzZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNp
dHkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiAr
NDgsMTUgQEAgQ2xvbmVkQXJndW1lbnRzKiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZQogICAgIGlm
ICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHZvaWQqIHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVt
cCkpCisgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0
ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYg
KCF0ZW1wKQogICAgICAgICByZXR1cm4gMDsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAKICAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9
CiAgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPENsb25lZEFyZ3VtZW50cz4odm0u
aGVhcCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsOCBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93
IGxhcmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4
IHJlcXVpcmVkVmVjdG9yTGVuZ3RoLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0g
bWluKG9sZFZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVp
cmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlv
bi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rv
ckxlbmd0aCkKQEAgLTI3OSw3ICsyODAsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKFZNJiB2CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0
eTsKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihk
ZXNpcmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFn
ZSh0aGlzLCBuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgbmV3QWxsb2NCYXNlID0g
dm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBuZXdTaXplKTsKKyAgICAgICAgaWYg
KCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0
b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKICAgICB9CkBAIC0zMTQsMTIgKzMxNiwx
MiBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgfSBlbHNl
IGlmICgobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUodm0pKSkgfHwg
KG5ld0luZGV4QmlhcyAhPSBzdG9yYWdlLT5tX2luZGV4QmlhcykpIHsKICAgICAgICAgbWVtbW92
ZShuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBidXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBzaXplb2YoSlNWYWx1ZSkgKiBw
cm9wZXJ0eVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKICAgICAgICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3Rvciwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0b3JM
ZW5ndGgpOwotCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogbmV3VmVjdG9yID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyBpKyspCi0g
ICAgICAgICAgICBuZXdWZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAKKyAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIG5ld1ZlY3RvciA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOworICAgIGZvciAodW5zaWduZWQgaSA9IHVzZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdW
ZWN0b3JMZW5ndGg7IGkrKykKKyAgICAgICAgbmV3VmVjdG9yW2ldLmNsZWFyKCk7CisKICAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVu
Z3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5l
d0luZGV4QmlhczsKICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0s
IG5ld0J1dHRlcmZseSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC0xOTEsOCArMTkxLDggQEAgaW5saW5lIEJ1dHRlcmZseSogY3Jl
YXRlQXJyYXlCdXR0ZXJmbHkoVgogICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1
ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCksCiAgICAgICAgIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RPUl9MRU4pKTsKICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgIHN0b3Jh
Z2UtPm1faW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
MDsKICAgICByZXR1cm4gYnV0dGVyZmx5OwogfQpAQCAtMjE1LDEyICsyMTUsMTcgQEAgaW5saW5l
IEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShWTSYgdm0sIAogICAgICAgICBpZiAoaGFzRG91Ymxl
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgYnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICAgICAgICAgICAg
IHx8IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsK
ICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkodm0sIDAsIGluaXRpYWxM
ZW5ndGgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQkFTRV9WRUNUT1JfTEVO
OyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvcltp
XS5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CkBAIC0yMzUsMzMgKzI0MCwzOSBAQCBpbmxpbmUgSlNBcnJh
eSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU3RvcmFn
ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAogICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5OwotICAgIGlmIChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSkpIHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2Uo
aW5kZXhpbmdUeXBlKSkpIHsKICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFzVW5kZWNp
ZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJbnQzMihz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKLQotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBp
ZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGhhc1Vu
ZGVjaWRlZChpbmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBoYXNJbnQzMihpbmRleGluZ1R5
cGUpCisgICAgICAgICAgICB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAg
fHwgaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUpKTsKKworICAgICAgICB2b2lkKiB0ZW1wID0g
dm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6
ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgICAgIGlmICghdGVtcCkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91
dE9mTGluZVN0b3JhZ2UpOwogICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0
b3JMZW5ndGgpOwogICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVu
Z3RoKTsKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkg
eworICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAg
ICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVu
Z3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwg
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVs
bHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAgICAgaWYgKCF0ZW1wKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CiAgICAgICAgICpidXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5n
dGgsIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsK
ICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNyZWF0
ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzY5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsMjUgKzUxMCwxNSBAQCBBcnJheUJ1ZmZlciogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRo
aW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKICAgICAv
LyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFw
cHJvcHJpYXRlbHkuCiAgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7Cisg
ICAgVk0mIHZtID0gKmhlYXAtPnZtKCk7CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpo
ZWFwKTsKICAgICAKICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkp
OwogCi0gICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwotICAgIAotICAg
IGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKLSAgICAgICAgJiYgIXRo
aXNPYmplY3QtPmJ1dHRlcmZseSgpICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkg
ewotICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwotICAgICAgICAvLyBSZXVz
ZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgotICAgICAgICB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcigKLSAgICAgICAgICAgIGJp
dHdpc2VfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPnZlY3RvcigpKS0+YnV0dGVy
Zmx5KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0
LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKLSAgICAgICAgVk0mIHZtID0gKmhlYXAtPnZtKCk7Ci0g
ICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwgdGhpc09iamVjdCwgQnV0dGVy
Zmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAotICAgICAgICAgICAgdGhpc09iamVjdC0+YnV0
dGVyZmx5KCksIHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKLSAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxz
ZSwgMCwgMCkpOwotICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aGFzSW5k
ZXhpbmdIZWFkZXIoKSk7CisgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlz
T2JqZWN0LCBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgIHRoaXNP
YmplY3QtPmJ1dHRlcmZseSgpLCB2bSwgdGhpc09iamVjdCwgdGhpc09iamVjdC0+c3RydWN0dXJl
KCksCisgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBmYWxzZSwgMCwgMCkpOwogCiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDc3ICs4OCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBn
ZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09i
amVjdDo6Y29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0
ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKLXsKLSAgICBBU1NFUlQoYnV0dGVyZmx5KTsKLSAg
ICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwotICAgIAot
ICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwotICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKLSAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXM7Ci0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IHRoaXMtPmhhc0luZGV4
aW5nSGVhZGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewotICAg
ICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNp
dHkoc3RydWN0dXJlKTsKLSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVj
dHVyZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwotICAgICAgICBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotICAgIHNpemVfdCBjYXBhY2l0
eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAg
ICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHkpKSkgewotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24odmlzaXRv
ciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgcHJvcGVydGll
cy4KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHkt
PnByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJj
ZSA9IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNv
dW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KQotICAgICAgICAgICAgKC0tY3VycmVudFRhcmdl
dCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKC0tY3VycmVudFNvdXJjZSktPmdldCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKLSAgICAg
ICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDb3B5IHRoZSBhcnJh
eSBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50VGFyZ2V0OwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBjdXJyZW50U291cmNlOwotICAgICAgICAgICAgc2l6ZV90IGNvdW50OwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBBTExfSU5U
MzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdf
VFlQRVM6IHsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKLSAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7Ci0gICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhl
YWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Ci0gICAgICAgICAg
ICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gMDsKLSAgICAgICAgICAgICAgICBjdXJyZW50
U291cmNlID0gMDsKLSAgICAgICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1lbWNweShjdXJyZW50VGFyZ2V0
LCBjdXJyZW50U291cmNlLCBjb3VudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcihuZXdC
dXR0ZXJmbHkpOwotICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKLSAgICB9IAotfQot
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7
CiAgICAgQVNTRVJUKGJ1dHRlcmZseSk7CkBAIC0xNzUsMTMgKzEwNCwxNiBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgIHByZUNhcGFjaXR5ID0gMDsK
ICAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwogICAgIH0KLSAgICBzaXpl
X3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7CisgICAgCisgICAgSGVhcENlbGwqIGJhc2UgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwq
PihidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpKTsKKworICAg
IEFTU0VSVChIZWFwOjpoZWFwKGJhc2UpID09IHZpc2l0b3IuaGVhcCgpKTsKIAorICAgIC8vIEtl
ZXAgdGhlIGJ1dHRlcmZseSBhbGl2ZS4KKyAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoYmFzZSk7
CisgICAgCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0
b3JhZ2VTaXplKTsKLSAgICB2aXNpdG9yLmNvcHlMYXRlcigKLSAgICAgICAgdGhpcywgQnV0dGVy
Zmx5Q29weVRva2VuLAotICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwogICAgIAogICAgIC8vIE1hcmsgdGhlIGFy
cmF5IGlmIGFwcHJvcHJpYXRlLgogICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsK
QEAgLTIyNSwxOSArMTU3LDYgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbAogI2VuZGlmCiB9CiAKLXZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxs
KiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQotewotICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotCi0gICAgaWYgKHRva2Vu
ICE9IEJ1dHRlcmZseUNvcHlUb2tlbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYg
KGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+Y29weUJ1dHRlcmZseSh2aXNpdG9yLCBi
dXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCkpOwotfQot
CiB2b2lkIEpTT2JqZWN0OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxsLCBIZWFwU25hcHNob3RC
dWlsZGVyJiBidWlsZGVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
T2JqZWN0Kj4oY2VsbCk7CkBAIC04MDcsNiArNzI2LDggQEAgQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0OjpjcmVhdGVJbml0aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2
bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJm
bHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgp
KTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9j
YXRlSW50MzIpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJl
LCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQz
MigpOwpAQCAtODI3LDYgKzc0OCw4IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3Jl
YXRlSW5pdGkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwg
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsK
ICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVy
Zmx5KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CkBAIC04NDksNiAr
NzcyLDggQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJl
c3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0
b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAwOworICAgIGZvciAoc2l6ZV90IGkg
PSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHJlc3VsdC0+bV92ZWN0b3JbaV0uc2V0V2l0
aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgc3RydWN0
dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVy
biByZXN1bHQ7CkBAIC04NjIsNiArNzg3LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxBcnIKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVj
aWRlZFRvSW50MzIoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdU
eXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykK
KyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OkFsbG9jYXRlSW50MzIpKTsKICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRp
Z3VvdXNJbnQzMigpOwogfQpAQCAtODgxLDYgKzgxMSwxMSBAQCBDb250aWd1b3VzRG91YmxlcyBK
U09iamVjdDo6Y29udmVydFVuZGVjCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZl
cnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lk
ZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91
dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOworCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAgICByZXR1cm4gbV9idXR0ZXJmbHku
Z2V0KCktPmNvbnRpZ3VvdXMoKTsKIH0KQEAgLTkxNyw3ICs4NTIsOSBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVt
ZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBObyBuZWVkIHRvIGNvcHkgZWxlbWVudHMu
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpLS07KQorICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7
CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CiAgICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0b3JhZ2UtPmJ1dHRlcmZseSgp
KTsKQEAgLTkzOCwxMSArODc1LDEyIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252
ZXJ0SW50MzIKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50ID0gJmJ1dHRl
cmZseS0+Y29udGlndW91c0ludDMyKClbaV07CiAgICAgICAgIGRvdWJsZSogY3VycmVudEFzRG91
YmxlID0gYml0d2lzZV9jYXN0PGRvdWJsZSo+KGN1cnJlbnQpOwogICAgICAgICBKU1ZhbHVlIHYg
PSBjdXJyZW50LT5nZXQoKTsKLSAgICAgICAgaWYgKCF2KSB7CisgICAgICAgIC8vIE5PVEU6IFNp
bmNlIHRoaXMgbWF5IGJlIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCB2IGNvdWxkIGJlIGdh
cmJhZ2UuIElmIGl0J3MgZ2FyYmFnZSwKKyAgICAgICAgLy8gdGhhdCBtZWFucyBpdCB3aWxsIGJl
IG92ZXJ3cml0dGVuIGxhdGVyLgorICAgICAgICBpZiAoIXYuaXNJbnQzMigpKSB7CiAgICAgICAg
ICAgICAqY3VycmVudEFzRG91YmxlID0gUE5hTjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVCh2LmlzSW50MzIoKSk7CiAgICAgICAgICpjdXJyZW50QXNE
b3VibGUgPSB2LmFzSW50MzIoKTsKICAgICB9CiAgICAgCkBAIC05NjYsMTMgKzkwNCwxMSBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5
U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAg
bmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAg
ICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAg
ICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
Kys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVj
dG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMTAxNCwxMyArOTUwLDExIEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdT
dG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVt
ZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9y
TGVuZ3RoOyBpKyspIHsKICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbaV07Ci0gICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkgewotICAgICAgICAg
ICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVl
KEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgICAgICBuZXdTdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2Rl
QXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkKICAgICAgICAg
ICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgp
KTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBA
IC0xMDQxLDEzICs5NzUsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRp
Z3VvdQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0
b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252
ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgp
OwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAg
ICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAg
aWYgKHYpIHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAgICAgICAgICAgbmV3U3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFT
U0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAg
ICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTI3NTQsNiArMjY4
Niw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAg
ICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JM
ZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwog
ICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRl
cmZseSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc2OCw2ICsyNzAyLDggQEAgYm9vbCBK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdJbmRleEJpYXMs
IHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBpZiAo
IW5ld0J1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQg
aSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIG5ld0J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgp
OwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5k
ZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3
QnV0dGVyZmx5KTsKQEAgLTI3OTksOCArMjczNSwxMiBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVM
ZW5ndGhTbG93KFZNJiB2bSwgCiAKICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0
b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
LmRhdGEoKVtpXSA9IFBOYU47CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXSA9IFBOYU47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
b2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBi
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgIH0KKwogICAgIHJldHVybiB0
cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgIkFyZ0xp
c3QuaCIKICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQXJyYXlTdG9y
YWdlLmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkJ1dHRlcmZs
eS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2lu
Y2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNp
bmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJEZWZlckdDLmgiCiAjaW5j
bHVkZSAiSGVhcC5oIgpAQCAtMTAzLDcgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9y
ZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2VsbCosIEhlYXBTbmFwc2hvdEJ1aWxkZXIm
KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0Kik7CkBAIC03OTcsNyArNzk2LDYgQEAgcHJvdGVjdGVkOgogICAgIEpTT2JqZWN0
KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICB2b2lkIHZp
c2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7Ci0gICAg
dm9pZCBjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3Jh
Z2VTaXplKTsKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3Qg
aXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2ls
bCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtOTQ5LDcgKzk0Nyw3IEBAIHByaXZhdGU6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KFZNJik7
CiAKIHByb3RlY3RlZDoKLSAgICBDb3B5QmFycmllcjxCdXR0ZXJmbHk+IG1fYnV0dGVyZmx5Owor
ICAgIEF1eGlsaWFyeUJhcnJpZXI8QnV0dGVyZmx5Kj4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9wYWRkaW5nOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlz
aW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDA2LCAyMDA4LCAyMDA5LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LCAyMDA5LCAyMDEyLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAw
NyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCw2ICsy
NCw3IEBACiAjaWZuZGVmIEpTT2JqZWN0SW5saW5lc19oCiAjZGVmaW5lIEpTT2JqZWN0SW5saW5l
c19oCiAKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQCBBTFdB
WVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhCiAgICAgaWYgKHZlY3Rvckxlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
dm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwg
dmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnko
bnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cisg
ICAgaWYgKCF0ZW1wKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5n
dGgpOwogICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxl
ci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsNyArNDM3LDcgQEAg
dm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVh
cDo6aXNQb2ludGVyR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgZXhlY3V0YWJsZSkp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNQb2ludGVyR0NPYmplY3RKU0Nl
bGwoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgZXhlY3V0YWJsZSkpOwogICAgICAgICAgICAgc3Rh
Y2tGcmFtZS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6OkV4ZWN1dGFibGU7CiAgICAgICAgICAgICBz
dGFja0ZyYW1lLmV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAgICAgICAgICAgbV9saXZlQ2Vs
bFBvaW50ZXJzLmFkZChleGVjdXRhYmxlKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxs
b2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZp
c2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDYgQEAKLS8vIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0y
MDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6
CkBAIC05Nyw2ICs5NiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25t
ZW50CiAgICAgcmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOwogfQogCit2
b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkg
Cit7CisgICAgcmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOworfQorCiB2
b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBfYWxpZ25lZF9mcmVlKHApOwpA
QCAtMTExLDYgKzExNSwxMyBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25t
ZW50CiAgICAgcmV0dXJuIHA7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICB2b2lkKiBwID0gbnVsbHB0cjsKKyAg
ICBwb3NpeF9tZW1hbGlnbigmcCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gcDsKK30K
Kwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgZnJlZShwKTsKQEAgLTIz
MSw2ICsyNDIsMTEgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAog
ICAgIHJldHVybiBibWFsbG9jOjphcGk6Om1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CiB9CiAK
K3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KSAKK3sKKyAgICByZXR1cm4gYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNp
emUpOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBibWFsbG9j
OjphcGk6OmZyZWUocCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMDM2OTkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC01Myw2ICs1Myw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RGcmVlKHZvaWQqKTsK
IAogLy8gQWxsb2NhdGlvbnMgZnJvbSBmYXN0QWxpZ25lZE1hbGxvYygpIG11c3QgYmUgZnJlZWQg
dXNpbmcgZmFzdEFsaWduZWRGcmVlKCkuCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogZmFzdEFs
aWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFU
RSB2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwog
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqKTsKIAogV1RGX0VY
UE9SVF9QUklWQVRFIHNpemVfdCBmYXN0TWFsbG9jU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xMDcs
NiArMTA4LDcgQEAgdXNpbmcgV1RGOjpmYXN0TWFsbG9jU2l6ZTsKIHVzaW5nIFdURjo6ZmFzdFJl
YWxsb2M7CiB1c2luZyBXVEY6OmZhc3RTdHJEdXA7CiB1c2luZyBXVEY6OmZhc3RaZXJvZWRNYWxs
b2M7Cit1c2luZyBXVEY6OnRyeUZhc3RBbGlnbmVkTWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0
Q2FsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0TWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0WmVy
b2VkTWFsbG9jOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNp
b24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDE4IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGUoc2l6ZV90IHNpemUKIAogdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAg
ICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOwor
fQorCit2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKQoreworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBmYWxzZTsKKyAgICByZXR1cm4g
YWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lk
KiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwg
Ym9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1l
bnQpKTsKIAogICAgIGlmICghbV9pc0JtYWxsb2NFbmFibGVkKSB7CkBAIC04MCw3ICs5MiwxMCBA
QCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lCiAgICAgICAgIHJldHVy
biBhbGxvY2F0ZShyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc2l6ZSkpOwogCiAgICAg
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4
KCkpOwotICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0
ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgSGVhcCogaGVhcCA9IFBlclByb2Nl
c3M8SGVhcD46OmdldEZhc3RDYXNlKCk7CisgICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAg
ICByZXR1cm4gaGVhcC0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAg
IHJldHVybiBoZWFwLT50cnlBbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiB9
CiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxvY2F0ZSh2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdT
aXplKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM2OTkp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MywxMiArNDMsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsK
ICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90KTsKICAgICB2b2lkKiByZWFsbG9jYXRlKHZvaWQqLCBzaXplX3QpOwogCiAgICAg
dm9pZCBzY2F2ZW5nZSgpOwogCiBwcml2YXRlOgorICAgIHZvaWQqIGFsbG9jYXRlSW1wbChzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3QsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIAogICAgIGJv
b2wgYWxsb2NhdGVGYXN0Q2FzZShzaXplX3QsIHZvaWQqJik7CiAgICAgdm9pZCogYWxsb2NhdGVT
bG93Q2FzZShzaXplX3QpOwogICAgIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNo
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAkocmV2aXNp
b24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0
ZShzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHN0YXRp
YyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRp
YyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2
b2lkIGRlYWxsb2NhdGUodm9pZCopOwogICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQq
LCBzaXplX3QpOwpAQCAtNzksNiArODAsMTQgQEAgaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0
ZShzaXplX3Qgc2l6ZQogICAgIHJldHVybiBjYWNoZS0+YWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6
ZSk7CiB9CiAKK2lubGluZSB2b2lkKiBDYWNoZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCit7CisgICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hlPjo6
Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVT
bG93Q2FzZU51bGxDYWNoZShhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBjYWNoZS0+YWxs
b2NhdG9yKCkudHJ5QWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKK30KKwogaW5saW5lIHZvaWQq
IENhY2hlOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBD
YWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOwpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9ibWFsbG9jLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvYm1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDEyIEBAIGlu
bGluZSB2b2lkKiBtYWxsb2Moc2l6ZV90IHNpemUpCiAgICAgcmV0dXJuIENhY2hlOjphbGxvY2F0
ZShzaXplKTsKIH0KIAorLy8gUmV0dXJucyBudWxsIG9uIGZhaWx1cmUuCitpbmxpbmUgdm9pZCog
dHJ5TWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJu
IENhY2hlOjp0cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiAvLyBDcmFzaGVzIG9u
IGZhaWx1cmUuCiBpbmxpbmUgdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284889</attachid>
            <date>2016-07-29 12:56:09 -0700</date>
            <delta_ts>2016-07-29 13:49:16 -0700</delta_ts>
            <desc>passes all open source debug JSC tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100535</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc3MSw3ICszNzcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzaXplLCBtX291
dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZVZhcmlh
YmxlU2l6ZWRPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAgICAgICAgICBzaXplLCBz
dHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKHNpemUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQ
YXRoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgu
dmFsdWUsIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7CkBAIC00
MDY3LDkgKzQwNjcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlT
aXplID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5jb25z
dEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChi
dXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAgICAgICB2bSgpLmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIExW
YWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBmYWlsQ2Fz
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5z
dWIoZW5kT2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBvYmpl
Y3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENh
c2UpOwogICAgICAgICAgICAgCkBAIC02OTQ3LDExICs2OTQ5LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFu
ZEdldEVuZChidXR0ZXJmbHlTaXplLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgTFZhbHVl
IHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIGJ1
dHRlcmZseVNpemUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwog
CiAgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gaW5kZXhpbmdIZWFkZXJTaXplKSk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0T2ZTdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSk7CiAKICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAg
ICAgICAgICAgICAgIApAQCAtNzc0NSwxMCArNzc0OSwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBpbml0aWFsaXplQXJyYXlFbGVtZW50cyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBMVmFs
dWUgdmVjdG9yTGVuZ3RoLCBMVmFsdWUgYnV0dGVyZmx5KQogICAgIHsKLSAgICAgICAgaWYgKCFo
YXNEb3VibGUoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgLy8gVGhlIEdDIGFscmVhZHkg
aW5pdGlhbGl6ZWQgZXZlcnl0aGluZyB0byBKU1ZhbHVlKCkgZm9yIHVzLgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgICAgIExWYWx1ZSBob2xlOworICAgICAgICBpZiAoaGFz
RG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBob2xlID0gbV9vdXQuY29uc3RJbnQ2
NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBob2xlID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSk7CiAK
ICAgICAgICAgLy8gRG91YmxlcyBtdXN0IGJlIGluaXRpYWxpemVkIHRvIFBOYU4uCiAgICAgICAg
IExCYXNpY0Jsb2NrIGluaXRMb29wID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTc3NjMsOSArNzc2
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwg
b3JpZ2luYWxJbmRleCk7CiAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKHBvaW50
ZXJUeXBlKCksIG9yaWdpbmFsUG9pbnRlcik7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZTY0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4o
UE5hTikpLAotICAgICAgICAgICAgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVBy
b3BlcnRpZXMuYXRBbnlJbmRleCgpLCBwb2ludGVyKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQo
aG9sZSwgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMuYXRBbnlJ
bmRleCgpLCBwb2ludGVyKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbmV4dEluZGV4ID0g
bV9vdXQuc3ViKGluZGV4LCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIG1fb3V0LmFkZEluY29t
aW5nVG9QaGkoaW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0SW5kZXgpKTsKQEAgLTc4MjYsMTIgKzc4
MjksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVl
KSksIHNsb3dQYXRoKTsKKworICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1
ZXMgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
ID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZUluQnl0ZXMpOworICAg
ICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0
SW50UHRyKCZhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQu
YWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3Jh
Z2UpKTsKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRl
cyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTg0MDEsNyAr
ODQwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAg
fQogCi0gICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9y
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nl
c3MgPSBtX291dC5uZXdCbG9jaygpOwogICAgIApAQCAtODQzNiw3ICs4NDQwLDcgQEAgcHJpdmF0
ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC04NDY0LDQ2ICs4NDY4LDU0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xv
d1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0g
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNp
emUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2UsIExW
YWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VT
dGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0
d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3Rl
cCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXBy
ZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVlIHN1
YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9m
VHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxD
YXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJnZU9y
T3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9j
ayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBMVmFs
dWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291
dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVj
aXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNp
emUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5j
b25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291dC5i
cmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVy
c2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
KTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAg
ICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBz
dWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5k
ZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0
ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1
ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9j
ayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikp
LAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQ
dHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxseShs
YXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFkZHJl
c3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1
YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQu
emVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0
TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291
dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNw
YWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxv
Y2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGko
cG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAgICAg
CisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3Is
IGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNp
emUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Js
b2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9v
dXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlVmFy
aWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgdm0o
KS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xvd1Bh
dGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1OTAsMjYgKzg2MDIsMjQg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0
ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAgICAg
TFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3Ro
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7CisgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEoCisgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1Bh
dGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigKLSAg
ICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUp
ICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQo
c3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikp
KTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0Fy
cmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CisgICAg
ICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291
dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9w
dWJsaWNMZW5ndGgpOwogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIodmVj
dG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4p
KSwKLSAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExWYWx1
ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbV9v
dXQuc3RvcmU2NChob2xlLCBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRp
ZXNbaV0pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwgYnV0
dGVyZmx5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDE2
ICs1MSwxNiBAQCBDb25zZXJ2YXRpdmVSb290czo6Q29uc2VydmF0aXZlUm9vdHMoTWFyCiBDb25z
ZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3RzKCkKIHsKICAgICBpZiAobV9yb290cyAh
PSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNl
KG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSlNDZWxsKikpOworICAgICAgICBPU0FsbG9j
YXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSGVh
cENlbGwqKSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogewogICAgIHNp
emVfdCBuZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkgPT0gaW5saW5lQ2FwYWNpdHkgPyBub25Jbmxp
bmVDYXBhY2l0eSA6IG1fY2FwYWNpdHkgKiAyOwotICAgIEpTQ2VsbCoqIG5ld1Jvb3RzID0gc3Rh
dGljX2Nhc3Q8SlNDZWxsKio+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KG5ld0NhcGFj
aXR5ICogc2l6ZW9mKEpTQ2VsbCopKSk7Ci0gICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBt
X3NpemUgKiBzaXplb2YoSlNDZWxsKikpOworICAgIEhlYXBDZWxsKiogbmV3Um9vdHMgPSBzdGF0
aWNfY2FzdDxIZWFwQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChuZXdDYXBh
Y2l0eSAqIHNpemVvZihIZWFwQ2VsbCopKSk7CisgICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3Rz
LCBtX3NpemUgKiBzaXplb2YoSGVhcENlbGwqKSk7CiAgICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxp
bmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3Rz
LCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEhlYXBDZWxsKikp
OwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7
CiB9CkBAIC03MiwxMyArNzIsMTQgQEAgaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdl
bmVyaWNBZAogCiAgICAgbV9jb3BpZWRTcGFjZS0+cGluSWZOZWNlc3NhcnkocCk7CiAKLSAgICBp
ZiAoIUhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZpbHRlciwgKm1fYmxvY2tzLCBwKSkKKyAgICBw
ID0gSGVhcDo6ZmluZEdDT2JqZWN0UG9pbnRlcihmaWx0ZXIsICptX2Jsb2NrcywgcCk7CisgICAg
aWYgKCFwKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkp
CiAgICAgICAgIGdyb3coKTsKIAotICAgIG1fcm9vdHNbbV9zaXplKytdID0gc3RhdGljX2Nhc3Q8
SlNDZWxsKj4ocCk7CisgICAgbV9yb290c1ttX3NpemUrK10gPSBiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBD
b2RlQmxvY2tTZXQ7CitjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0Owot
Y2xhc3MgSlNDZWxsOwogCiBjbGFzcyBDb25zZXJ2YXRpdmVSb290cyB7CiBwdWJsaWM6CkBAIC00
NCwxMSArNDQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0Jik7CiAgICAgCiAgICAgc2l6ZV90
IHNpemUoKTsKLSAgICBKU0NlbGwqKiByb290cygpOworICAgIEhlYXBDZWxsKiogcm9vdHMoKTsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMTI4
OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkgPSA4MTkyIC8gc2l6
ZW9mKEpTQ2VsbCopOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+CiAgICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgVGlueUJsb29tRmls
dGVyLCBNYXJrSG9vayYpOwpAQCAtNTgsMTIgKzU4LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBncm93KCk7CiAKLSAgICBKU0NlbGwqKiBtX3Jvb3RzOworICAgIEhlYXBDZWxsKiogbV9y
b290czsKICAgICBzaXplX3QgbV9zaXplOwogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogICAgIE1h
cmtlZEJsb2NrU2V0KiBtX2Jsb2NrczsKICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsK
LSAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOworICAgIEhlYXBDZWxs
KiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5XTsKIH07CiAKIGlubGluZSBzaXplX3QgQ29u
c2VydmF0aXZlUm9vdHM6OnNpemUoKQpAQCAtNzEsNyArNzEsNyBAQCBpbmxpbmUgc2l6ZV90IENv
bnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKICAgICByZXR1cm4gbV9zaXplOwogfQogCi1pbmxpbmUg
SlNDZWxsKiogQ29uc2VydmF0aXZlUm9vdHM6OnJvb3RzKCkKK2lubGluZSBIZWFwQ2VsbCoqIENv
bnNlcnZhdGl2ZVJvb3RzOjpyb290cygpCiB7CiAgICAgcmV0dXJuIG1fcm9vdHM7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkocmV2aXNpb24gMjAzNjk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksNyArMjksNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gQ29weVRv
a2VuIHsKLSAgICBCdXR0ZXJmbHlDb3B5VG9rZW4sCiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlU
b2tlbiwKICAgICBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sCiAgICAgRGlyZWN0QXJndW1lbnRz
T3ZlcnJpZGVzQ29weVRva2VuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5OCwxMiArNTk4LDYgQEAgdm9pZCBIZWFwOjpjb3B5QmFja2lu
Z1N0b3JlcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QgPSBibG9jay0+d29ya0xpc3QoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoQ29weVdvcmtsaXN0SXRlbSBpdGVtIDogd29ya0xpc3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS50b2tlbigpID09IEJ1dHRlcmZs
eUNvcHlUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6
Y29weUJhY2tpbmdTdG9yZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
ZW0uY2VsbCgpLCBjb3B5VmlzaXRvciwgQnV0dGVyZmx5Q29weVRva2VuKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGl0ZW0uY2VsbCgpLT5tZXRob2RUYWJsZSgpLT5jb3B5QmFja2luZ1N0b3JlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3IsIGl0
ZW0udG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgog
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVK
SVQ7CiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNWYWx1ZSk7IC8vIDAgZm9yIGltbWVk
aWF0ZSB2YWx1ZXMKLSAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU0NlbGwqKTsKKyAgICBz
dGF0aWMgSGVhcCogaGVhcChjb25zdCBIZWFwQ2VsbCopOwogCiAgICAgLy8gVGhpcyBjb25zdGFu
dCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRlIGJldHdlZW4gY2hlY2tzIG9m
IG91ciAKICAgICAvLyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVhcDo6aXNQYWdlZE91dC4gRGVj
cmVhc2luZyBpdCB3aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKQEAgLTEwNCw3ICsxMDQsOCBAQCBw
dWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcnVuIGFmdGVyIHN0b3BBbGxv
Y2F0aW9uKCkgaXMgY2FsbGVkIGFuZCAKICAgICAvLyBiZWZvcmUgbGl2ZW5lc3MgZGF0YSBpcyBj
bGVhcmVkIHRvIGJlIGFjY3VyYXRlLgotICAgIHN0YXRpYyBib29sIGlzUG9pbnRlckdDT2JqZWN0
KFRpbnlCbG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQmLCB2b2lkKiBwb2ludGVyKTsKKyAgICBz
dGF0aWMgdm9pZCogZmluZEdDT2JqZWN0UG9pbnRlcihUaW55Qmxvb21GaWx0ZXIsIE1hcmtlZEJs
b2NrU2V0Jiwgdm9pZCogcG9pbnRlcik7CisgICAgc3RhdGljIGJvb2wgaXNQb2ludGVyR0NPYmpl
Y3RKU0NlbGwoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIGNvbnN0IHZvaWQqIHBv
aW50ZXIpOwogICAgIHN0YXRpYyBib29sIGlzVmFsdWVHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIs
IE1hcmtlZEJsb2NrU2V0JiwgSlNWYWx1ZSk7CiAKICAgICB2b2lkIHdyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqKTsKQEAgLTE1MCw3ICsxNTEsMTEgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9j
YXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7
IHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykg
eyByZXR1cm4gbV9vYmplY3RTcGFjZS5kZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0
b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNw
YWNlLmF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBDb3BpZWRBbGxvY2F0b3Im
IHN0b3JhZ2VBbGxvY2F0b3IoKSB7IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxvY2F0b3IoKTsg
fQorICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6
ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGlu
dGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6
ZSk7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5k
ZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2Nh
dGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCoqLCBzaXplX3QsIHNpemVfdCk7
CiAgICAgdm9pZCBhc2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6aXNDb2xsZWN0aW5n
KCkKICAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbjsKIH0KIAotaW5saW5lIEhl
YXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQoraW5saW5lIEhlYXAqIEhlYXA6Omhl
YXAoY29uc3QgSGVhcENlbGwqIGNlbGwpCiB7CiAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKS0+aGVhcCgpOwogfQpAQCAtMTk5LDcgKzE5OSw3IEBAIGlubGluZSB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NU
eXBlPgotdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQoraW5s
aW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKIHsKICAg
ICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBu
b3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KICAg
ICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3Ry
dWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxl
PENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjEwLDcgKzIx
MCw3IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCAKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpz
dWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCitpbmxpbmUgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBI
ZWFwOjpzdWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0lu
Zm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8g
ZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBl
OjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0
dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIyMSw3ICsyMjEsNyBAQCBNYXJrZWRTcGFjZTo6
U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNz
VHlwZT4KLU1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNp
emVfdCBieXRlcykKK2lubGluZSBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9i
amVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBl
eHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZl
IGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVk
c0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJ
bW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIzMSw2ICsyMzEsMzcgQEAgTWFya2VkQWxsb2NhdG9yJiBI
ZWFwOjphbGxvY2F0b3JGb3JPYmplYwogICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmplY3RXaXRo
b3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZUF1
eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lk
KiByZXN1bHQgPSBtX29iamVjdFNwYWNlLmFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBF
TkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGlu
ZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRP
d25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFs
bG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQorewor
ICAgIHZvaWQqIHJlc3VsdCA9IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoYnl0
ZXMpOworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBH
QyBhbGxvY2F0aW5nICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVz
LCBpbnRlbmRlZE93bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5k
ZWRPd25lcik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCog
SGVhcDo6dHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQq
IG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICB2b2lkKiBu
ZXdCYXNlID0gdHJ5QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7Cisg
ICAgaWYgKCFuZXdCYXNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBtZW1jcHkobmV3
QmFzZSwgb2xkQmFzZSwgb2xkU2l6ZSk7CisgICAgcmV0dXJuIG5ld0Jhc2U7Cit9CisKIGlubGlu
ZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRl
ZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiB7CiAgICAgQ2hlY2tlZEJvb2xl
YW4gcmVzdWx0ID0gbV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CkBA
IC0zNTQsMjAgKzM4NSw0NiBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2soc2l6ZV90
IGNhCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3QoVGlu
eUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lk
KiBwb2ludGVyKQoraW5saW5lIHZvaWQqIEhlYXA6OmZpbmRHQ09iamVjdFBvaW50ZXIoVGlueUJs
b29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lkKiBw
b2ludGVyKQogewogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tGb3IocG9pbnRlcik7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRz
PihjYW5kaWRhdGUpKSkgewogICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAhbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIAorICAgIGlmICghbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpID09IEhlYXBDZWxsOjpKU0NlbGwpIHsK
KyAgICAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0gZWxzZQorICAgICAgICBwb2ludGVyID0gY2Fu
ZGlkYXRlLT5jZWxsQWxpZ24ocG9pbnRlcik7CisKKyAgICBpZiAoIWNhbmRpZGF0ZS0+aXNMaXZl
Q2VsbChwb2ludGVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gcG9p
bnRlcjsKK30KIAoraW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3RKU0NlbGwoVGlu
eUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCBjb25z
dCB2b2lkKiBwb2ludGVyKQoreworICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRC
bG9jazo6YmxvY2tGb3IocG9pbnRlcik7CisgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2Vf
Y2FzdDxCaXRzPihjYW5kaWRhdGUpKSkgeworICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAh
bWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25l
ZChwb2ludGVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtYXJrZWRCbG9j
a1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpICE9IEhlYXBDZWxsOjpKU0NlbGwpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghY2FuZGlkYXRlLT5pc0xpdmVDZWxsKHBvaW50
ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM3OCw3ICs0MzUsNyBAQCBpbmxpbmUg
Ym9vbCBIZWFwOjppc1ZhbHVlR0NPYmplY3QoVGlueUJsCiB7CiAgICAgaWYgKCF2YWx1ZS5pc0Nl
bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc1BvaW50ZXJHQ09iamVj
dChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBzdGF0aWNfY2FzdDx2b2lkKj4odmFsdWUuYXNDZWxs
KCkpKTsKKyAgICByZXR1cm4gaXNQb2ludGVyR0NPYmplY3RKU0NlbGwoZmlsdGVyLCBtYXJrZWRC
bG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHZhbHVlLmFzQ2VsbCgpKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3
IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+
ZGlkUmV0aXJlQmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMp
CiB7CiAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRC
bG9jayA9PSBtX25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5l
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQog
Ci1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAg
IG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5
QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFt
X2N1cnJlbnRCbG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNs
b3dDYXNlKHNpemVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsK
KyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsK
K30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBi
eXRlcykKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFs
bG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBib29sIGNy
YXNoT25GYWlsdXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKIApA
QCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlKAogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRpZEFsbG9j
YXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9j
YXRlKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKGJ5dGVzKTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlP
ckRlZmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgICAg
ICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAgICAg
aWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgQVNT
RVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAgICBNYXJr
ZWRCbG9jayogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAoIWJsb2Nr
KSB7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJlc3VsdCA9
IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xs
ZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1NYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBi
eXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2soc2l6
ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplOwogICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpICsgV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwpAQCAt
MTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmwK
IAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDogV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwogCi0gICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxs
U2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNyZWF0ZSgq
bV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwogfQogCiB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rp
b247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFw
OyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsKQEAgLTcx
LDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRl
KHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CisgICAgdm9p
ZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAg
ICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAgdm9pZCog
dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lkKiB0cnlQ
b3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNpemVf
dCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZvaWQgcmV0
aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBAIC0xMTMs
MjEgKzExNiwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogCiAg
ICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJsb2NrOjpG
cmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFkoIWhlYWQp
KSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOwor
ICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1z
ZXQocmVzdWx0LCAweENELCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0dXJu
IGhlYWQ7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVf
dCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0
LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1bHQg
PSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1lbXNl
dChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+
bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKLSNl
bmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhD
RCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDE0ICszNSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29sIGNvbXB1dGVC
YWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtlZEJsb2NrKiBN
YXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
LCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmli
dXRlcyYgYXR0cmlidXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKEhl
YXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNp
emVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsK
ICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5jZSsrOwogICAgICAgICBp
ZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxvY2sgQmFs
YW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtlZEJsb2NrKiBibG9jayA9
IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0eSkpIE1h
cmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKKyAg
ICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBh
Y2l0eSk7CisgICAgaWYgKCFibG9ja1NwYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1hcmtlZEJs
b2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKICAgICBoZWFw
LmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJldHVybiBibG9jazsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjAzNjk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDEwICsxMDksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
dXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMg
TWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAg
ICAgc3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvcios
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1
dGVzJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7
CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CisgICAg
ICAgIHZvaWQqIGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayog
YmxvY2tGb3IoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZpcnN0QXRvbSgp
OwogICAgICAgICAKQEAgLTIzNiw2ICsyMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBhdG9tQWxpZ25tZW50TWFzayk7
CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpjZWxsQWxpZ24odm9pZCog
cCkKKyAgICB7CisgICAgICAgIEJpdHMgYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCk7
CisgICAgICAgIGJpdHMgLT0gYml0cyAlIGNlbGxTaXplKCk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihiaXRzKTsKKyAgICB9CisKICAgICBpbmxpbmUgTWFya2VkQmxv
Y2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2b2lkKiBwKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJp
dHM+KHApICYgYmxvY2tNYXNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFs
bG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZUF1eGls
aWFyeShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CiAK
ICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7IHJldHVy
biBtX2Rlc3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNX
aXRob3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KQEAgLTE4Miw2ICsx
ODMsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUF1eGlsaQogICAgIHJl
dHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKGJ5dGVzKTsKIH0KIAor
aW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0
ZXMpCit7CisgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcykudHJ5QWxsb2Nh
dGUoYnl0ZXMpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQg
TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAg
IGZvckVhY2hTdWJzcGFjZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsMTAgKzEx
OCw0MiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCiAKIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7Ci0g
ICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIEhlYXBD
ZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOwogICAgIHNpemVfdCBzaXpl
ID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBhcHBlbmQocm9vdHNbaV0pOworICAgICAgICBhcHBlbmRKU0Nl
bGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpT
Q2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKiBoZWFwQ2VsbCkKK3sKKyAgICBpZiAoIWhlYXBDZWxs
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbik7CisgICAgCisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQo
aGVhcENlbGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTWFya2VkQmxvY2sqIGJsb2Nr
ID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGhlYXBDZWxsKTsKKyAgICBzd2l0Y2ggKGJsb2NrLT5j
ZWxsS2luZCgpKSB7CisgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsOiB7CisgICAgICAgIEpTQ2Vs
bCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFqc0NlbGwtPnN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKworICAgICAg
ICBhcHBlbmRUb01hcmtTdGFjayhibG9jaywganNDZWxsKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5OiB7CisgICAgICAgIG5v
dGVMaXZlQXV4aWxpYXJ5Q2VsbChibG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KIH0K
IAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCkBAIC0xNjgsMTcgKzIw
MCwzNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hCiAKIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKIHsKKyAgICBhcHBl
bmRUb01hcmtTdGFjayhNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCksIGNlbGwpOworfQorCit2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayogYmxvY2ssIEpT
Q2VsbCogY2VsbCkKK3sKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFT
U0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAKICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5
dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7Cisg
ICAgbV9ieXRlc1Zpc2l0ZWQgKz0gYmxvY2stPmNlbGxTaXplKCk7CiAgICAgbV9zdGFjay5hcHBl
bmQoY2VsbCk7CiAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAg
ICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2b2lk
IFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgaWYg
KEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGJhc2UpKTsKK30K
Kwordm9pZCBTbG90VmlzaXRvcjo6bm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKiBi
bG9jaykKK3sKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBtX2J5dGVzVmlzaXRlZCArPSBibG9j
ay0+Y2VsbFNpemUoKTsKK30KKwogY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZSB7CiBwdWJsaWM6
CiAgICAgU2V0Q3VycmVudENlbGxTY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlND
ZWxsKiBjZWxsKQpAQCAtMjA0LDcgKzI1NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6dmlzaXRDaGkKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAgICAg
U2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKLQorICAg
IAogICAgIG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nID0gY2VsbC0+Y2Vs
bFN0YXRlKCk7CiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkQmxhY2spOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZp
c2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw4ICszNywxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFy
ZWREYXRhOwogY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcFNuYXBzaG90
QnVpbGRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEpJVFdyaXRlQmFycmllcjsKK2Ns
YXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplcjsKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CiBjbGFzcyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyOwpA
QCAtMTA1LDYgKzEwNywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJl
bmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAg
IAorICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6
ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KKyAgICAvLyB0aGlz
IHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgorICAgIHZvaWQgbWFy
a0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAogICAgIHZvaWQgY29weUxhdGVyKEpTQ2Vs
bCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCkBAIC0xMjQsMTAgKzEzMCwxMyBA
QCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKEpTVmFsdWUpOyAvLyBUaGlzIGlzIHBy
aXZhdGUgdG8gZW5jb3VyYWdlIGNsaWVudHMgdG8gdXNlIFdyaXRlQmFycmllcjxUPi4KKyAgICB2
b2lkIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKik7CiAgICAgdm9pZCBhcHBlbmRI
aWRkZW4oSlNWYWx1ZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1hcmtlZEFu
ZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2so
SlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayosIEpTQ2Vs
bCopOworICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKik7CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShyZXZpc2lv
biAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0
cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNCArOTEsMyBAQCBpbnQgbWFpbihpbnQs
IGNoYXIqKikKICAgICByZXR1cm4gMDsKIH0KIAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKKworLy8gQW4gQXV4aWxpYXJ5
IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBub3QgdHJ5IHRvIHJlYXNvbiBhYm91dCB0
aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0LCBvdGhlciB0aGFuIGludGVycHJldGlu
ZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBiYXJyaWVyLiBJdCdzIE9LIHRvIHVzZSB0
aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55IG90aGVyIGtpbmQgb2YgZGF0YSwgc28g
bG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEoKS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1YmxpYzoKKyAgICBBdXhpbGlhcnlCYXJyaWVy
KCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBBdXhpbGlhcnlCYXJy
aWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVl
ID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHNldChW
TSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29uc3QgVCYgZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3QoKSB7IHJldHVybiAmbV92YWx1ZTsgfQor
ICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFs
dWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0V2l0aG91
dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOyB9
CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1
eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQXV4aWxpYXJ5QmFycmllcjxUPjo6QXV4
aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2YWx1ZSkKK3sKKyAgICBt
X3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmll
cihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBV
Pgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBV
JiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGlu
ZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMCArMzcsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7Ci0gICAgdm9pZCogdGVtcDsKICAgICBzaXplX3Qg
c2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCBzaXplLCAmdGVtcCkp
OwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpOworICAgIHZvaWQqIGJhc2UgPSB2bS5oZWFwLmFsbG9jYXRlQXV4aWxp
YXJ5KGludGVuZGVkT3duZXIsIHNpemUpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJh
c2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTExOSw3ICsxMTgsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0
eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
aGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBz
aXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeVJlYWxsb2Nh
dGVTdG9yYWdlKGludGVuZGVkT3duZXIsICZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAg
ICB0aGVCYXNlID0gdm0uaGVhcC50cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIs
IHRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpOworICAgIGlmICghdGhlQmFzZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNp
dHkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiAr
NDgsMTUgQEAgQ2xvbmVkQXJndW1lbnRzKiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZQogICAgIGlm
ICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHZvaWQqIHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVt
cCkpCisgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0
ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYg
KCF0ZW1wKQogICAgICAgICByZXR1cm4gMDsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAKICAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9
CiAgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPENsb25lZEFyZ3VtZW50cz4odm0u
aGVhcCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBzdG9y
YWdlLT5idXR0ZXJmbHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0
dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUg
PSBzdHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVTaXplKCk7Ci0KKyAgICAKICAgICAvLyBJZiBub3Qs
IHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgogICAgIEFTU0VS
VCghYWRkVG9Gcm9udCB8fCBjb3VudCA+IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKIApAQCAtMjU0
LDcgKzI1NCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAg
ICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3Jv
dyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgpOworICAg
IHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4ob2xkVmVjdG9yTGVuZ3RoLCBsZW5ndGgp
OwogICAgIEFTU0VSVCh1c2VkVmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpOwogICAgIC8vIENoZWNrIHRoYXQgcmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBwb3NzaWJs
ZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBmYXNoaW9uLgogICAgIGlmIChjb3VudCA+IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2VkVmVjdG9yTGVuZ3RoKQpAQCAtMjc5LDcgKzI4MCw4IEBA
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICAgICAgbmV3U3Rv
cmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNp
emVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
dHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOwotICAgICAgICBp
ZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG5ld1NpemUsICZuZXdBbGxvY0Jh
c2UpKQorICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5
KHRoaXMsIG5ld1NpemUpOworICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFj
aXR5OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTE5MSw4ICsxOTEsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVB
cnJheUJ1dHRlcmZseShWCiAgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCAwLCAwLCB0cnVlLCBi
YXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwKICAgICAgICAgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOwogICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgc3RvcmFnZS0+bV9pbmRleEJp
YXMgPSAwOwogICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgc3RvcmFnZS0+
bV9pbmRleEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwog
ICAgIHJldHVybiBidXR0ZXJmbHk7CiB9CkBAIC0yMTUsMTIgKzIxNSwxNyBAQCBpbmxpbmUgSlNB
cnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAgICAgICAgIGlmIChoYXNEb3VibGUoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVCgKICAgICAgICAgICAgIHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQogICAgICAgICAgICAgfHwg
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwogICAg
ICAgICBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseSh2bSwgMCwgaW5pdGlhbExlbmd0
aCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCQVNFX1ZFQ1RPUl9MRU47ICsr
aSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNs
ZWFyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKQEAgLTIzNSwzMyArMjQwLDM5IEBAIGlubGluZSBKU0FycmF5KiBK
U0FycmF5Ojp0cnlDcmVhdGVVbmluaXQKICAgICB1bnNpZ25lZCBvdXRPZkxpbmVTdG9yYWdlID0g
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHk7Ci0gICAgaWYgKExJS0VMWSghaGFzQW55QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKSkgeworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpOworICAgIGlmIChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFnZShpbmRl
eGluZ1R5cGUpKSkgewogICAgICAgICBBU1NFUlQoCi0gICAgICAgICAgICBoYXNVbmRlY2lkZWQo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpOwotCi0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICgh
dm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0
T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaGFzVW5kZWNp
ZGVkKGluZGV4aW5nVHlwZSkKKyAgICAgICAgICAgIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSkK
KyAgICAgICAgICAgIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBo
YXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOworCisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5o
ZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKTsKKyAgICAgICAgaWYgKCF0ZW1wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZM
aW5lU3RvcmFnZSk7CiAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxl
bmd0aCk7CiAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgp
OwotICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7Cisg
ICAgICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkgewogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7
IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdm9p
ZCogdGVtcDsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRy
LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSkpOworICAgICAgICBpZiAoIXRlbXApCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpm
cm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKICAgICAgICAgKmJ1dHRlcmZseS0+
aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwg
dmVjdG9yTGVuZ3RoKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwogICAg
ICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgICAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gY3JlYXRlV2l0
aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxMCwyNSArNTEwLDE1IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGEKICAgICAvLyB1cC4gQnV0IGlmIHlvdSBkbyAqYW55dGhpbmcq
IHRvIHRyaWdnZXIgYSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25vdwogICAgIC8vIHRo
YXQgeW91ICpoYWQqIGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdpbGwgR0MgYXBwcm9w
cmlhdGVseS4KICAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KTsKKyAgICBW
TSYgdm0gPSAqaGVhcC0+dm0oKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAp
OwogICAgIAogICAgIEFTU0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7CiAK
LSAgICBzaXplX3Qgc2l6ZSA9IHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7Ci0gICAgCi0gICAgaWYg
KHRoaXNPYmplY3QtPm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQotICAgICAgICAmJiAhdGhpc09i
amVjdC0+YnV0dGVyZmx5KCkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7Ci0g
ICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Ci0gICAgICAgIC8vIFJldXNlIGFs
cmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9zc2libGUuCi0gICAgICAgIHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKAotICAgICAgICAgICAgYml0d2lz
ZV9jYXN0PEluZGV4aW5nSGVhZGVyKj4odGhpc09iamVjdC0+dmVjdG9yKCkpLT5idXR0ZXJmbHko
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmhh
c0luZGV4aW5nSGVhZGVyKCkpOwotICAgICAgICBWTSYgdm0gPSAqaGVhcC0+dm0oKTsKLSAgICAg
ICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzT2JqZWN0LCBCdXR0ZXJmbHk6
OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5idXR0ZXJm
bHkoKSwgdm0sIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLAotICAgICAgICAg
ICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAw
LCAwKSk7Ci0gICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGlu
Z0hlYWRlcigpKTsKKyAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXQodm0sIHRoaXNPYmpl
Y3QsIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKKyAgICAgICAgdGhpc09iamVj
dC0+YnV0dGVyZmx5KCksIHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwK
KyAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZh
bHNlLCAwLCAwKSk7CiAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsNzcgKzg4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENs
YXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
Ojpjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSwgc2l6ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFTU0VSVChidXR0ZXJmbHkpOwotICAgIAot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAgCi0gICAg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7
Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gdGhpcy0+aGFzSW5kZXhpbmdI
ZWFkZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAg
IHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShz
dHJ1Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZs
eS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJl
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5C
eXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlm
ICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzLgot
ICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0g
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgZm9yIChzaXplX3QgY291bnQg
PSBzdG9yYWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+
c2V0V2l0aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50U291cmNlKS0+Z2V0KCkpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewotICAgICAgICAg
ICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENvcHkgdGhlIGFycmF5IGlm
IGFwcHJvcHJpYXRlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBF
UzogewotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZs
eS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChu
ZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsK
LSAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVy
RnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7
Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3Vy
Y2UgPSAwOwotICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5KGN1cnJlbnRUYXJnZXQsIGN1
cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKG5ld0J1dHRl
cmZseSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwotICAgIH0gCi19Ci0KIEFM
V0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAg
ICBBU1NFUlQoYnV0dGVyZmx5KTsKQEAgLTE3NSwxMyArMTA0LDE2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwogICAg
ICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAgICAgfQotICAgIHNpemVfdCBj
YXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICAKKyAgICBIZWFwQ2VsbCogYmFzZSA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJ1
dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpOworCisgICAgQVNT
RVJUKEhlYXA6OmhlYXAoYmFzZSkgPT0gdmlzaXRvci5oZWFwKCkpOwogCisgICAgLy8gS2VlcCB0
aGUgYnV0dGVyZmx5IGFsaXZlLgorICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShiYXNlKTsKKyAg
ICAKICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
SGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFn
ZVNpemUpOwotICAgIHZpc2l0b3IuY29weUxhdGVyKAotICAgICAgICB0aGlzLCBCdXR0ZXJmbHlD
b3B5VG9rZW4sCi0gICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAgCiAgICAgLy8gTWFyayB0aGUgYXJyYXkg
aWYgYXBwcm9wcmlhdGUuCiAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewpAQCAt
MjI1LDE5ICsxNTcsNiBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
CiAjZW5kaWYKIH0KIAotdm9pZCBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNl
bGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAgICBpZiAodG9rZW4gIT0g
QnV0dGVyZmx5Q29weVRva2VuKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0
dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRl
cmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7Ci19Ci0KIHZv
aWQgSlNPYmplY3Q6OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxk
ZXImIGJ1aWxkZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKQEAgLTgwNyw2ICs3MjYsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmpl
Y3Q6OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBs
ZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5l
d0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+
Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJ
bnQzMik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5l
d0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7
CkBAIC04MjcsNiArNzQ4LDggQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJ
bml0aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkp
OwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTg0OSw2ICs3NzIs
OCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0
LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IHZl
Y3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUt
PnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTg2Miw2ICs3ODcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
SW5pdGlhbEFycgogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVk
VG9JbnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUo
KSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6
QWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91
c0ludDMyKCk7CiB9CkBAIC04ODEsNiArODExLDExIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWMKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVu
ZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChp
bmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
OyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQo
KS0+Y29udGlndW91cygpOwogfQpAQCAtOTE3LDcgKzg1Miw5IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKIAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1f
YnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRz
KHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50cy4KKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAg
ICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKICAgICBzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOwpA
QCAtOTM4LDExICs4NzUsMTIgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJ
bnQzMgogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmYnV0dGVyZmx5
LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBjdXJyZW50QXNEb3VibGUg
PSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CiAgICAgICAgIEpTVmFsdWUgdiA9IGN1
cnJlbnQtPmdldCgpOwotICAgICAgICBpZiAoIXYpIHsKKyAgICAgICAgLy8gTk9URTogU2luY2Ug
dGhpcyBtYXkgYmUgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHYgY291bGQgYmUgZ2FyYmFn
ZS4gSWYgaXQncyBnYXJiYWdlLAorICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IHdpbGwgYmUgb3Zl
cndyaXR0ZW4gbGF0ZXIuCisgICAgICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAg
ICpjdXJyZW50QXNEb3VibGUgPSBQTmFOOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKHYuaXNJbnQzMigpKTsKICAgICAgICAgKmN1cnJlbnRBc0RvdWJs
ZSA9IHYuYXNJbnQzMigpOwogICAgIH0KICAgICAKQEAgLTk2NiwxMyArOTA0LDExIEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9y
YWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENv
cHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdT
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBu
ZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAg
ICBpZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgdHJhbnNpdGlvbik7CkBAIC0xMDE0LDEzICs5NTAsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3Jh
Z2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRz
KHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5n
dGg7IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKLSAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKSB7Ci0gICAgICAgICAgICBu
ZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNW
YWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKQogICAgICAgICAgICAg
bmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwog
ICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEw
NDEsMTMgKzk3NSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91
CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxl
bmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRl
ZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpT
VmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAo
dikgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJU
KG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMjc1NCw2ICsyNjg2LDgg
QEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICAgICAg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0
aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAg
ICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzY4LDYgKzI3MDIsOCBAQCBib29sIEpTT2Jq
ZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1
ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3
QnV0dGVyZmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
dmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJp
YXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0
ZXJmbHkpOwpAQCAtMjc5OSw4ICsyNzM1LDEyIEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0
aFNsb3coVk0mIHZtLCAKIAogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxl
bmd0aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0
YSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gUE5hTjsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRW
ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgfQorCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2
aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSAiQXJnTGlzdC5o
IgogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJBcnJheVN0b3JhZ2Uu
aCIKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5Lmgi
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVk
ZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1
ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIKICNpbmNsdWRl
ICJIZWFwLmgiCkBAIC0xMDMsNyArMTAzLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpT
Q2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBoZWFwU25hcHNob3QoSlNDZWxsKiwgSGVhcFNuYXBzaG90QnVpbGRlciYpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNP
YmplY3QqKTsKQEAgLTc5Nyw3ICs3OTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0m
LCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgIHZvaWQgdmlzaXRC
dXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lk
IGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNp
emUpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBp
biBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFz
c2VydCBvdGhlcndpc2UuCkBAIC05NDksNyArOTQ3LDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBP
UlRfUFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coVk0mKTsKIAog
cHJvdGVjdGVkOgotICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CisgICAg
QXV4aWxpYXJ5QmFycmllcjxCdXR0ZXJmbHkqPiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxV
RTMyXzY0KQogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3BhZGRpbmc7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDYsIDIwMDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMDgsIDIwMDksIDIwMTItMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDYgKzI0LDcg
QEAKICNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKICNkZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gK
IAorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5IEBAIEFMV0FZU19J
TkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKICAgICBpZiAodmVjdG9yTGVuZ3RoID4g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB2b2lk
KiB0ZW1wOwotICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQotICAgICAgICByZXR1
cm4gMDsKKyAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxs
cHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICBp
ZiAoIXRlbXApCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpOwogICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7
CiAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaW5pdGlhbExlbmd0aCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lk
IFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjpp
c1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjppc1BvaW50ZXJHQ09iamVjdEpTQ2VsbChm
aWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7CiAgICAgICAgICAgICBzdGFja0Zy
YW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6RXhlY3V0YWJsZTsKICAgICAgICAgICAgIHN0YWNr
RnJhbWUuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBtX2xpdmVDZWxsUG9p
bnRlcnMuYWRkKGV4ZWN1dGFibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hp
ZnQuanMJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4IEBACisvL0AgcnVuRGVmYXVsdAordmFyIHggPSBbMi41LCAxLjVdOworeC5sZW5ndGggPSAx
MDAwMDAwMDAwOworeC5sZW5ndGggPSAyOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4
LCAzLjUpOworaWYgKHgudG9TdHJpbmcoKSAhPSAiMy41LDIuNSwxLjUiKQorICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlmdC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnRpZ3VvdXMtYXJy
YXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYgQEAKKy8vQCBydW5EZWZhdWx0Cit2YXIgeCA9IFsnYicsICdhJ107CitBcnJheS5w
cm90b3R5cGUudW5zaGlmdC5jYWxsKHgsICdjJyk7CitpZiAoeC50b1N0cmluZygpICE9ICJjLGIs
YSIpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZG91YmxlLWFycmF5LXVuc2hp
ZnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9k
b3VibGUtYXJyYXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1hcnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNiBAQAorLy9AIHJ1bkRlZmF1bHQKK3ZhciB4ID0gWzIuNSwgMS41XTsKK0Fy
cmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoeCwgMy41KTsKK2lmICh4LnRvU3RyaW5nKCkgIT0g
IjMuNSwyLjUsMS41IikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNjcmli
ZSh4KTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbnQzMi1h
cnJheS11bnNoaWZ0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvaW50MzItYXJyYXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2IEBACisvL0AgcnVuRGVmYXVsdAordmFyIHggPSBbMiwgMV07
CitBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKHgsIDMpOworaWYgKHgudG9TdHJpbmcoKSAh
PSAiMywyLDEiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIGRlc2NyaWJlKHgp
OworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNl
L1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBACi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxMSwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAw
OSwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpAQCAtOTcsNiArOTYsMTEgQEAgdm9p
ZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBfYWxpZ25l
ZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxs
b2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHJldHVybiBfYWxpZ25l
ZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKK30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9p
ZCogcCkgCiB7CiAgICAgX2FsaWduZWRfZnJlZShwKTsKQEAgLTExMSw2ICsxMTUsMTMgQEAgdm9p
ZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBwOwogfQog
Cit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkgCit7CisgICAgdm9pZCogcCA9IG51bGxwdHI7CisgICAgcG9zaXhfbWVtYWxpZ24oJnAsIGFs
aWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVl
KHZvaWQqIHApIAogewogICAgIGZyZWUocCk7CkBAIC0yMzEsNiArMjQyLDExIEBAIHZvaWQqIGZh
c3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4gYm1hbGxvYzo6YXBp
OjptZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25lZE1h
bGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgcmV0dXJuIGJtYWxs
b2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsKK30KKwogdm9pZCBmYXN0QWxp
Z25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHApOwpJbmRleDog
U291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL1dURi93dGYvRmFzdE1h
bGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDUtMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTMsNiArNTMsNyBAQCBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmYXN0RnJlZSh2b2lkKik7CiAKIC8vIEFsbG9jYXRpb25zIGZyb20g
ZmFzdEFsaWduZWRNYWxsb2MoKSBtdXN0IGJlIGZyZWVkIHVzaW5nIGZhc3RBbGlnbmVkRnJlZSgp
LgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5RmFzdEFsaWduZWRN
YWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGZhc3RBbGlnbmVkRnJlZSh2b2lkKik7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZmFz
dE1hbGxvY1NpemUoY29uc3Qgdm9pZCopOwpAQCAtMTA3LDYgKzEwOCw3IEBAIHVzaW5nIFdURjo6
ZmFzdE1hbGxvY1NpemU7CiB1c2luZyBXVEY6OmZhc3RSZWFsbG9jOwogdXNpbmcgV1RGOjpmYXN0
U3RyRHVwOwogdXNpbmcgV1RGOjpmYXN0WmVyb2VkTWFsbG9jOwordXNpbmcgV1RGOjp0cnlGYXN0
QWxpZ25lZE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdENhbGxvYzsKIHVzaW5nIFdURjo6dHJ5
RmFzdE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdFplcm9lZE1hbGxvYzsKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw2ICs2
NCwxOCBAQCB2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBzaXplCiAKIHZvaWQq
IEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7Cisg
ICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbChh
bGlnbm1lbnQsIHNpemUsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjp0
cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBib29sIGNy
YXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbChhbGlnbm1lbnQs
IHNpemUsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUlt
cGwoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit7
CiAgICAgQkFTU0VSVChpc1Bvd2VyT2ZUd28oYWxpZ25tZW50KSk7CiAKICAgICBpZiAoIW1faXNC
bWFsbG9jRW5hYmxlZCkgewpAQCAtODAsNyArOTIsMTAgQEAgdm9pZCogQWxsb2NhdG9yOjphbGxv
Y2F0ZShzaXplX3QgYWxpZ25tZQogICAgICAgICByZXR1cm4gYWxsb2NhdGUocm91bmRVcFRvTXVs
dGlwbGVPZihhbGlnbm1lbnQsIHNpemUpKTsKIAogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICByZXR1cm4gUGVyUHJv
Y2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQs
IHNpemUpOworICAgIEhlYXAqIGhlYXAgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgp
OworICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgcmV0dXJuIGhlYXAtPmFsbG9jYXRl
TGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gaGVhcC0+dHJ5QWxsb2Nh
dGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogfQogCiB2b2lkKiBBbGxvY2F0b3I6OnJl
YWxsb2NhdGUodm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9BbGxvY2F0b3IuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9BbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE1IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6
ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwog
ICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCog
cmVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90KTsKIAogICAgIHZvaWQgc2NhdmVuZ2UoKTsKIAogcHJp
dmF0ZToKKyAgICB2b2lkKiBhbGxvY2F0ZUltcGwoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBi
b29sIGNyYXNoT25GYWlsdXJlKTsKKyAgICAKICAgICBib29sIGFsbG9jYXRlRmFzdENhc2Uoc2l6
ZV90LCB2b2lkKiYpOwogICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKICAgICAK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBzdGF0aWMg
dm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqKTsK
ICAgICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90KTsKQEAgLTc5LDYgKzgw
LDE0IEBAIGlubGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUKICAgICByZXR1
cm4gY2FjaGUtPmFsbG9jYXRvcigpLmFsbG9jYXRlKHNpemUpOwogfQogCitpbmxpbmUgdm9pZCog
Q2FjaGU6OnRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAg
IENhY2hlKiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CisgICAgaWYg
KCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoYWxpZ25t
ZW50LCBzaXplKTsKKyAgICByZXR1cm4gY2FjaGUtPmFsbG9jYXRvcigpLnRyeUFsbG9jYXRlKGFs
aWdubWVudCwgc2l6ZSk7Cit9CisKIGlubGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFk
PENhY2hlPjo6Z2V0RmFzdENhc2UoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1h
bGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Myw2ICs0MywxMiBAQCBpbmxpbmUgdm9pZCogbWFsbG9jKHNpemVf
dCBzaXplKQogICAgIHJldHVybiBDYWNoZTo6YWxsb2NhdGUoc2l6ZSk7CiB9CiAKKy8vIFJldHVy
bnMgbnVsbCBvbiBmYWlsdXJlLgoraW5saW5lIHZvaWQqIHRyeU1lbWFsaWduKHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBDYWNoZTo6dHJ5QWxsb2NhdGUoYWxp
Z25tZW50LCBzaXplKTsKK30KKwogLy8gQ3Jhc2hlcyBvbiBmYWlsdXJlLgogaW5saW5lIHZvaWQq
IG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284898</attachid>
            <date>2016-07-29 13:49:16 -0700</date>
            <delta_ts>2016-07-29 14:09:49 -0700</delta_ts>
            <desc>fixed release build</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>117433</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDM2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCTBGMzhCMDE4MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0Nv
bXBpbGF0aW9uS2V5LmggKi87IH07CiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5j
cHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjM4RDJBMjFENDQxOTY4MDA2
ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjM4RDJBMzFENDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0
NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouY3BwICovOyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzky
Qzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwogCQkwRjNBMUJG
OTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MjIsNiAr
MjUyNCw4IEBACiAJCTBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5o
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25N
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9k
ZS5oOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBB
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRGdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
OTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAw
MERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjE1LDYgKzU2MTksOCBAQAogCQkJCUY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBB
cnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUwMjU1NTk3RDAxRkY2MEY3IC8qIEFy
cmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlC
YXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJh
c2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBC
YXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAtNTc4MCw3ICs1Nzg2LDYgQEAKIAkJ
CQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4Nzcy
RTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKLQkJCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJCQkwRjJCNjZCNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU3OTAsNiArNTc5NSw3IEBA
CiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAq
LywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCkBA
IC03MjczLDYgKzcyNzksNyBAQAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4ODFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkYzMUEwNUM5
NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFi
bGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODMwLDYgKzc4MzcsNyBAQAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQx
QkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5Qzkx
QjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDM0
ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0uaGVhcC5hbGxvY2F0
b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1
cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3Jh
dGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4ODAsMjcgKzM4ODAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRH
UFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5wYXlsb2Fk
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEpTVmFsdWUgaG9sZTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICAgICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCBQTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy50YWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoaG9sZS51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTEsMjcgKzM4NTEsMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAg
IG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwg
bV9qaXQudm0oKS0+aGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RvcmFnZUdQUik7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKQog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgc2l6ZSArPSBvdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMy
KHNpemUpLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKLSAg
ICAgICAgICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEpTVmFsdWUpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxs
b2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXplKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogCkBAIC0xMjcs
MTQgKzEyNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3UmF3T2JqZWN0LCByZXN1bHRHUFIs
IHN0b3JhZ2VHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoKSk7CiAKLSAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpICYmIG51bUVsZW1lbnRzIDwg
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKG51bUVsZW1lbnRzIDwgdmVjdG9yTGVuZ3RoKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpKSk7CiAjZWxzZQogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIHZhbHVlOwotICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQg
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHZhbHVlLmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIodmFsdWUu
YXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXpl
b2YoZG91YmxlKSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpKTsKQEAgLTY3MzksMTggKzY3NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRo
aXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CisgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwpAQCAtNjc4NSwxNiArNjc5NywyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9y
QXV4aWxpYXJ5RGF0YShuZXdTaXplKSksCisgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xv
d1BhdGgpOworICAgIAorICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc3MSw3ICszNzcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzaXplLCBtX291
dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZVZhcmlh
YmxlU2l6ZWRPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAgICAgICAgICBzaXplLCBz
dHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKHNpemUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQ
YXRoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgu
dmFsdWUsIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7CkBAIC00
MDY3LDkgKzQwNjcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlT
aXplID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5jb25z
dEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChi
dXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAgICAgICB2bSgpLmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIExW
YWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBmYWlsQ2Fz
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5z
dWIoZW5kT2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBvYmpl
Y3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENh
c2UpOwogICAgICAgICAgICAgCkBAIC02OTQ3LDExICs2OTQ5LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFu
ZEdldEVuZChidXR0ZXJmbHlTaXplLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgTFZhbHVl
IHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIGJ1
dHRlcmZseVNpemUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwog
CiAgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gaW5kZXhpbmdIZWFkZXJTaXplKSk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0T2ZTdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSk7CiAKICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAg
ICAgICAgICAgICAgIApAQCAtNzc0NSwxMCArNzc0OSwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBpbml0aWFsaXplQXJyYXlFbGVtZW50cyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBMVmFs
dWUgdmVjdG9yTGVuZ3RoLCBMVmFsdWUgYnV0dGVyZmx5KQogICAgIHsKLSAgICAgICAgaWYgKCFo
YXNEb3VibGUoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgLy8gVGhlIEdDIGFscmVhZHkg
aW5pdGlhbGl6ZWQgZXZlcnl0aGluZyB0byBKU1ZhbHVlKCkgZm9yIHVzLgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgICAgIExWYWx1ZSBob2xlOworICAgICAgICBpZiAoaGFz
RG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBob2xlID0gbV9vdXQuY29uc3RJbnQ2
NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBob2xlID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSk7CiAK
ICAgICAgICAgLy8gRG91YmxlcyBtdXN0IGJlIGluaXRpYWxpemVkIHRvIFBOYU4uCiAgICAgICAg
IExCYXNpY0Jsb2NrIGluaXRMb29wID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTc3NjMsOSArNzc2
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwg
b3JpZ2luYWxJbmRleCk7CiAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKHBvaW50
ZXJUeXBlKCksIG9yaWdpbmFsUG9pbnRlcik7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZTY0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4o
UE5hTikpLAotICAgICAgICAgICAgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVBy
b3BlcnRpZXMuYXRBbnlJbmRleCgpLCBwb2ludGVyKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQo
aG9sZSwgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMuYXRBbnlJ
bmRleCgpLCBwb2ludGVyKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbmV4dEluZGV4ID0g
bV9vdXQuc3ViKGluZGV4LCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIG1fb3V0LmFkZEluY29t
aW5nVG9QaGkoaW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0SW5kZXgpKTsKQEAgLTc4MjYsMTIgKzc4
MjksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVl
KSksIHNsb3dQYXRoKTsKKworICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1
ZXMgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
ID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZUluQnl0ZXMpOworICAg
ICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0
SW50UHRyKCZhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQu
YWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3Jh
Z2UpKTsKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRl
cyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTg0MDEsNyAr
ODQwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAg
fQogCi0gICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9y
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nl
c3MgPSBtX291dC5uZXdCbG9jaygpOwogICAgIApAQCAtODQzNiw3ICs4NDQwLDcgQEAgcHJpdmF0
ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC04NDY0LDQ2ICs4NDY4LDU0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xv
d1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0g
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNp
emUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2UsIExW
YWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VT
dGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0
d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3Rl
cCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXBy
ZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVlIHN1
YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9m
VHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxD
YXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJnZU9y
T3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9j
ayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBMVmFs
dWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291
dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVj
aXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNp
emUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5j
b25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291dC5i
cmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVy
c2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
KTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAg
ICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBz
dWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5k
ZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0
ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1
ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9j
ayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikp
LAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQ
dHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxseShs
YXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFkZHJl
c3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1
YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQu
emVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0
TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291
dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNw
YWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxv
Y2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGko
cG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAgICAg
CisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3Is
IGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNp
emUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Js
b2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9v
dXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlVmFy
aWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgdm0o
KS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xvd1Bh
dGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1OTAsMjYgKzg2MDIsMjQg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0
ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAgICAg
TFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3Ro
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7CisgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEoCisgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1Bh
dGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigKLSAg
ICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUp
ICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQo
c3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikp
KTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0Fy
cmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CisgICAg
ICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291
dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9w
dWJsaWNMZW5ndGgpOwogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIodmVj
dG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4p
KSwKLSAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExWYWx1
ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbV9v
dXQuc3RvcmU2NChob2xlLCBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRp
ZXNbaV0pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwgYnV0
dGVyZmx5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDE2
ICs1MSwxNiBAQCBDb25zZXJ2YXRpdmVSb290czo6Q29uc2VydmF0aXZlUm9vdHMoTWFyCiBDb25z
ZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3RzKCkKIHsKICAgICBpZiAobV9yb290cyAh
PSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNl
KG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSlNDZWxsKikpOworICAgICAgICBPU0FsbG9j
YXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSGVh
cENlbGwqKSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogewogICAgIHNp
emVfdCBuZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkgPT0gaW5saW5lQ2FwYWNpdHkgPyBub25Jbmxp
bmVDYXBhY2l0eSA6IG1fY2FwYWNpdHkgKiAyOwotICAgIEpTQ2VsbCoqIG5ld1Jvb3RzID0gc3Rh
dGljX2Nhc3Q8SlNDZWxsKio+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KG5ld0NhcGFj
aXR5ICogc2l6ZW9mKEpTQ2VsbCopKSk7Ci0gICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBt
X3NpemUgKiBzaXplb2YoSlNDZWxsKikpOworICAgIEhlYXBDZWxsKiogbmV3Um9vdHMgPSBzdGF0
aWNfY2FzdDxIZWFwQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChuZXdDYXBh
Y2l0eSAqIHNpemVvZihIZWFwQ2VsbCopKSk7CisgICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3Rz
LCBtX3NpemUgKiBzaXplb2YoSGVhcENlbGwqKSk7CiAgICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxp
bmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3Rz
LCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEhlYXBDZWxsKikp
OwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7
CiB9CkBAIC03MiwxMyArNzIsMTQgQEAgaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdl
bmVyaWNBZAogCiAgICAgbV9jb3BpZWRTcGFjZS0+cGluSWZOZWNlc3NhcnkocCk7CiAKLSAgICBp
ZiAoIUhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZpbHRlciwgKm1fYmxvY2tzLCBwKSkKKyAgICBw
ID0gSGVhcDo6ZmluZEdDT2JqZWN0UG9pbnRlcihmaWx0ZXIsICptX2Jsb2NrcywgcCk7CisgICAg
aWYgKCFwKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkp
CiAgICAgICAgIGdyb3coKTsKIAotICAgIG1fcm9vdHNbbV9zaXplKytdID0gc3RhdGljX2Nhc3Q8
SlNDZWxsKj4ocCk7CisgICAgbV9yb290c1ttX3NpemUrK10gPSBiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBD
b2RlQmxvY2tTZXQ7CitjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0Owot
Y2xhc3MgSlNDZWxsOwogCiBjbGFzcyBDb25zZXJ2YXRpdmVSb290cyB7CiBwdWJsaWM6CkBAIC00
NCwxMSArNDQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0Jik7CiAgICAgCiAgICAgc2l6ZV90
IHNpemUoKTsKLSAgICBKU0NlbGwqKiByb290cygpOworICAgIEhlYXBDZWxsKiogcm9vdHMoKTsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMTI4
OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkgPSA4MTkyIC8gc2l6
ZW9mKEpTQ2VsbCopOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+CiAgICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgVGlueUJsb29tRmls
dGVyLCBNYXJrSG9vayYpOwpAQCAtNTgsMTIgKzU4LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBncm93KCk7CiAKLSAgICBKU0NlbGwqKiBtX3Jvb3RzOworICAgIEhlYXBDZWxsKiogbV9y
b290czsKICAgICBzaXplX3QgbV9zaXplOwogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogICAgIE1h
cmtlZEJsb2NrU2V0KiBtX2Jsb2NrczsKICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsK
LSAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOworICAgIEhlYXBDZWxs
KiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5XTsKIH07CiAKIGlubGluZSBzaXplX3QgQ29u
c2VydmF0aXZlUm9vdHM6OnNpemUoKQpAQCAtNzEsNyArNzEsNyBAQCBpbmxpbmUgc2l6ZV90IENv
bnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKICAgICByZXR1cm4gbV9zaXplOwogfQogCi1pbmxpbmUg
SlNDZWxsKiogQ29uc2VydmF0aXZlUm9vdHM6OnJvb3RzKCkKK2lubGluZSBIZWFwQ2VsbCoqIENv
bnNlcnZhdGl2ZVJvb3RzOjpyb290cygpCiB7CiAgICAgcmV0dXJuIG1fcm9vdHM7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkocmV2aXNpb24gMjAzNjk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksNyArMjksNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gQ29weVRv
a2VuIHsKLSAgICBCdXR0ZXJmbHlDb3B5VG9rZW4sCiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlU
b2tlbiwKICAgICBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sCiAgICAgRGlyZWN0QXJndW1lbnRz
T3ZlcnJpZGVzQ29weVRva2VuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5OCwxMiArNTk4LDYgQEAgdm9pZCBIZWFwOjpjb3B5QmFja2lu
Z1N0b3JlcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QgPSBibG9jay0+d29ya0xpc3QoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoQ29weVdvcmtsaXN0SXRlbSBpdGVtIDogd29ya0xpc3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS50b2tlbigpID09IEJ1dHRlcmZs
eUNvcHlUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6
Y29weUJhY2tpbmdTdG9yZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
ZW0uY2VsbCgpLCBjb3B5VmlzaXRvciwgQnV0dGVyZmx5Q29weVRva2VuKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGl0ZW0uY2VsbCgpLT5tZXRob2RUYWJsZSgpLT5jb3B5QmFja2luZ1N0b3JlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3IsIGl0
ZW0udG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgog
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVK
SVQ7CiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNWYWx1ZSk7IC8vIDAgZm9yIGltbWVk
aWF0ZSB2YWx1ZXMKLSAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU0NlbGwqKTsKKyAgICBz
dGF0aWMgSGVhcCogaGVhcChjb25zdCBIZWFwQ2VsbCopOwogCiAgICAgLy8gVGhpcyBjb25zdGFu
dCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRlIGJldHdlZW4gY2hlY2tzIG9m
IG91ciAKICAgICAvLyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVhcDo6aXNQYWdlZE91dC4gRGVj
cmVhc2luZyBpdCB3aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKQEAgLTEwNCw3ICsxMDQsOCBAQCBw
dWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcnVuIGFmdGVyIHN0b3BBbGxv
Y2F0aW9uKCkgaXMgY2FsbGVkIGFuZCAKICAgICAvLyBiZWZvcmUgbGl2ZW5lc3MgZGF0YSBpcyBj
bGVhcmVkIHRvIGJlIGFjY3VyYXRlLgotICAgIHN0YXRpYyBib29sIGlzUG9pbnRlckdDT2JqZWN0
KFRpbnlCbG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQmLCB2b2lkKiBwb2ludGVyKTsKKyAgICBz
dGF0aWMgdm9pZCogZmluZEdDT2JqZWN0UG9pbnRlcihUaW55Qmxvb21GaWx0ZXIsIE1hcmtlZEJs
b2NrU2V0Jiwgdm9pZCogcG9pbnRlcik7CisgICAgc3RhdGljIGJvb2wgaXNQb2ludGVyR0NPYmpl
Y3RKU0NlbGwoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIGNvbnN0IHZvaWQqIHBv
aW50ZXIpOwogICAgIHN0YXRpYyBib29sIGlzVmFsdWVHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIs
IE1hcmtlZEJsb2NrU2V0JiwgSlNWYWx1ZSk7CiAKICAgICB2b2lkIHdyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqKTsKQEAgLTE1MCw3ICsxNTEsMTEgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9j
YXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7
IHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykg
eyByZXR1cm4gbV9vYmplY3RTcGFjZS5kZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0
b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNw
YWNlLmF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBDb3BpZWRBbGxvY2F0b3Im
IHN0b3JhZ2VBbGxvY2F0b3IoKSB7IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxvY2F0b3IoKTsg
fQorICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6
ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGlu
dGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6
ZSk7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5k
ZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2Nh
dGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCoqLCBzaXplX3QsIHNpemVfdCk7
CiAgICAgdm9pZCBhc2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6aXNDb2xsZWN0aW5n
KCkKICAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbjsKIH0KIAotaW5saW5lIEhl
YXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQoraW5saW5lIEhlYXAqIEhlYXA6Omhl
YXAoY29uc3QgSGVhcENlbGwqIGNlbGwpCiB7CiAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKS0+aGVhcCgpOwogfQpAQCAtMTk5LDcgKzE5OSw3IEBAIGlubGluZSB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NU
eXBlPgotdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQoraW5s
aW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKIHsKICAg
ICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBu
b3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KICAg
ICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3Ry
dWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxl
PENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjEwLDcgKzIx
MCw3IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCAKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpz
dWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCitpbmxpbmUgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBI
ZWFwOjpzdWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0lu
Zm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8g
ZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBl
OjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0
dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIyMSw3ICsyMjEsNyBAQCBNYXJrZWRTcGFjZTo6
U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNz
VHlwZT4KLU1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNp
emVfdCBieXRlcykKK2lubGluZSBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9i
amVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBl
eHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZl
IGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVk
c0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJ
bW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIzMSw2ICsyMzEsMzcgQEAgTWFya2VkQWxsb2NhdG9yJiBI
ZWFwOjphbGxvY2F0b3JGb3JPYmplYwogICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmplY3RXaXRo
b3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZUF1
eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lk
KiByZXN1bHQgPSBtX29iamVjdFNwYWNlLmFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBF
TkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGlu
ZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRP
d25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFs
bG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQorewor
ICAgIHZvaWQqIHJlc3VsdCA9IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoYnl0
ZXMpOworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBH
QyBhbGxvY2F0aW5nICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVz
LCBpbnRlbmRlZE93bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5k
ZWRPd25lcik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCog
SGVhcDo6dHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQq
IG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICB2b2lkKiBu
ZXdCYXNlID0gdHJ5QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7Cisg
ICAgaWYgKCFuZXdCYXNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBtZW1jcHkobmV3
QmFzZSwgb2xkQmFzZSwgb2xkU2l6ZSk7CisgICAgcmV0dXJuIG5ld0Jhc2U7Cit9CisKIGlubGlu
ZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRl
ZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiB7CiAgICAgQ2hlY2tlZEJvb2xl
YW4gcmVzdWx0ID0gbV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CkBA
IC0zNTQsMjAgKzM4NSw0NiBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2soc2l6ZV90
IGNhCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3QoVGlu
eUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lk
KiBwb2ludGVyKQoraW5saW5lIHZvaWQqIEhlYXA6OmZpbmRHQ09iamVjdFBvaW50ZXIoVGlueUJs
b29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lkKiBw
b2ludGVyKQogewogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tGb3IocG9pbnRlcik7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRz
PihjYW5kaWRhdGUpKSkgewogICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAhbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIAorICAgIGlmICghbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpID09IEhlYXBDZWxsOjpKU0NlbGwpIHsK
KyAgICAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0gZWxzZQorICAgICAgICBwb2ludGVyID0gY2Fu
ZGlkYXRlLT5jZWxsQWxpZ24ocG9pbnRlcik7CisKKyAgICBpZiAoIWNhbmRpZGF0ZS0+aXNMaXZl
Q2VsbChwb2ludGVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gcG9p
bnRlcjsKK30KIAoraW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3RKU0NlbGwoVGlu
eUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCBjb25z
dCB2b2lkKiBwb2ludGVyKQoreworICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRC
bG9jazo6YmxvY2tGb3IocG9pbnRlcik7CisgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2Vf
Y2FzdDxCaXRzPihjYW5kaWRhdGUpKSkgeworICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAh
bWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25l
ZChwb2ludGVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtYXJrZWRCbG9j
a1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpICE9IEhlYXBDZWxsOjpKU0NlbGwpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghY2FuZGlkYXRlLT5pc0xpdmVDZWxsKHBvaW50
ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM3OCw3ICs0MzUsNyBAQCBpbmxpbmUg
Ym9vbCBIZWFwOjppc1ZhbHVlR0NPYmplY3QoVGlueUJsCiB7CiAgICAgaWYgKCF2YWx1ZS5pc0Nl
bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc1BvaW50ZXJHQ09iamVj
dChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBzdGF0aWNfY2FzdDx2b2lkKj4odmFsdWUuYXNDZWxs
KCkpKTsKKyAgICByZXR1cm4gaXNQb2ludGVyR0NPYmplY3RKU0NlbGwoZmlsdGVyLCBtYXJrZWRC
bG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHZhbHVlLmFzQ2VsbCgpKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3
IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+
ZGlkUmV0aXJlQmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMp
CiB7CiAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRC
bG9jayA9PSBtX25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5l
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQog
Ci1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAg
IG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5
QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFt
X2N1cnJlbnRCbG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNs
b3dDYXNlKHNpemVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsK
KyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsK
K30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBi
eXRlcykKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFs
bG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBib29sIGNy
YXNoT25GYWlsdXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKIApA
QCAtMTU1LDI5ICsxNjcsMzQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlKAogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRpZEFsbG9j
YXRlKG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9j
YXRlKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKGJ5dGVzKTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlP
ckRlZmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgICAg
ICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAgICAg
aWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgQVNT
RVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAgICBNYXJr
ZWRCbG9jayogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAoIWJsb2Nr
KSB7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJlc3VsdCA9
IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xs
ZWN0aW5nKGJ5dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1NYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBi
eXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2soc2l6
ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplOwogICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpICsgV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwpAQCAt
MTg2LDcgKzIwMyw3IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmwK
IAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDogV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwogCi0gICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxs
U2l6ZSwgbV9hdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNyZWF0ZSgq
bV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwogfQogCiB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rp
b247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFw
OyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsKQEAgLTcx
LDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRl
KHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CisgICAgdm9p
ZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAg
ICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAgdm9pZCog
dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lkKiB0cnlQ
b3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNpemVf
dCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZvaWQgcmV0
aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBAIC0xMTMs
MjEgKzExNiwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogCiAg
ICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJsb2NrOjpG
cmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFkoIWhlYWQp
KSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOwor
ICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1z
ZXQocmVzdWx0LCAweENELCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0dXJu
IGhlYWQ7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVf
dCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0
LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1bHQg
PSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1lbXNl
dChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+
bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKLSNl
bmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhD
RCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDE0ICszNSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29sIGNvbXB1dGVC
YWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtlZEJsb2NrKiBN
YXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
LCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmli
dXRlcyYgYXR0cmlidXRlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKEhl
YXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNp
emVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsK
ICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5jZSsrOwogICAgICAgICBp
ZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxvY2sgQmFs
YW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtlZEJsb2NrKiBibG9jayA9
IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0eSkpIE1h
cmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKKyAg
ICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBh
Y2l0eSk7CisgICAgaWYgKCFibG9ja1NwYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1hcmtlZEJs
b2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsKICAgICBoZWFw
LmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJldHVybiBibG9jazsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjAzNjk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDEwICsxMDksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
dXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMg
TWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAg
ICAgc3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvcios
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1
dGVzJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7
CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CisgICAg
ICAgIHZvaWQqIGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayog
YmxvY2tGb3IoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZpcnN0QXRvbSgp
OwogICAgICAgICAKQEAgLTIzNiw2ICsyMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBhdG9tQWxpZ25tZW50TWFzayk7
CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpjZWxsQWxpZ24odm9pZCog
cCkKKyAgICB7CisgICAgICAgIEJpdHMgYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCk7
CisgICAgICAgIGJpdHMgLT0gYml0cyAlIGNlbGxTaXplKCk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihiaXRzKTsKKyAgICB9CisKICAgICBpbmxpbmUgTWFya2VkQmxv
Y2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2b2lkKiBwKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJp
dHM+KHApICYgYmxvY2tNYXNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFs
bG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZUF1eGls
aWFyeShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CiAK
ICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7IHJldHVy
biBtX2Rlc3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNX
aXRob3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KQEAgLTE4Miw2ICsx
ODMsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUF1eGlsaQogICAgIHJl
dHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKGJ5dGVzKTsKIH0KIAor
aW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0
ZXMpCit7CisgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcykudHJ5QWxsb2Nh
dGUoYnl0ZXMpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQg
TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAg
IGZvckVhY2hTdWJzcGFjZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsMTAgKzEx
OCw0MiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCiAKIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7Ci0g
ICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIEhlYXBD
ZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOwogICAgIHNpemVfdCBzaXpl
ID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBhcHBlbmQocm9vdHNbaV0pOworICAgICAgICBhcHBlbmRKU0Nl
bGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpT
Q2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKiBoZWFwQ2VsbCkKK3sKKyAgICBpZiAoIWhlYXBDZWxs
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbik7CisgICAgCisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQo
aGVhcENlbGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTWFya2VkQmxvY2sqIGJsb2Nr
ID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGhlYXBDZWxsKTsKKyAgICBzd2l0Y2ggKGJsb2NrLT5j
ZWxsS2luZCgpKSB7CisgICAgY2FzZSBIZWFwQ2VsbDo6SlNDZWxsOiB7CisgICAgICAgIEpTQ2Vs
bCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFqc0NlbGwtPnN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKworICAgICAg
ICBhcHBlbmRUb01hcmtTdGFjayhibG9jaywganNDZWxsKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBIZWFwQ2VsbDo6QXV4aWxpYXJ5OiB7CisgICAgICAgIG5v
dGVMaXZlQXV4aWxpYXJ5Q2VsbChibG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KIH0K
IAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCkBAIC0xNjgsMTcgKzIw
MCwzNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hCiAKIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKIHsKKyAgICBhcHBl
bmRUb01hcmtTdGFjayhNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCksIGNlbGwpOworfQorCit2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayogYmxvY2ssIEpT
Q2VsbCogY2VsbCkKK3sKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFT
U0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAKICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5
dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7Cisg
ICAgbV9ieXRlc1Zpc2l0ZWQgKz0gYmxvY2stPmNlbGxTaXplKCk7CiAgICAgbV9zdGFjay5hcHBl
bmQoY2VsbCk7CiAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAg
ICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2b2lk
IFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgaWYg
KEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGJhc2UpKTsKK30K
Kwordm9pZCBTbG90VmlzaXRvcjo6bm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKiBi
bG9jaykKK3sKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBtX2J5dGVzVmlzaXRlZCArPSBibG9j
ay0+Y2VsbFNpemUoKTsKK30KKwogY2xhc3MgU2V0Q3VycmVudENlbGxTY29wZSB7CiBwdWJsaWM6
CiAgICAgU2V0Q3VycmVudENlbGxTY29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlND
ZWxsKiBjZWxsKQpAQCAtMjA0LDcgKzI1NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6dmlzaXRDaGkKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAgICAg
U2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKLQorICAg
IAogICAgIG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nID0gY2VsbC0+Y2Vs
bFN0YXRlKCk7CiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkQmxhY2spOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZp
c2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw4ICszNywxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFy
ZWREYXRhOwogY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcFNuYXBzaG90
QnVpbGRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEpJVFdyaXRlQmFycmllcjsKK2Ns
YXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplcjsKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CiBjbGFzcyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyOwpA
QCAtMTA1LDYgKzEwNywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJl
bmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAg
IAorICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6
ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KKyAgICAvLyB0aGlz
IHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgorICAgIHZvaWQgbWFy
a0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAogICAgIHZvaWQgY29weUxhdGVyKEpTQ2Vs
bCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCkBAIC0xMjQsMTAgKzEzMCwxMyBA
QCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKEpTVmFsdWUpOyAvLyBUaGlzIGlzIHBy
aXZhdGUgdG8gZW5jb3VyYWdlIGNsaWVudHMgdG8gdXNlIFdyaXRlQmFycmllcjxUPi4KKyAgICB2
b2lkIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKik7CiAgICAgdm9pZCBhcHBlbmRI
aWRkZW4oSlNWYWx1ZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1hcmtlZEFu
ZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2so
SlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayosIEpTQ2Vs
bCopOworICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKik7CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJ
KHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDkgQEAK
ICNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRl
ICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
SmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVj
dG9yLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0
cmFjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDQgKzkxLDMgQEAgaW50IG1haW4oaW50LCBjaGFyKiopCiAgICAgcmV0dXJuIDA7CiB9
CiAKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFs
eXplci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNb2R1bGVBbmFseXplci5oIgogCi0jaW5jbHVkZSAi
SWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU01vZHVsZVJlY29yZC5oIgogI2luY2x1
ZGUgIlN0cm9uZ0lubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0F1eGlsaWFyeUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFZNOworCisvLyBBbiBBdXhpbGlhcnkgYmFycmllciBp
cyBhIGJhcnJpZXIgdGhhdCBkb2VzIG5vdCB0cnkgdG8gcmVhc29uIGFib3V0IHRoZSB2YWx1ZSBi
ZWluZyBzdG9yZWQgaW50bworLy8gaXQsIG90aGVyIHRoYW4gaW50ZXJwcmV0aW5nIGEgZmFsc2lz
aCB2YWx1ZSBhcyBub3QgbmVlZCBhIGJhcnJpZXIuIEl0J3MgT0sgdG8gdXNlIHRoaXMgZm9yIGVp
dGhlcgorLy8gSlNDZWxscyBvciBhbnkgb3RoZXIga2luZCBvZiBkYXRhLCBzbyBsb25nIGFzIGl0
IHJlc3BvbmRzIHRvIG9wZXJhdG9yISgpLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEF1
eGlsaWFyeUJhcnJpZXIgeworcHVibGljOgorICAgIEF1eGlsaWFyeUJhcnJpZXIoKSB7IH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEF1eGlsaWFyeUJhcnJpZXIoVk0mLCBK
U0NlbGwqLCBVJiYpOworICAgIAorICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSBUKCk7IH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0KFZNJiwgSlNDZWxs
KiwgVSYmKTsKKyAgICAKKyAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisgICAgCisgICAgVCogc2xvdCgpIHsgcmV0dXJuICZtX3ZhbHVlOyB9CisgICAgCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXRXaXRob3V0QmFycmllcihV
JiYgdmFsdWUpIHsgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7IH0KKyAgICAKK3By
aXZhdGU6CisgICAgVCBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFy
cmllcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkhlYXAuaCIKKyNp
bmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3RlbXBsYXRlPHR5cGVuYW1lIFU+CitBdXhpbGlhcnlCYXJyaWVyPFQ+OjpBdXhpbGlhcnlCYXJy
aWVyKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVSYmIHZhbHVlKQoreworICAgIG1fdmFsdWUgPSBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFU+Cit2b2lkIEF1
eGlsaWFyeUJhcnJpZXI8VD46OnNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2YWx1ZSkK
K3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5oZWFwLndy
aXRlQmFycmllcihvd25lcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZp
c2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEwICszNyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZt
LCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKIHsKLSAgICB2b2lkKiB0ZW1wOwogICAgIHNpemVfdCBzaXplID0gdG90
YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIsIHNpemUsICZ0ZW1wKSk7Ci0gICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmhlYXAuYWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5k
ZWRPd25lciwgc2l6ZSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTE5LDcgKzExOCw4IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5
UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBz
aXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGlu
Z0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdT
aXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBpZiAoIXZtLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2Uo
aW50ZW5kZWRPd25lciwgJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQorICAgIHRoZUJhc2Ug
PSB2bS5oZWFwLnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgdGhlQmFzZSwg
b2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgaWYgKCF0aGVCYXNlKQogICAgICAgICByZXR1cm4gMDsK
ICAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxNSBAQCBD
bG9uZWRBcmd1bWVudHMqIENsb25lZEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgaWYgKHZlY3Rvckxl
bmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgdm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1
ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKKyAgICB2
b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICBpZiAoIXRlbXApCiAg
ICAgICAgIHJldHVybiAwOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpm
cm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIGJ1
dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgYnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5n
dGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uY2xlYXIoKTsKIAogICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0KICAgICAgICAg
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8Q2xvbmVkQXJndW1lbnRzPih2bS5oZWFwKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyICh0aGV0YWxlY3JhZnRlckBnbWFpbC5jb20pCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwu
Y29tKQorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsOCArMzQsNyBAQAogI2lu
Y2x1ZGUgIkludGxDb2xsYXRvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSW50bE9iamVjdC5o
IgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAko
cmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNyBAQAogI2luY2x1
ZGUgIkludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSW50bE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDggQEAKICNpbmNsdWRl
ICJJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJl
dmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNo
aWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gc3RvcmFn
ZS0+YnV0dGVyZmx5KCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVy
ZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0g
c3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lU2l6ZSgpOwotCisgICAgCiAgICAgLy8gSWYgbm90LCB3
ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KICAgICBBU1NFUlQo
IWFkZFRvRnJvbnQgfHwgY291bnQgPiBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7CiAKQEAgLTI1NCw3
ICsyNTQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAg
Ly8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxhcmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cg
dGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJlcXVpcmVkVmVjdG9yTGVuZ3RoLgogCiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKKyAgICB1
bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1
bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG9sZFZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsK
ICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUs
IGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTI3OSw3ICsyODAsOCBAQCBi
b29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgICAgIG5ld1N0b3Jh
Z2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKICAgICB9IGVsc2UgewogICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRy
dWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgaWYg
KCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBuZXdTaXplLCAmbmV3QWxsb2NCYXNl
KSkKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0
aGlzLCBuZXdTaXplKTsKKyAgICAgICAgaWYgKCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0
eTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0xOTEsOCArMTkxLDggQEAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQXJy
YXlCdXR0ZXJmbHkoVgogICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1ZSwgYmFz
ZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCksCiAgICAgICAgIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RPUl9MRU4pKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFz
ID0gMDsKICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgIHN0b3JhZ2UtPm1f
aW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICAg
ICByZXR1cm4gYnV0dGVyZmx5OwogfQpAQCAtMjE1LDEyICsyMTUsMTcgQEAgaW5saW5lIEpTQXJy
YXkqIEpTQXJyYXk6OmNyZWF0ZShWTSYgdm0sIAogICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBBU1NFUlQoCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICAgICAgICAgICAgIHx8IHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKICAgICAg
ICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkodm0sIDAsIGluaXRpYWxMZW5ndGgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQkFTRV9WRUNUT1JfTEVOOyArK2kp
CisgICAgICAgICAgICBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVh
cigpOwogICAgIH0KIAogICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSk7CkBAIC0yMzUsMzMgKzI0MCwzOSBAQCBpbmxpbmUgSlNBcnJheSogSlNB
cnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU3RvcmFnZSA9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
OwotICAgIGlmIChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkpIHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKTsKKyAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhp
bmdUeXBlKSkpIHsKICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpKTsKLQotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZt
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9m
TGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGhhc1VuZGVjaWRl
ZChpbmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUpCisg
ICAgICAgICAgICB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFz
Q29udGlndW91cyhpbmRleGluZ1R5cGUpKTsKKworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uaGVh
cC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBv
dXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CisgICAgICAgIGlmICghdGVtcCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGlu
ZVN0b3JhZ2UpOwogICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5n
dGgpOwogICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsK
LSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAg
ICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAg
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHZvaWQq
IHRlbXA7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwg
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAgICAgaWYgKCF0ZW1wKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJv
bUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CiAgICAgICAgICpidXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZl
Y3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKICAgICAg
ICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICAgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNyZWF0ZVdpdGhC
dXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkocmV2aXNpb24gMjAz
Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNywxMyArMjcsOSBAQAogI2luY2x1ZGUgIkpTQ2FsbGVlLmgiCiAKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJTbG90
VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKLSNpbmNsdWRlICJT
dHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxMCwyNSArNTEwLDE1IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGEKICAgICAvLyB1cC4gQnV0IGlmIHlvdSBkbyAqYW55dGhpbmcqIHRvIHRyaWdnZXIg
YSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25vdwogICAgIC8vIHRoYXQgeW91ICpoYWQq
IGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdpbGwgR0MgYXBwcm9wcmlhdGVseS4KICAg
ICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KTsKKyAgICBWTSYgdm0gPSAqaGVh
cC0+dm0oKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXApOwogICAgIAogICAg
IEFTU0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7CiAKLSAgICBzaXplX3Qg
c2l6ZSA9IHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7Ci0gICAgCi0gICAgaWYgKHRoaXNPYmplY3Qt
Pm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQotICAgICAgICAmJiAhdGhpc09iamVjdC0+YnV0dGVy
Zmx5KCkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAgIEFTU0VS
VCh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Ci0gICAgICAgIC8vIFJldXNlIGFscmVhZHkgYWxsb2Nh
dGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9zc2libGUuCi0gICAgICAgIHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PEluZGV4
aW5nSGVhZGVyKj4odGhpc09iamVjdC0+dmVjdG9yKCkpLT5idXR0ZXJmbHkoKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVh
ZGVyKCkpOwotICAgICAgICBWTSYgdm0gPSAqaGVhcC0+dm0oKTsKLSAgICAgICAgdGhpc09iamVj
dC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzT2JqZWN0LCBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jv
d0FycmF5UmlnaHQoCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKSwgdm0sIHRo
aXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLAotICAgICAgICAgICAgdGhpc09iamVj
dC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKSk7Ci0gICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsK
KyAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXQodm0sIHRoaXNPYmplY3QsIEJ1dHRlcmZs
eTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKKyAgICAgICAgdGhpc09iamVjdC0+YnV0dGVyZmx5
KCksIHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKKyAgICAgICAgdGhp
c09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKSk7
CiAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAy
MDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiwxMiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjAz
Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE0ICsyNywxMCBAQAogI2luY2x1ZGUgIkpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0LmgiCiAKICNpbmNsdWRlICJFcnJvci5oIgotI2luY2x1ZGUgIklk
ZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNs
dWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZVJlY29yZC5oIgogI2lu
Y2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklu
bGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTQgKzI4LDEwIEBACiAK
ICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJJ
ZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU01hcC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJK
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9u
IDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsNzcgKzg4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENs
YXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
Ojpjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSwgc2l6ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFTU0VSVChidXR0ZXJmbHkpOwotICAgIAot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAgCi0gICAg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7
Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gdGhpcy0+aGFzSW5kZXhpbmdI
ZWFkZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAg
IHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShz
dHJ1Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZs
eS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJl
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5C
eXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlm
ICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzLgot
ICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0g
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgZm9yIChzaXplX3QgY291bnQg
PSBzdG9yYWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+
c2V0V2l0aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50U291cmNlKS0+Z2V0KCkpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewotICAgICAgICAg
ICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENvcHkgdGhlIGFycmF5IGlm
IGFwcHJvcHJpYXRlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBF
UzogewotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZs
eS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChu
ZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsK
LSAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVy
RnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7
Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3Vy
Y2UgPSAwOwotICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5KGN1cnJlbnRUYXJnZXQsIGN1
cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKG5ld0J1dHRl
cmZseSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwotICAgIH0gCi19Ci0KIEFM
V0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAg
ICBBU1NFUlQoYnV0dGVyZmx5KTsKQEAgLTE3NSwxMyArMTA0LDE2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwogICAg
ICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAgICAgfQotICAgIHNpemVfdCBj
YXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICAKKyAgICBIZWFwQ2VsbCogYmFzZSA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJ1
dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpOworCisgICAgQVNT
RVJUKEhlYXA6OmhlYXAoYmFzZSkgPT0gdmlzaXRvci5oZWFwKCkpOwogCisgICAgLy8gS2VlcCB0
aGUgYnV0dGVyZmx5IGFsaXZlLgorICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShiYXNlKTsKKyAg
ICAKICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
SGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFn
ZVNpemUpOwotICAgIHZpc2l0b3IuY29weUxhdGVyKAotICAgICAgICB0aGlzLCBCdXR0ZXJmbHlD
b3B5VG9rZW4sCi0gICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAgCiAgICAgLy8gTWFyayB0aGUgYXJyYXkg
aWYgYXBwcm9wcmlhdGUuCiAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewpAQCAt
MjI1LDE5ICsxNTcsNiBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
CiAjZW5kaWYKIH0KIAotdm9pZCBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNl
bGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0KLSAgICBpZiAodG9rZW4gIT0g
QnV0dGVyZmx5Q29weVRva2VuKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0
dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRl
cmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7Ci19Ci0KIHZv
aWQgSlNPYmplY3Q6OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxk
ZXImIGJ1aWxkZXIpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKQEAgLTgwNyw2ICs3MjYsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmpl
Y3Q6OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBs
ZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5l
d0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+
Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJ
bnQzMik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5l
d0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7
CkBAIC04MjcsNiArNzQ4LDggQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJ
bml0aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkp
OwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTg0OSw2ICs3NzIs
OCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0
LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IHZl
Y3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUt
PnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTg2Miw2ICs3ODcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
SW5pdGlhbEFycgogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVk
VG9JbnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUo
KSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6
QWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91
c0ludDMyKCk7CiB9CkBAIC04ODEsNiArODExLDExIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWMKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVu
ZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChp
bmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
OyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQo
KS0+Y29udGlndW91cygpOwogfQpAQCAtOTE3LDcgKzg1Miw5IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKIAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1f
YnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRz
KHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50cy4KKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAg
ICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKICAgICBzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOwpA
QCAtOTM4LDExICs4NzUsMTIgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJ
bnQzMgogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmYnV0dGVyZmx5
LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBjdXJyZW50QXNEb3VibGUg
PSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CiAgICAgICAgIEpTVmFsdWUgdiA9IGN1
cnJlbnQtPmdldCgpOwotICAgICAgICBpZiAoIXYpIHsKKyAgICAgICAgLy8gTk9URTogU2luY2Ug
dGhpcyBtYXkgYmUgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHYgY291bGQgYmUgZ2FyYmFn
ZS4gSWYgaXQncyBnYXJiYWdlLAorICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IHdpbGwgYmUgb3Zl
cndyaXR0ZW4gbGF0ZXIuCisgICAgICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAg
ICpjdXJyZW50QXNEb3VibGUgPSBQTmFOOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKHYuaXNJbnQzMigpKTsKICAgICAgICAgKmN1cnJlbnRBc0RvdWJs
ZSA9IHYuYXNJbnQzMigpOwogICAgIH0KICAgICAKQEAgLTk2NiwxMyArOTA0LDExIEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9y
YWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENv
cHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdT
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBu
ZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAg
ICBpZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgdHJhbnNpdGlvbik7CkBAIC0xMDE0LDEzICs5NTAsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3Jh
Z2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRz
KHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5n
dGg7IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKLSAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKSB7Ci0gICAgICAgICAgICBu
ZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNW
YWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKQogICAgICAgICAgICAg
bmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwog
ICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEw
NDEsMTMgKzk3NSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91
CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxl
bmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRl
ZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpT
VmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAo
dikgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJU
KG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMjc1NCw2ICsyNjg2LDgg
QEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICAgICAg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0
aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAg
ICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzY4LDYgKzI3MDIsOCBAQCBib29sIEpTT2Jq
ZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1
ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3
QnV0dGVyZmx5KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
dmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJp
YXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0
ZXJmbHkpOwpAQCAtMjc5OSw4ICsyNzM1LDEyIEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0
aFNsb3coVk0mIHZtLCAKIAogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxl
bmd0aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0
YSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gUE5hTjsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRW
ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgfQorCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2
aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSAiQXJnTGlzdC5o
IgogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJBcnJheVN0b3JhZ2Uu
aCIKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5Lmgi
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVk
ZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1
ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIKICNpbmNsdWRl
ICJIZWFwLmgiCkBAIC0xMDMsNyArMTAzLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpT
Q2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBoZWFwU25hcHNob3QoSlNDZWxsKiwgSGVhcFNuYXBzaG90QnVpbGRlciYpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNP
YmplY3QqKTsKQEAgLTc5Nyw3ICs3OTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0m
LCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgIHZvaWQgdmlzaXRC
dXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lk
IGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNp
emUpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBp
biBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFz
c2VydCBvdGhlcndpc2UuCkBAIC05NDksNyArOTQ3LDcgQEAgcHJpdmF0ZToKICAgICBKU19FWFBP
UlRfUFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coVk0mKTsKIAog
cHJvdGVjdGVkOgotICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CisgICAg
QXV4aWxpYXJ5QmFycmllcjxCdXR0ZXJmbHkqPiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxV
RTMyXzY0KQogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3BhZGRpbmc7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24g
MjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDYsIDIwMDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMDgsIDIwMDksIDIwMTItMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDYgKzI0LDcg
QEAKICNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKICNkZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gK
IAorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCShyZXZpc2lvbiAyMDM2
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsOSBAQAogCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgi
CiAjaW5jbHVkZSAiRXJyb3IuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNQcm9taXNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJNaWNyb3Rhc2suaCIKLSNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxMSBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5o
IgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNDQnVpbHRpbnMuaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAiTWljcm90
YXNrLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsMTMgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKLSNpbmNsdWRlICJTbG90
VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTIgKzI2
LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCiAK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRl
ICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1
ZGUgIkpTU3RyaW5nSXRlcmF0b3IuaCIKIAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgotI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAJKHJldmlzaW9uIDIwMzY5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiw5ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgiCiAKLSNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIw
MzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAi
QnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiR2V0dGVy
U2V0dGVyLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRv
cnMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEw
IEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUg
Ik1hcFByb3RvdHlwZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDEx
IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKICNpbmNsdWRlICJNYXBQcm90b3R5cGUubHV0
LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCAr
MjgsNyBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJZGVudGlmaWVySW5saW5l
cy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlByb3h5T2Jq
ZWN0LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgi
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaAkocmV2aXNpb24gMjAzNjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDkg
QEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYQogICAgIGlmICh2ZWN0
b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHZvaWQqIHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgw
LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCks
IHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCi0g
ICAgICAgIHJldHVybiAwOworICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4
aWxpYXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOworICAgIGlmICghdGVtcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVj
dG9yTGVuZ3RoKTsKICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3Ro
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDcgKzQz
Nyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKEhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGV4ZWN1
dGFibGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEhlYXA6OmlzUG9pbnRlckdDT2Jq
ZWN0SlNDZWxsKGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGV4ZWN1dGFibGUpKTsKICAgICAgICAg
ICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpFeGVjdXRhYmxlOwogICAgICAg
ICAgICAgc3RhY2tGcmFtZS5leGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICAgICAgICAgIG1f
bGl2ZUNlbGxQb2ludGVycy5hZGQoZXhlY3V0YWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxMSBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0j
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJNYXBEYXRhLmgiCiAjaW5jbHVkZSAiU2V0UHJv
dG90eXBlLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TZXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTEgQEAKICNp
bmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNp
bmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIlNldFByb3RvdHlwZS5sdXQuaCIKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsy
OCw5IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9u
cy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTV2Vha01hcC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKICNpbmNsdWRlICJXZWFrTWFwUHJvdG90eXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTEgKzI4LDkg
QEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgi
Ci0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
I2luY2x1ZGUgIldlYWtTZXRQcm90b3R5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LXN0b3JhZ2UtYXJyYXktdW5z
aGlmdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2FycmF5LXN0b3JhZ2UtYXJyYXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LXN0b3JhZ2UtYXJyYXktdW5zaGlmdC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKy8vQCBydW5EZWZhdWx0Cit2YXIgeCA9
IFsyLjUsIDEuNV07Cit4Lmxlbmd0aCA9IDEwMDAwMDAwMDA7Cit4Lmxlbmd0aCA9IDI7CitBcnJh
eS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKHgsIDMuNSk7CitpZiAoeC50b1N0cmluZygpICE9ICIz
LjUsMi41LDEuNSIpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUo
eCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29udGlndW91
cy1hcnJheS11bnNoaWZ0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvY29udGlndW91cy1hcnJheS11bnNoaWZ0LmpzCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29udGlndW91cy1hcnJheS11bnNo
aWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorLy9AIHJ1bkRlZmF1bHQKK3Zh
ciB4ID0gWydiJywgJ2EnXTsKK0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoeCwgJ2MnKTsK
K2lmICh4LnRvU3RyaW5nKCkgIT0gImMsYixhIikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyBkZXNjcmliZSh4KTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1hcnJheS11bnNoaWZ0LmpzCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZG91YmxlLWFycmF5
LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisvL0AgcnVuRGVmYXVs
dAordmFyIHggPSBbMi41LCAxLjVdOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAz
LjUpOworaWYgKHgudG9TdHJpbmcoKSAhPSAiMy41LDIuNSwxLjUiKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbnQzMi1hcnJheS11bnNoaWZ0Lmpz
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW50
MzItYXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKy8vQCBy
dW5EZWZhdWx0Cit2YXIgeCA9IFsyLCAxXTsKK0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwo
eCwgMyk7CitpZiAoeC50b1N0cmluZygpICE9ICIzLDIsMSIpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RN
YWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShy
ZXZpc2lvbiAyMDM2OTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDYgQEAKLS8vIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NS0yMDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBt
ZXQ6CkBAIC05Nyw2ICs5NiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxp
Z25tZW50CiAgICAgcmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOwogfQog
Cit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkgCit7CisgICAgcmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOworfQor
CiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBfYWxpZ25lZF9mcmVlKHAp
OwpAQCAtMTExLDYgKzExNSwxMyBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxp
Z25tZW50CiAgICAgcmV0dXJuIHA7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICB2b2lkKiBwID0gbnVsbHB0cjsK
KyAgICBwb3NpeF9tZW1hbGlnbigmcCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gcDsK
K30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgZnJlZShwKTsKQEAg
LTIzMSw2ICsyNDIsMTEgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVu
dAogICAgIHJldHVybiBibWFsbG9jOjphcGk6Om1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CiB9
CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplKSAKK3sKKyAgICByZXR1cm4gYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQs
IHNpemUpOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBibWFs
bG9jOjphcGk6OmZyZWUocCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMDM2OTkp
CisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC01Myw2ICs1Myw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RGcmVlKHZvaWQq
KTsKIAogLy8gQWxsb2NhdGlvbnMgZnJvbSBmYXN0QWxpZ25lZE1hbGxvYygpIG11c3QgYmUgZnJl
ZWQgdXNpbmcgZmFzdEFsaWduZWRGcmVlKCkuCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogZmFz
dEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJ
VkFURSB2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qp
OwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqKTsKIAogV1RG
X0VYUE9SVF9QUklWQVRFIHNpemVfdCBmYXN0TWFsbG9jU2l6ZShjb25zdCB2b2lkKik7CkBAIC0x
MDcsNiArMTA4LDcgQEAgdXNpbmcgV1RGOjpmYXN0TWFsbG9jU2l6ZTsKIHVzaW5nIFdURjo6ZmFz
dFJlYWxsb2M7CiB1c2luZyBXVEY6OmZhc3RTdHJEdXA7CiB1c2luZyBXVEY6OmZhc3RaZXJvZWRN
YWxsb2M7Cit1c2luZyBXVEY6OnRyeUZhc3RBbGlnbmVkTWFsbG9jOwogdXNpbmcgV1RGOjp0cnlG
YXN0Q2FsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0TWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0
WmVyb2VkTWFsbG9jOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDE4IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGUoc2l6ZV90IHNpemUKIAogdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsK
KyAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUp
OworfQorCit2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCBzaXplKQoreworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBmYWxzZTsKKyAgICByZXR1
cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2
b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGln
bm1lbnQpKTsKIAogICAgIGlmICghbV9pc0JtYWxsb2NFbmFibGVkKSB7CkBAIC04MCw3ICs5Miwx
MCBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lCiAgICAgICAgIHJl
dHVybiBhbGxvY2F0ZShyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc2l6ZSkpOwogCiAg
ICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11
dGV4KCkpOwotICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxv
Y2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgSGVhcCogaGVhcCA9IFBlclBy
b2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCk7CisgICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAg
ICAgICByZXR1cm4gaGVhcC0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwor
ICAgIHJldHVybiBoZWFwLT50cnlBbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7
CiB9CiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxvY2F0ZSh2b2lkKiBvYmplY3QsIHNpemVfdCBu
ZXdTaXplKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM2
OTkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MywxMiArNDMsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90
KTsKICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiByZWFsbG9jYXRlKHZvaWQqLCBzaXplX3QpOwogCiAg
ICAgdm9pZCBzY2F2ZW5nZSgpOwogCiBwcml2YXRlOgorICAgIHZvaWQqIGFsbG9jYXRlSW1wbChz
aXplX3QgYWxpZ25tZW50LCBzaXplX3QsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIAogICAg
IGJvb2wgYWxsb2NhdGVGYXN0Q2FzZShzaXplX3QsIHZvaWQqJik7CiAgICAgdm9pZCogYWxsb2Nh
dGVTbG93Q2FzZShzaXplX3QpOwogICAgIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9D
YWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAkocmV2
aXNpb24gMjAzNjk5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxv
Y2F0ZShzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHN0
YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0
YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRp
YyB2b2lkIGRlYWxsb2NhdGUodm9pZCopOwogICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZv
aWQqLCBzaXplX3QpOwpAQCAtNzksNiArODAsMTQgQEAgaW5saW5lIHZvaWQqIENhY2hlOjphbGxv
Y2F0ZShzaXplX3Qgc2l6ZQogICAgIHJldHVybiBjYWNoZS0+YWxsb2NhdG9yKCkuYWxsb2NhdGUo
c2l6ZSk7CiB9CiAKK2lubGluZSB2b2lkKiBDYWNoZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hl
Pjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gYWxsb2Nh
dGVTbG93Q2FzZU51bGxDYWNoZShhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBjYWNoZS0+
YWxsb2NhdG9yKCkudHJ5QWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKK30KKwogaW5saW5lIHZv
aWQqIENhY2hlOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAg
ICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOwpJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHJldmlzaW9uIDIwMzY5OSkKKysrIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvYm1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDEyIEBA
IGlubGluZSB2b2lkKiBtYWxsb2Moc2l6ZV90IHNpemUpCiAgICAgcmV0dXJuIENhY2hlOjphbGxv
Y2F0ZShzaXplKTsKIH0KIAorLy8gUmV0dXJucyBudWxsIG9uIGZhaWx1cmUuCitpbmxpbmUgdm9p
ZCogdHJ5TWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0
dXJuIENhY2hlOjp0cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiAvLyBDcmFzaGVz
IG9uIGZhaWx1cmUuCiBpbmxpbmUgdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6
ZV90IHNpemUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284899</attachid>
            <date>2016-07-29 14:09:49 -0700</date>
            <delta_ts>2016-07-29 17:13:18 -0700</delta_ts>
            <desc>rebased patch with changelog</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>129708</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNl
IGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFrZSB0aGUgR0MgY29uY3VycmVu
dCAoYnVnIDE0OTQzMiksIHdlIHdvdWxkIGVpdGhlciBuZWVkIHRvIGVuYWJsZSBjb25jdXJyZW50
CisgICAgICAgIGNvcHlpbmcgb3Igd2Ugd291bGQgbmVlZCB0byBub3QgY29weS4gQ29uY3VycmVu
dCBjb3B5aW5nIGNhcnJpZXMgYSAxLTIlIHRocm91Z2hwdXQgb3ZlcmhlYWQKKyAgICAgICAgZnJv
bSB0aGUgYmFycmllcnMgYWxvbmUuIENvbnNpZGVyaW5nIHRoYXQgTWFya2VkU3BhY2UgZG9lcyBh
IGRlY2VudCBqb2Igb2YgYXZvaWRpbmcKKyAgICAgICAgZnJhZ21lbnRhdGlvbiwgaXQncyB1bmxp
a2VseSB0aGF0IGl0J3Mgd29ydGggcGF5aW5nIDEtMiUgdGhyb3VnaHB1dCBmb3IgY29weWluZy4g
U28sIHdlIHdhbnQKKyAgICAgICAgdG8gZ2V0IHJpZCBvZiBjb3BpZWQgc3BhY2UuIFRoaXMgY2hh
bmdlIG1vdmVzIGNvcGllZCBzcGFjZSdzIGJpZ2dlc3QgY2xpZW50IG92ZXIgdG8gbWFya2VkCisg
ICAgICAgIHNwYWNlLgorICAgICAgICAKKyAgICAgICAgTW92aW5nIGJ1dHRlcmZsaWVzIHRvIG1h
cmtlZCBzcGFjZSBtZWFucyBoYXZpbmcgdGhlbSB1c2UgdGhlIG5ldyBBdXhpbGlhcnkgSGVhcENl
bGwKKyAgICAgICAgYWxsb2NhdGlvbiBwYXRoLiBUaGlzIGlzIGEgZmFpcmx5IG1lY2hhbmljYWwg
Y2hhbmdlLiBBdCBhIGhpZ2ggbGV2ZWwgdGhpcyBkb2VzIHRoZXNlIHRoaW5nczoKKyAgICAgICAg
CisgICAgICAgIC0gV2UgdXNlIEF1eGlsaWFyeUJhcnJpZXIgaW5zdGVhZCBvZiBDb3B5QmFycmll
ci4KKyAgICAgICAgCisgICAgICAgIC0gV2UgdXNlIHRyeUFsbG9jYXRlQXV4aWxpYXJ5IGluc3Rl
YWQgb2YgdHJ5QWxsb2NhdGVTdG9yYWdlLiBJIGdvdCByaWQgb2YgdGhlIHNpbGx5CisgICAgICAg
ICAgQ2hlY2tlZEJvb2xlYW4gc3R1ZmYsIHNpbmNlIGl0J3Mgc28gbXVjaCBtb3JlIHRyb3VibGUg
dGhhbiBpdCdzIHdvcnRoLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgSklUcyBoYXZlIHRvIGVt
aXQgaW5saW5lZCBtYXJrZWQgc3BhY2UgYWxsb2NhdGlvbnMgaW5zdGVhZCBvZiBpbmxpbmUgY29w
eSBzcGFjZQorICAgICAgICAgIGFsbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgLSBFdmVy
eW9uZSBoYXMgdG8gZ2V0IHVzZWQgdG8gemVyb2luZyB0aGVpciBidXR0ZXJmbGllcyBhZnRlciBh
bGxvY2F0aW9uIGluc3RlYWQgb2YgcmVseWluZworICAgICAgICAgIG9uIHRoZW0gYmVpbmcgcHJl
LXplcm9lZCBieSB0aGUgR0MuIENvcGllZCBzcGFjZSB3b3VsZCB6ZXJvIHRoaW5ncyBmb3IgeW91
LCB3aGlsZSBtYXJrZWQKKyAgICAgICAgICBzcGFjZSBkb2Vzbid0LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIEl0IHN0aWxsIGZhaWxzIHNvbWUg
aW50ZXJuYWwgZnV6emluZyB0ZXN0cyBhbmQgSSBoYXZlbid0CisgICAgICAgIG1lYXN1cmVkIHBl
cmZvcm1hbmNlIHlldC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5l
d09iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmluaXRpYWxp
emVBcnJheUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0UmlnaHRTaGlmdFNuaXBwZXQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZUhlYXBDZWxsKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVPYmplY3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0b3JGb3JTaXplKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVKU0FycmF5KToKKyAg
ICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkNvbnNlcnZh
dGl2ZVJvb3RzOjpncm93KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAg
ICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6OnJvb3RzKToKKyAgICAgICAgKiBoZWFwL0NvcHlUb2tlbi5oOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0
b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9yYWdlQWxsb2NhdG9y
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Omlz
Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxs
b2NhdGVPYmplY3RPZlR5cGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdWJzcGFjZUZvck9iamVj
dE9mVHlwZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZSk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkRnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZmluZEdDT2JqZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNWYWx1ZUdDT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNQb2ludGVyR0NPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
OjpyZXRpcmUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlQ
b3BGcmVlTGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZUltcGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2sp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxLaW5kKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpoZWFwKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0YWtlTGFzdEFjdGl2ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6dHJ5
Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNBdG9tQWxpZ25lZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjZWxsQWxpZ24pOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tGb3IpOgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0
c1dpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9y
T2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnRyeUFsbG9jYXRl
QXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhp
bGlhcnkpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeSk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwpOgorICAgICAgICAoSlNDOjpTZXRD
dXJyZW50Q2VsbFNjb3BlOjpTZXRDdXJyZW50Q2VsbFNjb3BlKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KiBsbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0F1eGls
aWFyeUJhcnJpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OkF1
eGlsaWFyeUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkF1
eGlsaWFyeUJhcnJpZXI6OnNsb3QpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6c2V0V2l0aG91
dEJhcnJpZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQpOgorICAgICAgICAq
IHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJp
Z2h0KToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6
CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmNyZWF0
ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVu
dGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NhbGxlZS5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRp
Z3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29weUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFj
a2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
bWlzZS5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanM6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorCiAyMDE2LTA3LTI5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIEJ5VmFsSW5mbyBpcyBvbmx5IHVzZWQgaW4gSklUIGVuYWJs
ZWQgZW52aXJvbm1lbnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsOCBAQAog
CQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE0MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9OwogCQkwRjM4QjAxOTE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwICovOyB9OwogCQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYz
OEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5
MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmNwcCAqLzsgfTsKIAkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM5MkM4ODFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCAq
LzsgfTsKIAkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi87
IH07CkBAIC0yNTE4LDYgKzI1MjAsOCBAQAogCQkwRjM4QjAxNDE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25LZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
Q29tcGlsYXRpb25LZXkuaDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbktleS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAxNTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29t
cGlsYXRpb25Nb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0NvbXBpbGF0aW9uTW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8q
IERGR0NvbXBpbGF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdDb21waWxhdGlvbk1vZGUuaDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1
eGlsaWFyeUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV4aWxp
YXJ5QmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM4RDJBMTFENDQx
OTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXV4aWxpYXJ5QmFycmllcklubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRG
dXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRG
dXp6LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0RnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzkyQzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0RnV6ei5oOyBwYXRo
ID0gZGZnL0RGR09TUkV4aXRGdXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
M0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTYwNyw2ICs1NjExLDggQEAKIAkJCQlGNjkyQTg0RDAyNTU1
OTdEMDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuY3BwICovLAogCQkJCUY2OTJBODRFMDI1NTU5
N0QwMUZGNjBGNyAvKiBBcnJheVByb3RvdHlwZS5oICovLAogCQkJCTBGQjdGMzhBMTVFRDhFMzgw
MEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLywKKwkJCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0
OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovLAorCQkJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovLAogCQkJCTUyNjc4RjhDMUEwMzEwMDkw
MDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uY3BwICovLAogCQkJCTUyNjc4RjhEMUEwMzEw
MDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCAqLywKIAkJCQkxNDdCODNBQTBFNkRC
OEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCAqLywKQEAgLTU3NzIs
NyArNTc3OCw2IEBACiAJCQkJNzBEQzNFMDgxQjJERjJDNzAwMDU0Mjk5IC8qIEl0ZXJhdG9yUHJv
dG90eXBlLmggKi8sCiAJCQkJOTNBREZDRTYwQ0NCRDdBQzAwRDMwQjA4IC8qIEpTQXJyYXkuY3Bw
ICovLAogCQkJCTkzODc3MkU1MDM4QkZFMTkwMDg2MzVDRSAvKiBKU0FycmF5LmggKi8sCi0JCQkJ
NTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8sCiAJCQkJMEYy
QjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovLAogCQkJCTBGMkI2
NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi8sCiAJCQkJMEYyQjY2QjYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC01
NzgyLDYgKzU3ODcsNyBAQAogCQkJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5jcHAgKi8sCiAJCQkJMEYyQjY2QkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3LmggKi8sCiAJCQkJMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAorCQkJCTUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAv
KiBKU0FycmF5SW5saW5lcy5oICovLAogCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uY3BwICovLAogCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk2NTdDRjQ1NjE5QkY2NjYyMDA0QUNCRjIgLyogSlND
YWxsZWUuY3BwICovLApAQCAtNzI2MSw2ICs3MjY3LDcgQEAKIAkJCQkwRjMzOEUxQzFCRjI4NkVB
MDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNEY0QjZGMzFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjM4RDJBMjFENDQxOTY4MDA2ODA0OTkgLyogQXV4aWxpYXJ5
QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8q
IGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkIxQkQxN0ZBNDAw
MUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTkyRkNFNzkw
MDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzgxNSw2
ICs3ODIyLDcgQEAKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThBNDExNzkwMDhBMEZDRCAvKiBKU01h
bmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODc0MjE3Q0JFOEVC
MDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzhEMkEzMUQ0NDE5NkQw
MDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc0REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBpbiBIZWFkZXJzICov
LAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25tZW50Lmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIwNiwzNCArMTIwNiwyMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgICAgIENvcGll
ZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFi
c29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9
IHZtLmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShuZXdTaXplKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJmFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICBqaXQuZW1pdEFs
bG9jYXRlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOwor
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3
U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVhbGxvY2F0aW5nKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0aW5nIChpLmUu
IHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQogICAgICAgICAgICAgICAgICAgICAvLyBhbHJl
YWR5IGhhZCBvdXQtb2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlKS4KICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNp
emVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNo
U3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVk
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRv
ci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGhhdmUgc2NyYXRjaEdQUiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBz
dG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRT
aXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTA3LDI3ICszOTA3LDMwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1t
MzIoMyksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNp
Y1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQ
dHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2Nh
dGVWYXJpYWJsZVNpemVkKAorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCkt
PmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwK
KyAgICAgICAgICAgICAgICBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgICAgIG1f
aml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VH
UFIpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGlu
Z1R5cGUoKSk7CiAgICAgICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIEpT
VmFsdWUgbmFuID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMudGFn
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4u
dS5hc0JpdHMucGF5bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3As
ICZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBKU1ZhbHVlIGhvbGU7CisgICAgICAgICAgICBpZiAoaGFzRG91Ymxl
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICBob2xlID0gSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgaG9sZSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2pp
dC5sYWJlbCgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5h
c0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMy
KGhvbGUudS5hc0JpdHMucGF5bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9v
cCwgJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxB
cnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwg
cmVzdWx0R1BSLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODY5
LDI3ICszODY5LDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAg
ICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAg
ICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BS
KSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAorICAgICAgICAgICAg
ICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRh
KCksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBzY3JhdGNoMkdQUiwg
c2xvd0Nhc2VzKTsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChi
aXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBzY3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
NjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3Jh
dGNoMkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5s
aW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQo
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNo
MkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhs
b29wLCAmbV9qaXQpOworICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2Fs
bEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKKyAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9y
PigKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplLCByZXN1bHRHUFIsCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4
aW5nVHlwZSgpKSwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdl
KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIHNpemUgKz0gb3V0
T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICBpZiAoc2l6ZSkgewotICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9y
YWdlKFRydXN0ZWRJbW0zMihzaXplKSwgc3RvcmFnZUdQUikpOwotICAgICAgICBpZiAoaGFzSW5k
ZXhpbmdIZWFkZXIpCi0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihKU1ZhbHVlKSksIHN0b3JhZ2VHUFIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKCZtX2pp
dC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZSkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKAor
ICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFs
dWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCisgICAgICAgICAgICBzdG9yYWdlR1BSKTsK
ICAgICB9IGVsc2UKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdl
R1BSKTsKIApAQCAtMTI3LDE0ICsxMjcsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFs
bG9jYXRlUmF3T2JqZQogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1Jhd09i
amVjdCwgcmVzdWx0R1BSLCBzdG9yYWdlR1BSLAogICAgICAgICBzdHJ1Y3R1cmUsIHZlY3Rvckxl
bmd0aCkpOwogCi0gICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSAm
JiBudW1FbGVtZW50cyA8IHZlY3Rvckxlbmd0aCkgeworICAgIGlmIChudW1FbGVtZW50cyA8IHZl
Y3Rvckxlbmd0aCkgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwg
c2NyYXRjaEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciB2YWx1ZTsKLSAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CisgICAg
ICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAg
ICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2Rl
QXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUuYXNJbnQ2
NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMih2YWx1ZS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1
c3RlZEltbTMyKHZhbHVlLmFzQml0cy5wYXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSk7CkBAIC02NzI2LDE4ICs2NzMyLDI0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDEodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMyh0aGlzKTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
MyA9IHNjcmF0Y2gzLmdwcigpOwogICAgICAgICAKICAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRp
b24oKS0+cHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChpbml0aWFs
T3V0T2ZMaW5lQ2FwYWNpdHkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAg
ICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZSgKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihp
bml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7
Ci0KLSAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOworICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91
dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpOworICAgIG1faml0Lm1vdmUoCisgICAg
ICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEoc2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgbV9qaXQu
YWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKQEAgLTY3
NzIsMTYgKzY3ODQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQ
cgogICAgIFN0b3JhZ2VPcGVyYW5kIG9sZFN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwog
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAgICAKICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIG9sZFN0b3JhZ2VHUFIg
PSBvbGRTdG9yYWdlLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdw
cigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwotICAgICAgICAK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJh
c2ljU3RvcmFnZShUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1f
aml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpLCBzY3JhdGNoR1BSMSk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIG1faml0
Lm1vdmUoCisgICAgICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5o
ZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEobmV3U2l6ZSkpLAorICAgICAgICBzY3JhdGNo
R1BSMik7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0
Y2hHUFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNs
b3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsIHNjcmF0Y2hHUFIxLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3NjYsNyArMzc2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgc2l6ZSwgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25T
aXplKG1pbkNhcGFjaXR5KSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmYXN0T2JqZWN0
ID0gYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCi0gICAgICAg
ICAgICAgICAgc2l6ZSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihzaXplKSwgc3RydWN0dXJlLCBtX291dC5p
bnRQdHJaZXJvLCBzbG93UGF0aCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0
LnN0b3JlMzIobGVuZ3RoLnZhbHVlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19sZW5ndGgpOwpAQCAtNDA2Miw5ICs0MDYyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBM
VmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2Fk
U2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0
b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZh
bHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5o
ZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7
CisgICAgICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFs
bG9jYXRvciwgZmFpbENhc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0
dGVyZmx5ID0gbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAg
ICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29u
c3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBi
dXR0ZXJmbHksIGZhaWxDYXNlKTsKICAgICAgICAgICAgIApAQCAtNjkxOSwxMSArNjkyMSwxMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2Nh
dGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAg
ICAgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAg
ICAgICAgICAgICAgICAgIGFsbG9jYXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4
aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoKTsKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFs
dWUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3Jh
Z2UsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6
ZSkpOworICAgICAgICAgICAgICAgICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsg
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUz
Mih2ZWN0b3JMZW5ndGgsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVj
dG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAKQEAgLTc3MTcsMTAgKzc3MjEsMTEgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSwgTFZhbHVlIHZlY3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7
Ci0gICAgICAgIGlmICghaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8v
IFRoZSBHQyBhbHJlYWR5IGluaXRpYWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1
cy4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsK
KyAgICAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9
IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpOwogCiAgICAgICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0
byBQTmFOLgogICAgICAgICBMQmFzaWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CkBAIC03NzM1LDkgKzc3NDAsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBt
X291dC5waGkoSW50MzIsIG9yaWdpbmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9
IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAg
ICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBz
LmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAg
ICBtX291dC5zdG9yZTY0KGhvbGUsIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZh
bHVlIG5leHRJbmRleCA9IG1fb3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAg
ICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7
CkBAIC03Nzk4LDEyICs3ODAxLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3Jh
Z2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMg
KiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5
dGVzID0gc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxv
Y2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNp
emVJbkJ5dGVzKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFw
Q2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAK
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJ
bnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3Jh
Z2UpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgCkBAIC04MzczLDcgKzgzNzcsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBh
dGNocG9pbnQpOwogICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9j
YXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwo
TFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBM
QmFzaWNCbG9jayBzdWNjZXNzID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAKQEAgLTg0MDgsNyAr
ODQxMiw3IEBAIHByaXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxv
Y2F0b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0
aCk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwg
c2xvd1BhdGgpOwogICAgICAgICBzdG9yZVN0cnVjdHVyZShyZXN1bHQsIHN0cnVjdHVyZSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtODQzNiw0NiArODQ0MCw1NCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgwKSwgc3RydWN0dXJl
LCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2xhc3NUeXBlPgotICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCi0g
ICAgICAgIExWYWx1ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoTFZh
bHVlIHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewog
ICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0
IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3Bh
Y2U6OmltcHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJN
YXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogCi0g
ICAgICAgIExWYWx1ZSBzdWJzcGFjZSA9IG1fb3V0LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vi
c3BhY2VGb3JPYmplY3RPZlR5cGU8Q2xhc3NUeXBlPigpKTsKLSAgICAgICAgCiAgICAgICAgIExC
YXNpY0Jsb2NrIHNtYWxsQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJh
c2ljQmxvY2sgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogICAgICAg
ICAKLSAgICAgICAgTFZhbHVlIHVwcm91bmRlZFNpemUgPSBtX291dC5hZGQoc2l6ZSwgbV9vdXQu
Y29uc3RJbnQzMihNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgLSAxKSk7Ci0gICAgICAgIExWYWx1
ZSBpc1NtYWxsID0gbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihN
YXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOworICAgICAgICBMVmFsdWUgdXByb3VuZGVkU2l6
ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lz
ZVN0ZXAgLSAxKSk7CisgICAgICAgIExWYWx1ZSBpc1NtYWxsID0gbV9vdXQuYmVsb3codXByb3Vu
ZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoTWFya2VkU3BhY2U6OnByZWNpc2VDdXRvZmYpKTsK
ICAgICAgICAgbV9vdXQuYnJhbmNoKGlzU21hbGwsIHVuc3VyZShzbWFsbENhc2VCbG9jayksIHVu
c3VyZShsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2spKTsKICAgICAgICAgCiAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc21hbGxDYXNlQmxvY2ssIGxhcmdlT3JP
dmVyc2l6ZUNhc2VCbG9jayk7CiAgICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9vdXQu
YmFzZUluZGV4KAogICAgICAgICAgICAgbV9oZWFwcy5NYXJrZWRTcGFjZV9TdWJzcGFjZV9wcmVj
aXNlQWxsb2NhdG9ycywgc3Vic3BhY2UsCi0gICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKG1f
b3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2Vk
U3BhY2U6OnByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291dC5sU2hyKHVwcm91bmRl
ZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpwcmVjaXNlU3Rl
cCkpKSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsQWxsb2NhdG9yID0gbV9vdXQuYW5j
aG9yKGFkZHJlc3MudmFsdWUoKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
ICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9j
aywgbGFyZ2VDYXNlQmxvY2spOwogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBt
X291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpp
bXByZWNpc2VDdXRvZmYpKSwKKyAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91bmRlZFNpemUs
IG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjppbXByZWNpc2VDdXRvZmYpKSwKICAgICAg
ICAgICAgIHVzdWFsbHkobGFyZ2VDYXNlQmxvY2spLCByYXJlbHkoc2xvd1BhdGgpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlQ2FzZUJsb2NrLCBjb250aW51YXRpb24p
OwogICAgICAgICBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgbV9oZWFw
cy5NYXJrZWRTcGFjZV9TdWJzcGFjZV9pbXByZWNpc2VBbGxvY2F0b3JzLCBzdWJzcGFjZSwKLSAg
ICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5kZWRTaXplLCBtX291
dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCkpKSkpOwor
ICAgICAgICAgICAgbV9vdXQubFNocih1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKGdl
dExTQlNldChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCkpKSk7CiAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGxhcmdlQWxsb2NhdG9yID0gbV9vdXQuYW5jaG9yKGFkZHJlc3MudmFsdWUoKSk7CiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFsdWUgYWxsb2Nh
dG9yID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIHNtYWxsQWxsb2NhdG9yLCBsYXJnZUFsbG9j
YXRvcik7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCks
IHNtYWxsQWxsb2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBhbGxvY2F0b3JGb3JTaXplKE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1
ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhbGxv
Y2F0b3JGb3JTaXplKG1fb3V0LmNvbnN0SW50UHRyKCZzdWJzcGFjZSksIHNpemUsIHNsb3dQYXRo
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgorICAgIExW
YWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCisgICAgICAgIExWYWx1ZSBzaXplLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1Bh
dGgpCisgICAgeworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgK
KyAgICAgICAgICAgIHZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9mVHlwZTxDbGFzc1R5cGU+
KCksIHNpemUsIHNsb3dQYXRoKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KGFsbG9j
YXRvciwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCkBAIC04
NTYyLDI2ICs4NTc0LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIG51bUVsZW1lbnRzKTsKICAg
ICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFn
ZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVl
KSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLAotICAgICAgICAgICAg
c2xvd1BhdGgpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVh
cC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKAorICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUp
ICogdmVjdG9yTGVuZ3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIExWYWx1
ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoJmFs
bG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBidXR0ZXJmbHkg
PSBtX291dC5zdWIoCi0gICAgICAgICAgICBlbmRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRy
KHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCkpOworICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxs
b2NhdGVPYmplY3Q8SlNBcnJheT4oCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwg
c2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJh
eT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIG1f
b3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihudW1FbGVtZW50cyksIGJ1dHRlcmZseSwgbV9o
ZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291
dC5jb25zdEludDMyKHZlY3Rvckxlbmd0aCksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlf
dmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVs
ZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX291dC5z
dG9yZTY0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2Fz
dDxpbnQ2NF90PihQTmFOKSksCi0gICAgICAgICAgICAgICAgICAgIGJ1dHRlcmZseSwgbV9oZWFw
cy5pbmRleGVkRG91YmxlUHJvcGVydGllc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
KworICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KGJp
dHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhv
bGUgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaG9sZSwgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4
ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBBcnJheVZh
bHVlcyhvYmplY3QsIGJ1dHRlcmZseSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMjAzOTIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MSwxNiArNTEsMTYgQEAgQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2
ZVJvb3RzKE1hcgogQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCiB7CiAg
ICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsK
KyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFj
aXR5ICogc2l6ZW9mKEhlYXBDZWxsKikpOwogfQogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpn
cm93KCkKIHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNh
cGFjaXR5ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKLSAgICBKU0NlbGwq
KiBuZXdSb290cyA9IHN0YXRpY19jYXN0PEpTQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFu
ZENvbW1pdChuZXdDYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSkpOwotICAgIG1lbWNweShuZXdS
b290cywgbV9yb290cywgbV9zaXplICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICBIZWFwQ2VsbCoq
IG5ld1Jvb3RzID0gc3RhdGljX2Nhc3Q8SGVhcENlbGwqKj4oT1NBbGxvY2F0b3I6OnJlc2VydmVB
bmRDb21taXQobmV3Q2FwYWNpdHkgKiBzaXplb2YoSGVhcENlbGwqKSkpOworICAgIG1lbWNweShu
ZXdSb290cywgbV9yb290cywgbV9zaXplICogc2l6ZW9mKEhlYXBDZWxsKikpOwogICAgIGlmICht
X3Jvb3RzICE9IG1faW5saW5lUm9vdHMpCi0gICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFu
ZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSk7CisgICAgICAg
IE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNp
emVvZihIZWFwQ2VsbCopKTsKICAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgbV9y
b290cyA9IG5ld1Jvb3RzOwogfQpAQCAtNzIsMTMgKzcyLDE0IEBAIGlubGluZSB2b2lkIENvbnNl
cnZhdGl2ZVJvb3RzOjpnZW5lcmljQWQKIAogICAgIG1fY29waWVkU3BhY2UtPnBpbklmTmVjZXNz
YXJ5KHApOwogCi0gICAgaWYgKCFIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsICptX2Js
b2NrcywgcCkpCisgICAgcCA9IEhlYXA6OmZpbmRHQ09iamVjdFBvaW50ZXIoZmlsdGVyLCAqbV9i
bG9ja3MsIHApOworICAgIGlmICghcCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fc2l6
ZSA9PSBtX2NhcGFjaXR5KQogICAgICAgICBncm93KCk7CiAKLSAgICBtX3Jvb3RzW21fc2l6ZSsr
XSA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHApOworICAgIG1fcm9vdHNbbV9zaXplKytdID0gYml0
d2lzZV9jYXN0PEhlYXBDZWxsKj4ocCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29r
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290
cy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBKSVRT
dHViUm91dGluZVNldDsKLWNsYXNzIEpTQ2VsbDsKIAogY2xhc3MgQ29uc2VydmF0aXZlUm9vdHMg
ewogcHVibGljOgpAQCAtNDQsMTEgKzQ0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCh2b2lk
KiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYpOwog
ICAgIAogICAgIHNpemVfdCBzaXplKCk7Ci0gICAgSlNDZWxsKiogcm9vdHMoKTsKKyAgICBIZWFw
Q2VsbCoqIHJvb3RzKCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbmxp
bmVDYXBhY2l0eSA9IDEyODsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNhcGFj
aXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5v
bklubGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihIZWFwQ2VsbCopOwogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgogICAgIHZvaWQgZ2VuZXJpY0FkZFBvaW50ZXIodm9p
ZCosIFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKQEAgLTU4LDEyICs1OCwxMiBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgZ3JvdygpOwogCi0gICAgSlNDZWxsKiogbV9yb290czsKKyAg
ICBIZWFwQ2VsbCoqIG1fcm9vdHM7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBzaXplX3QgbV9j
YXBhY2l0eTsKICAgICBNYXJrZWRCbG9ja1NldCogbV9ibG9ja3M7CiAgICAgQ29waWVkU3BhY2Uq
IG1fY29waWVkU3BhY2U7Ci0gICAgSlNDZWxsKiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5
XTsKKyAgICBIZWFwQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBhY2l0eV07CiB9OwogCiBp
bmxpbmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKQEAgLTcxLDcgKzcxLDcgQEAg
aW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiAgICAgcmV0dXJuIG1fc2l6
ZTsKIH0KIAotaW5saW5lIEpTQ2VsbCoqIENvbnNlcnZhdGl2ZVJvb3RzOjpyb290cygpCitpbmxp
bmUgSGVhcENlbGwqKiBDb25zZXJ2YXRpdmVSb290czo6cm9vdHMoKQogewogICAgIHJldHVybiBt
X3Jvb3RzOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJl
dmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDYgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgQnV0dGVyZmx5Q29weVRva2VuLAogICAgIFR5cGVk
QXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0b3JlQ29weVRva2VuLAogICAg
IERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTIgKzU5OCw2IEBAIHZvaWQg
SGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBDb3B5V29ya0xpc3QmIHdvcmtMaXN0ID0gYmxvY2stPndvcmtM
aXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENvcHlXb3JrbGlzdEl0ZW0gaXRl
bSA6IHdvcmtMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udG9r
ZW4oKSA9PSBCdXR0ZXJmbHlDb3B5VG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3IsIEJ1dHRlcmZseUNvcHlUb2tl
bik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKS0+bWV0aG9kVGFibGUoKS0+Y29weUJh
Y2tpbmdTdG9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCks
IGNvcHlWaXNpdG9yLCBpdGVtLnRva2VuKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBE
Rkc6OlNwZWN1bGF0aXZlSklUOwogICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFsdWUp
OyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCi0gICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3Qg
SlNDZWxsKik7CisgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSGVhcENlbGwqKTsKIAogICAg
IC8vIFRoaXMgY29uc3RhbnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mgd2UgaXRlcmF0ZSBi
ZXR3ZWVuIGNoZWNrcyBvZiBvdXIgCiAgICAgLy8gZGVhZGxpbmUgd2hlbiBjYWxsaW5nIEhlYXA6
OmlzUGFnZWRPdXQuIERlY3JlYXNpbmcgaXQgd2lsbCBjYXVzZSB1cyB0byBkZXRlY3QgCkBAIC0x
MDQsNyArMTA0LDggQEAgcHVibGljOgogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJ1
biBhZnRlciBzdG9wQWxsb2NhdGlvbigpIGlzIGNhbGxlZCBhbmQgCiAgICAgLy8gYmVmb3JlIGxp
dmVuZXNzIGRhdGEgaXMgY2xlYXJlZCB0byBiZSBhY2N1cmF0ZS4KLSAgICBzdGF0aWMgYm9vbCBp
c1BvaW50ZXJHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIsIE1hcmtlZEJsb2NrU2V0Jiwgdm9pZCog
cG9pbnRlcik7CisgICAgc3RhdGljIHZvaWQqIGZpbmRHQ09iamVjdFBvaW50ZXIoVGlueUJsb29t
RmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIHZvaWQqIHBvaW50ZXIpOworICAgIHN0YXRpYyBib29s
IGlzUG9pbnRlckdDT2JqZWN0SlNDZWxsKFRpbnlCbG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQm
LCBjb25zdCB2b2lkKiBwb2ludGVyKTsKICAgICBzdGF0aWMgYm9vbCBpc1ZhbHVlR0NPYmplY3Qo
VGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIEpTVmFsdWUpOwogCiAgICAgdm9pZCB3
cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7CkBAIC0xNTAsNyArMTUxLDExIEBAIHB1YmxpYzoK
ICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9y
KHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0ZXMp
OyB9CiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rv
cihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFsbG9jYXRv
ckZvcihieXRlcyk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IE1hcmtlZEFs
bG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcyk7CisgICAgTWFy
a2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRlcykgeyBy
ZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAg
Q29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdlU3Bh
Y2UuYWxsb2NhdG9yKCk7IH0KKyAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGlu
dGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlND
ZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVBdXhp
bGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6
ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU3RvcmFn
ZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9v
bGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiwg
c2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRP
d25lciwgdm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBib29sIEhl
YXA6OmlzQ29sbGVjdGluZygpCiAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBG
dWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb247
CiB9CiAKLWlubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKK2lubGlu
ZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIHJldHVybiBN
YXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKIH0KQEAgLTE5OSw3ICsxOTksNyBA
QCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIENsYXNzVHlwZT4KLXZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNp
emVfdCBieXRlcykKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXpl
X3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMg
YWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVj
dGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8
IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3Rk
Ojppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUp
KTsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShz
aXplX3QgCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLU1hcmtlZFNwYWNlOjpT
dWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQoraW5saW5lIE1hcmtlZFNw
YWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQogewogICAgIC8v
IEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1h
bCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFT
U0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1
cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xh
c3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMjEsNyArMjIxLDcg
QEAgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvcgogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci1NYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZv
ck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBIZWFw
OjphbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogewogICAgIC8vIEpTQ2Vs
bDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0
cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VSVCgo
IUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFn
cyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBl
LCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMzEsNiArMjMxLDM3IEBAIE1h
cmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWMKICAgICByZXR1cm4gYWxsb2Nh
dG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCog
SGVhcDo6YWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0
ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZUF1eGlsaWFy
eShieXRlcyk7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigi
SlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwg
Ynl0ZXMsIGludGVuZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShp
bnRlbmRlZE93bmVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2
b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNp
emVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNwYWNlLnRyeUFsbG9j
YXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAg
IGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAl
cDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworaW5saW5lIHZvaWQqIEhlYXA6OnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
Cit7CisgICAgdm9pZCogbmV3QmFzZSA9IHRyeUFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3du
ZXIsIG5ld1NpemUpOworICAgIGlmICghbmV3QmFzZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2UsIG9sZFNpemUpOworICAgIHJldHVybiBuZXdC
YXNlOworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewog
ICAgIENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5
dGVzLCBvdXRQdHIpOwpAQCAtMzU0LDIwICszODUsNDYgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGlk
RnJlZUJsb2NrKHNpemVfdCBjYQogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIEhlYXA6OmlzUG9p
bnRlckdDT2JqZWN0KFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJr
ZWRCbG9ja1NldCwgdm9pZCogcG9pbnRlcikKK2lubGluZSB2b2lkKiBIZWFwOjpmaW5kR0NPYmpl
Y3RQb2ludGVyKFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRC
bG9ja1NldCwgdm9pZCogcG9pbnRlcikKIHsKICAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0g
TWFya2VkQmxvY2s6OmJsb2NrRm9yKHBvaW50ZXIpOwogICAgIGlmIChmaWx0ZXIucnVsZU91dChi
aXR3aXNlX2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRh
dGUgfHwgIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KKyAgICAKKyAg
ICBpZiAoIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKGNhbmRpZGF0ZS0+Y2VsbEtpbmQoKSA9PSBIZWFw
Q2VsbDo6SlNDZWxsKSB7CisgICAgICAgIGlmICghTWFya2VkQmxvY2s6OmlzQXRvbUFsaWduZWQo
cG9pbnRlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgcG9pbnRlciA9IGNhbmRpZGF0ZS0+Y2VsbEFsaWduKHBvaW50ZXIpOworCisgICAgaWYgKCFj
YW5kaWRhdGUtPmlzTGl2ZUNlbGwocG9pbnRlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIHBvaW50ZXI7Cit9CiAKK2lubGluZSBib29sIEhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0SlNDZWxsKFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJr
ZWRCbG9ja1NldCwgY29uc3Qgdm9pZCogcG9pbnRlcikKK3sKKyAgICBNYXJrZWRCbG9jayogY2Fu
ZGlkYXRlID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKHBvaW50ZXIpOworICAgIGlmIChmaWx0ZXIu
cnVsZU91dChiaXR3aXNlX2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKKyAgICAgICAgQVNTRVJU
KCFjYW5kaWRhdGUgfHwgIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAogICAgIGlmICghTWFya2VkQmxv
Y2s6OmlzQXRvbUFsaWduZWQocG9pbnRlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNhbmRpZGF0ZS0+Y2VsbEtpbmQoKSAhPSBIZWFwQ2Vs
bDo6SlNDZWxsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWNhbmRpZGF0ZS0+
aXNMaXZlQ2VsbChwb2ludGVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNzgsNyAr
NDM1LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6aXNWYWx1ZUdDT2JqZWN0KFRpbnlCbAogewogICAg
IGlmICghdmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
aXNQb2ludGVyR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9p
ZCo+KHZhbHVlLmFzQ2VsbCgpKSk7CisgICAgcmV0dXJuIGlzUG9pbnRlckdDT2JqZWN0SlNDZWxs
KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIHN0YXRpY19jYXN0PHZvaWQqPih2YWx1ZS5hc0NlbGwo
KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmV0aXJlKE1hcmtlZEJs
b2NrCiAgICAgYmxvY2stPmRpZFJldGlyZUJsb2NrKGZyZWVMaXN0KTsKIH0KIAotaW5saW5lIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90IGJ5dGVzKQoraW5s
aW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0lt
cGwoc2l6ZV90IGJ5dGVzKQogewogICAgIGlmIChtX2N1cnJlbnRCbG9jaykgewogICAgICAgICBB
U1NFUlQobV9jdXJyZW50QmxvY2sgPT0gbV9uZXh0QmxvY2tUb1N3ZWVwKTsKQEAgLTEyMCwxMSAr
MTIwLDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeVBvcEZyZWUKICAgICBy
ZXR1cm4gaGVhZDsKIH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGUoc2l6ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZyhzaXplX3QgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKCFtX2hlYXAt
PmlzQnVzeSgpKTsKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEFsbG9jYXRp
b247Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVIZWxwZXIoYnl0ZXMpOworICAgIHZv
aWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJbXBsKGJ5dGVzKTsKIAog
ICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247CiAgICAgQVNT
RVJUKHJlc3VsdCB8fCAhbV9jdXJyZW50QmxvY2spOwpAQCAtMTQ4LDYgKzE0OCwxOCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAKIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCiB7CisgICAgYm9vbCBjcmFzaE9u
RmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVzLCBj
cmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVT
bG93Q2FzZShzaXplX3QgYnl0ZXMpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNl
OworICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChieXRlcywgY3Jhc2hPbkZhaWx1cmUp
OworfQorCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBsKHNpemVf
dCBieXRlcywgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBBU1NFUlQobV9oZWFwLT52bSgp
LT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBkb1Rlc3RDb2xsZWN0aW9u
c0lmTmVlZGVkKCk7CiAKQEAgLTE1NSwyOSArMTY3LDM0IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6YWxsb2NhdGVTbG93Q2FzZSgKICAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAg
bV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0LmJ5dGVzKTsKICAgICAKLSAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgCiAgICAgaWYgKExJS0VMWShyZXN1bHQg
IT0gMCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCiAgICAgaWYgKG1faGVhcC0+Y29s
bGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRl
KGJ5dGVzKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhi
eXRlcyk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIEFTU0VSVCghbV9oZWFwLT5zaG91bGRDb2xsZWN0KCkpOwogICAgIAotICAg
IE1hcmtlZEJsb2NrKiBibG9jayA9IGFsbG9jYXRlQmxvY2soYnl0ZXMpOwotICAgIEFTU0VSVChi
bG9jayk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9jayhieXRlcyk7
CisgICAgaWYgKCFibG9jaykgeworICAgICAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAgICAgYWRkQmxvY2soYmxvY2spOwogICAgICAg
ICAKLSAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgcmVzdWx0ID0gdHJ5QWxs
b2NhdGVXaXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGVCbG9jayhzaXplX3QgYnl0ZXMpCitNYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZUJsb2NrKHNpemVfdCBieXRlcykKIHsKICAgICBzaXplX3QgbWluQmxvY2tTaXplID0g
TWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKICAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplb2YoTWFy
a2VkQmxvY2spKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNp
emU+KGJ5dGVzKTsKQEAgLTE4Niw3ICsyMDMsNyBAQCBNYXJrZWRCbG9jayogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZUJsCiAKICAgICBzaXplX3QgY2VsbFNpemUgPSBtX2NlbGxTaXplID8gbV9j
ZWxsU2l6ZSA6IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+
KGJ5dGVzKTsKIAotICAgIHJldHVybiBNYXJrZWRCbG9jazo6Y3JlYXRlKCptX2hlYXAsIHRoaXMs
IGJsb2NrU2l6ZSwgY2VsbFNpemUsIG1fYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIE1hcmtlZEJs
b2NrOjp0cnlDcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxsU2l6ZSwgbV9hdHRy
aWJ1dGVzKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsb2Nr
KiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6
CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
aWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KICAgICB2b2lkKiBhbGxvY2F0ZShz
aXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgSGVhcCogaGVhcCgp
IHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE1hcmtlZEJsb2NrKiB0YWtlTGFzdEFjdGl2ZUJsb2Nr
KCkKICAgICB7CkBAIC03MSwxMCArNzIsMTIgQEAgcHVibGljOgogICAgCiBwcml2YXRlOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKLSAgICB2
b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlSGVscGVyKHNp
emVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZShz
aXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKHNpemVfdCwgYm9vbCBjcmFz
aE9uRmFpbHVyZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhzaXpl
X3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJbXBsKHNpemVfdCk7
CiAgICAgdm9pZCogdHJ5UG9wRnJlZUxpc3Qoc2l6ZV90KTsKLSAgICBNYXJrZWRCbG9jayogYWxs
b2NhdGVCbG9jayhzaXplX3QpOworICAgIE1hcmtlZEJsb2NrKiB0cnlBbGxvY2F0ZUJsb2NrKHNp
emVfdCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQo
KTsKICAgICB2b2lkIHJldGlyZShNYXJrZWRCbG9jayosIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCYp
OwogICAgIApAQCAtMTEzLDIxICsxMTYsMzUgQEAgaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9y
Ojppbml0KEhlYXAqIAogICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiB9CiAKK2lubGlu
ZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcykKK3sKKyAg
ICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CisgICAgaWYg
KFVOTElLRUxZKCFoZWFkKSkgeworICAgICAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNs
b3dDYXNlKGJ5dGVzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiAhQVNTRVJUX0RJU0FCTEVEKQor
ICAgICAgICAgICAgbWVtc2V0KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0Owor
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0
ZXMpOworICAgIHJldHVybiBoZWFkOworfQorCiBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBo
ZWFkID0gbV9mcmVlTGlzdC5oZWFkOwogICAgIGlmIChVTkxJS0VMWSghaGVhZCkpIHsKICAgICAg
ICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdGVTbG93Q2FzZShieXRlcyk7Ci0jaWZuZGVmIE5ERUJV
RwotICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBi
eXRlcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIG1fZnJlZUxp
c3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1lbXNldChoZWFkLCAw
eENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAg
bWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKICAgICByZXR1cm4gaGVhZDsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjAz
OTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgY29u
c3QgYm9vbCBjb21wdXRlQmFsYW5jZSA9IGZhbHNlOwogc3RhdGljIHNpemVfdCBiYWxhbmNlOwog
Ci1NYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwJiBoZWFwLCBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0
IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCitNYXJrZWRCbG9jayogTWFya2VkQmxv
Y2s6OnRyeUNyZWF0ZShIZWFwJiBoZWFwLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6
ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMm
IGF0dHJpYnV0ZXMpCiB7CiAgICAgaWYgKGNvbXB1dGVCYWxhbmNlKSB7CiAgICAgICAgIGJhbGFu
Y2UrKzsKICAgICAgICAgaWYgKCEoYmFsYW5jZSAlIDEwKSkKICAgICAgICAgICAgIGRhdGFMb2co
Ik1hcmtlZEJsb2NrIEJhbGFuY2U6ICIsIGJhbGFuY2UsICJcbiIpOwogICAgIH0KLSAgICBNYXJr
ZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGZhc3RBbGlnbmVkTWFsbG9jKGJsb2NrU2l6
ZSwgY2FwYWNpdHkpKSBNYXJrZWRCbG9jayhhbGxvY2F0b3IsIGNhcGFjaXR5LCBjZWxsU2l6ZSwg
YXR0cmlidXRlcyk7CisgICAgdm9pZCogYmxvY2tTcGFjZSA9IHRyeUZhc3RBbGlnbmVkTWFsbG9j
KGJsb2NrU2l6ZSwgY2FwYWNpdHkpOworICAgIGlmICghYmxvY2tTcGFjZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBibG9j
a1NwYWNlKSBNYXJrZWRCbG9jayhhbGxvY2F0b3IsIGNhcGFjaXR5LCBjZWxsU2l6ZSwgYXR0cmli
dXRlcyk7CiAgICAgaGVhcC5kaWRBbGxvY2F0ZUJsb2NrKGNhcGFjaXR5KTsKICAgICByZXR1cm4g
YmxvY2s7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJ
KHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMCArMTA5LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgbXV0YWJsZSBSZXR1cm5UeXBlIG1fY291bnQ7CiAgICAgICAgIH07CiAK
LSAgICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiBjcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRv
ciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJik7CisgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogdHJ5Q3JlYXRlKEhlYXAmLCBN
YXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3Qg
QWxsb2NhdG9yQXR0cmlidXRlcyYpOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEhlYXAm
LCBNYXJrZWRCbG9jayopOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzQXRvbUFsaWduZWQoY29u
c3Qgdm9pZCopOworICAgICAgICB2b2lkKiBjZWxsQWxpZ24odm9pZCopOwogICAgICAgICBzdGF0
aWMgTWFya2VkQmxvY2sqIGJsb2NrRm9yKGNvbnN0IHZvaWQqKTsKICAgICAgICAgc3RhdGljIHNp
emVfdCBmaXJzdEF0b20oKTsKICAgICAgICAgCkBAIC0yMzYsNiArMjM3LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICByZXR1cm4gIShyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYXRv
bUFsaWdubWVudE1hc2spOwogICAgIH0KIAorICAgIGlubGluZSB2b2lkKiBNYXJrZWRCbG9jazo6
Y2VsbEFsaWduKHZvaWQqIHApCisgICAgeworICAgICAgICBCaXRzIGJpdHMgPSByZWludGVycHJl
dF9jYXN0PEJpdHM+KHApOworICAgICAgICBiaXRzIC09IGJpdHMgJSBjZWxsU2l6ZSgpOworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYml0cyk7CisgICAgfQorCiAgICAg
aW5saW5lIE1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY29uc3Qgdm9pZCogcCkK
ICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE1hcmtlZEJsb2NrKj4ocmVp
bnRlcnByZXRfY2FzdDxCaXRzPihwKSAmIGJsb2NrTWFzayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYg
KzY4LDcgQEAgcHVibGljOgogICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90
KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9p
ZCogYWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGls
aWFyeShzaXplX3QpOwogCiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhEZXN0
cnVjdG9yKCkgeyByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2U7IH0KICAgICBTdWJzcGFjZSYgc3Vi
c3BhY2VGb3JPYmplY3RzV2l0aG91dERlc3RydWN0b3IoKSB7IHJldHVybiBtX25vcm1hbFNwYWNl
OyB9CkBAIC0xODIsNiArMTgzLDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2Nh
dGVBdXhpbGkKICAgICByZXR1cm4gYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0
ZShieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXhp
bGlhcnkoc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3Io
Ynl0ZXMpLnRyeUFsbG9jYXRlKGJ5dGVzKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+IGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKIHsKICAgICBmb3JFYWNoU3Vic3BhY2UoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTE4LDEwICsxMTgsNDIgQEAgdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2so
KQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZh
dGl2ZVJvb3RzKQogewotICAgIEpTQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9v
dHMoKTsKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsK
ICAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgYXBwZW5kKHJvb3RzW2ldKTsKKyAg
ICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0pOworfQorCit2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2VsbCogaGVhcENlbGwpCit7Cisg
ICAgaWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVCghbV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24pOworICAgIAorICAgIGlmIChIZWFwOjp0
ZXN0QW5kU2V0TWFya2VkKGhlYXBDZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE1h
cmtlZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihoZWFwQ2VsbCk7CisgICAg
c3dpdGNoIChibG9jay0+Y2VsbEtpbmQoKSkgeworICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbDog
eworICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxs
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghanNDZWxsLT5zdHJ1Y3R1cmUoKSkgeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3
R3JleSk7CisKKyAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soYmxvY2ssIGpzQ2VsbCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgSGVhcENlbGw6OkF1eGlsaWFy
eTogeworICAgICAgICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoYmxvY2spOworICAgICAgICByZXR1
cm47CisgICAgfSB9CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlIHZhbHVl
KQpAQCAtMTY4LDE3ICsyMDAsMzYgQEAgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBw
ZW5kVG9NYQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNl
bGwpCiB7CisgICAgYXBwZW5kVG9NYXJrU3RhY2soTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwp
LCBjZWxsKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soTWFya2Vk
QmxvY2sqIGJsb2NrLCBKU0NlbGwqIGNlbGwpCit7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2Vk
KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogCiAgICAgbV92aXNpdENv
dW50Kys7Ci0gICAgbV9ieXRlc1Zpc2l0ZWQgKz0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwp
LT5jZWxsU2l6ZSgpOworICAgIG1fYnl0ZXNWaXNpdGVkICs9IGJsb2NrLT5jZWxsU2l6ZSgpOwog
ICAgIG1fc3RhY2suYXBwZW5kKGNlbGwpOwogCiAgICAgaWYgKFVOTElLRUxZKG1faGVhcFNuYXBz
aG90QnVpbGRlcikpCiAgICAgICAgIG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBwZW5kTm9kZShj
ZWxsKTsKIH0KIAordm9pZCBTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBi
YXNlKQoreworICAgIGlmIChIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGJhc2UpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihiYXNlKSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6Om5vdGVMaXZlQXV4aWxpYXJ5Q2Vs
bChNYXJrZWRCbG9jayogYmxvY2spCit7CisgICAgbV92aXNpdENvdW50Kys7CisgICAgbV9ieXRl
c1Zpc2l0ZWQgKz0gYmxvY2stPmNlbGxTaXplKCk7Cit9CisKIGNsYXNzIFNldEN1cnJlbnRDZWxs
U2NvcGUgewogcHVibGljOgogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IEpTQ2VsbCogY2VsbCkKQEAgLTIwNCw3ICsyNTUsNyBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpCiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2Vk
KGNlbGwpKTsKIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhp
cywgY2VsbCk7Ci0KKyAgICAKICAgICBtX2N1cnJlbnRPYmplY3RDZWxsU3RhdGVCZWZvcmVWaXNp
dGluZyA9IGNlbGwtPmNlbGxTdGF0ZSgpOwogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3Rh
dGU6Ok9sZEJsYWNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcs
OCArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNs
YXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKIGNsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKIGNs
YXNzIEhlYXBTbmFwc2hvdEJ1aWxkZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBKSVRX
cml0ZUJhcnJpZXI7CitjbGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwogY2xhc3MgV2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcjsKQEAgLTEwNSw2ICsxMDcsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZp
bmFsaXplcnMoKTsKKyAgICAKKyAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGls
aWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0
IGRvCisgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBH
Qy4KKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7CiAKICAgICB2b2lk
IGNvcHlMYXRlcihKU0NlbGwqLCBDb3B5VG9rZW4sIHZvaWQqLCBzaXplX3QpOwogICAgIApAQCAt
MTI0LDEwICsxMzAsMTMgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2Rl
RW5hYmxlcjsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChKU1ZhbHVl
KTsgLy8gVGhpcyBpcyBwcml2YXRlIHRvIGVuY291cmFnZSBjbGllbnRzIHRvIHVzZSBXcml0ZUJh
cnJpZXI8VD4uCisgICAgdm9pZCBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2VsbCopOwog
ICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpTVmFsdWUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKICAgICB2b2lkIGFw
cGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soTWFy
a2VkQmxvY2sqLCBKU0NlbGwqKTsKKyAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChNYXJr
ZWRCbG9jayopOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVS
b290cygpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDExICsyOSw5IEBACiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MSw0ICs5MSwzIEBAIGludCBtYWluKGludCwgY2hhcioqKQog
ICAgIHJldHVybiAwOwogfQogCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TW9kdWxlQW5hbHl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw5
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTW9kdWxlQW5hbHl6ZXIu
aCIKIAotI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVS
ZWNvcmQuaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKKworLy8gQW4gQXV4
aWxpYXJ5IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBub3QgdHJ5IHRvIHJlYXNvbiBh
Ym91dCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0LCBvdGhlciB0aGFuIGludGVy
cHJldGluZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBiYXJyaWVyLiBJdCdzIE9LIHRv
IHVzZSB0aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55IG90aGVyIGtpbmQgb2YgZGF0
YSwgc28gbG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEoKS4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1YmxpYzoKKyAgICBBdXhpbGlhcnlC
YXJyaWVyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBBdXhpbGlh
cnlCYXJyaWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBt
X3ZhbHVlID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lk
IHNldChWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29uc3QgVCYgZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3QoKSB7IHJldHVybiAmbV92YWx1
ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0
V2l0aG91dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpOyB9CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlC
YXJyaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJIZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQXV4aWxpYXJ5QmFycmllcjxU
Pjo6QXV4aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2YWx1ZSkKK3sK
KyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7
CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eUlubGluZXMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMCArMzcsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmlu
aXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7Ci0gICAgdm9pZCogdGVtcDsKICAgICBz
aXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBSRUxFQVNF
X0FTU0VSVCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCBzaXplLCAm
dGVtcCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHZvaWQqIGJhc2UgPSB2bS5oZWFwLmFsbG9jYXRl
QXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIHNpemUpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTExOSw3ICsxMTgsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlD
YXBhY2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
ICAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVl
LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeVJl
YWxsb2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIsICZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXpl
KSkKKyAgICB0aGVCYXNlID0gdm0uaGVhcC50cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVk
T3duZXIsIHRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpOworICAgIGlmICghdGhlQmFzZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5
Q2FwYWNpdHkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbG9uZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxMiArNDgsMTUgQEAgQ2xvbmVkQXJndW1lbnRzKiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZQog
ICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHZvaWQqIHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCAmdGVtcCkpCisgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnko
bnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cisg
ICAgaWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4gMDsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwog
ICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAKICAgICBDbG9uZWRBcmd1bWVudHMqIHJl
c3VsdCA9CiAgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPENsb25lZEFyZ3VtZW50
cz4odm0uaGVhcCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAodGhldGFsZWNyYWZ0
ZXJAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcg
KHN1a29sc2FrQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDggKzM0LDcgQEAKICNpbmNsdWRlICJJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgi
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRl
VGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDgg
KzM0LDcgQEAKICNpbmNsdWRlICJJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKLSNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICsz
NCw4IEBACiAjaW5jbHVkZSAiSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgotI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgotI2luY2x1
ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw3IEBAIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2Fw
YWNpdHkgPSBzdHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIHVuc2lnbmVk
IHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSh2bSktPm91dE9mTGluZVNpemUoKTsKLQorICAgIAog
ICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBh
dGguCiAgICAgQVNTRVJUKCFhZGRUb0Zyb250IHx8IGNvdW50ID4gc3RvcmFnZS0+bV9pbmRleEJp
YXMpOwogCkBAIC0yNTQsNyArMjU0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZShWTSYgdgogICAgIC8vICAqIGRlc2lyZWRDYXBhY2l0eSAtIGhvdyBsYXJnZSBzaG91bGQg
d2UgbGlrZSB0byBncm93IHRoZSB2ZWN0b3IgdG8gLSBiYXNlZCBvbiAyeCByZXF1aXJlZFZlY3Rv
ckxlbmd0aC4KIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwotICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCks
IGxlbmd0aCk7CisgICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihvbGRWZWN0b3JM
ZW5ndGgsIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVu
Z3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNv
dW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0y
NzksNyArMjgwLDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgog
ICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBjdXJyZW50Q2FwYWNpdHk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBwcm9w
ZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFjaXR5
KSk7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgbmV3U2l6
ZSwgJm5ld0FsbG9jQmFzZSkpCisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmhlYXAudHJ5QWxs
b2NhdGVBdXhpbGlhcnkodGhpcywgbmV3U2l6ZSk7CisgICAgICAgIGlmICghbmV3QWxsb2NCYXNl
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkg
PSBkZXNpcmVkQ2FwYWNpdHk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTkxLDggKzE5MSw4IEBAIGlubGluZSBCdXR0
ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KFYKICAgICAgICAgdm0sIGludGVuZGVkT3duZXIs
IDAsIDAsIHRydWUsIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgpLAog
ICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IoQkFTRV9WRUNUT1JfTEVOKSk7CiAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICBzdG9y
YWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsK
KyAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciA9IDA7CiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KQEAgLTIxNSwxMiArMjE1LDE3
IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCAKICAgICAgICAgaWYg
KGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKAogICAgICAgICAgICAgc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCiAg
ICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5
U3RvcmFnZSk7CiAgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KHZtLCAw
LCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJBU0Vf
VkVDVE9SX0xFTjsgKytpKQorICAgICAgICAgICAgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRl
cmZseSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwpAQCAtMjM1LDMzICsyNDAsMzkgQEAgaW5s
aW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdAogICAgIHVuc2lnbmVkIG91dE9m
TGluZVN0b3JhZ2UgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAKICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseTsKLSAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKSB7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgaWYgKExJS0VMWSghaGFzQW55QXJy
YXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpKSB7CiAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAg
IGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwg
aGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgIHx8IGhhc0Rv
dWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzQ29udGln
dW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0KLSAgICAgICAgdm9pZCogdGVtcDsK
LSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzSW50MzIo
aW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSkKKyAg
ICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CisKKyAgICAgICAgdm9p
ZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICBpZiAoIXRlbXApCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0
ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
aW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkpIHsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3Ro
OyArK2kpCiAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0g
PSBQTmFOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUs
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQotICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4
aWxpYXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2Us
IHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSk7CisgICAgICAgIGlm
ICghdGVtcCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwogICAgICAg
ICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShp
bml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4
QmlhcyA9IDA7CiAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAogICAgIHJl
dHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTMgKzI3LDkgQEAKICNpbmNsdWRlICJKU0Nh
bGxlZS5oIgogCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9y
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsMjUgKzUxMCwxNSBAQCBBcnJheUJ1ZmZlciogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRo
aW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKICAgICAv
LyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFw
cHJvcHJpYXRlbHkuCiAgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7Cisg
ICAgVk0mIHZtID0gKmhlYXAtPnZtKCk7CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpo
ZWFwKTsKICAgICAKICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkp
OwogCi0gICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwotICAgIAotICAg
IGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKLSAgICAgICAgJiYgIXRo
aXNPYmplY3QtPmJ1dHRlcmZseSgpICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkg
ewotICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwotICAgICAgICAvLyBSZXVz
ZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgotICAgICAgICB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcigKLSAgICAgICAgICAgIGJp
dHdpc2VfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPnZlY3RvcigpKS0+YnV0dGVy
Zmx5KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0
LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKLSAgICAgICAgVk0mIHZtID0gKmhlYXAtPnZtKCk7Ci0g
ICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwgdGhpc09iamVjdCwgQnV0dGVy
Zmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAotICAgICAgICAgICAgdGhpc09iamVjdC0+YnV0
dGVyZmx5KCksIHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKLSAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxz
ZSwgMCwgMCkpOwotICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aGFzSW5k
ZXhpbmdIZWFkZXIoKSk7CisgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlz
T2JqZWN0LCBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgIHRoaXNP
YmplY3QtPmJ1dHRlcmZseSgpLCB2bSwgdGhpc09iamVjdCwgdGhpc09iamVjdC0+c3RydWN0dXJl
KCksCisgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBmYWxzZSwgMCwgMCkpOwogCiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTIgKzI2LDkgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5s
aW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxNCArMjcsMTAgQEAK
ICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgogCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKLSNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1
bGVSZWNvcmQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4
LDE0ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxl
LmgiCi0jaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50
LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKLSNpbmNsdWRlICJTbG90
VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDc3ICs4OCw2IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKU09iamVjdDo6Y29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYgdmlzaXRvciwgQnV0
dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKLXsKLSAgICBBU1NFUlQoYnV0
dGVyZmx5KTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVy
ZSgpOwotICAgIAotICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOwotICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKLSAgICBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7Ci0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IHRo
aXMtPmhhc0luZGV4aW5nSGVhZGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVh
ZGVyKSkgewotICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKLSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKHN0cnVjdHVyZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSAw
OwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotICAgIHNp
emVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShidXR0ZXJmbHktPmJh
c2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpKSkgewotICAgICAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxl
Y3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5n
SGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0KLSAgICAgICAgLy8gQ29weSB0
aGUgcHJvcGVydGllcy4KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBu
ZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ug
Y3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KQotICAgICAgICAgICAgKC0t
Y3VycmVudFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKC0tY3VycmVudFNvdXJjZSkt
PmdldCgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRl
cikpIHsKLSAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBD
b3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0OwotICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlOwotICAgICAgICAgICAgc2l6ZV90IGNvdW50
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAg
Y2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9ET1VC
TEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3
QnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRT
b3VyY2UgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBuZXdCdXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7
Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBjb3VudCA9IG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gMDsKLSAgICAgICAgICAg
ICAgICBjdXJyZW50U291cmNlID0gMDsKLSAgICAgICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1lbWNweShj
dXJyZW50VGFyZ2V0LCBjdXJyZW50U291cmNlLCBjb3VudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0
QmFycmllcihuZXdCdXR0ZXJmbHkpOwotICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVyZmx5
LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsK
LSAgICB9IAotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKGJ1dHRlcmZseSk7CkBAIC0xNzUsMTMgKzEwNCwxNiBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgIHByZUNh
cGFjaXR5ID0gMDsKICAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwogICAg
IH0KLSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7CisgICAgCisgICAgSGVhcENlbGwqIGJhc2UgPSBiaXR3aXNlX2Nh
c3Q8SGVhcENlbGwqPihidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHkpKTsKKworICAgIEFTU0VSVChIZWFwOjpoZWFwKGJhc2UpID09IHZpc2l0b3IuaGVhcCgpKTsK
IAorICAgIC8vIEtlZXAgdGhlIGJ1dHRlcmZseSBhbGl2ZS4KKyAgICB2aXNpdG9yLm1hcmtBdXhp
bGlhcnkoYmFzZSk7CisgICAgCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KICAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3Rv
cmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICB2aXNpdG9yLmNvcHlMYXRlcigKLSAgICAgICAg
dGhpcywgQnV0dGVyZmx5Q29weVRva2VuLAotICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwogICAgIAogICAgIC8v
IE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgIHN3aXRjaCAodGhpcy0+aW5kZXhp
bmdUeXBlKCkpIHsKQEAgLTIyNSwxOSArMTU3LDYgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbAogI2VuZGlmCiB9CiAKLXZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5n
U3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2Vu
KQotewotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotCi0g
ICAgaWYgKHRva2VuICE9IEJ1dHRlcmZseUNvcHlUb2tlbikKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0
KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+Y29weUJ1dHRlcmZs
eSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVT
aXplKCkpOwotfQotCiB2b2lkIEpTT2JqZWN0OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxsLCBI
ZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC04MDcsNiArNzI2LDggQEAgQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRl
eGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAg
ICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb246OkFsbG9jYXRlSW50MzIpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNv
bnRpZ3VvdXNJbnQzMigpOwpAQCAtODI3LDYgKzc0OCw4IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y3JlYXRlSW5pdGkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uo
dm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgbmV3QnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVD
b250aWd1b3VzKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVy
ZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7
CkBAIC04NDksNiArNzcyLDggQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlT
dG9yYQogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICByZXN1bHQtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAwOworICAgIGZv
ciAoc2l6ZV90IGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHJlc3VsdC0+bV92ZWN0
b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkp
OwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NjIsNiArNzg3LDExIEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6
Y29udmVydFVuZGVjaWRlZFRvSW50MzIoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lk
ZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIpKTsKICAgICByZXR1cm4gbV9idXR0ZXJmbHku
Z2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQpAQCAtODgxLDYgKzgxMSwxMSBAQCBDb250aWd1
b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVuZGVjCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VS
VChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOworCiAgICAgc2V0U3RydWN0dXJl
KHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAgICByZXR1cm4g
bV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsKIH0KQEAgLTkxNyw3ICs4NTIsOSBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAKICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91
dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBObyBuZWVkIHRvIGNv
cHkgZWxlbWVudHMuCisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBp
LS07KQorICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7
CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpKTsKQEAgLTkzOCwxMSArODc1LDEyIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpT
T2JqZWN0Ojpjb252ZXJ0SW50MzIKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJy
ZW50ID0gJmJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV07CiAgICAgICAgIGRvdWJsZSog
Y3VycmVudEFzRG91YmxlID0gYml0d2lzZV9jYXN0PGRvdWJsZSo+KGN1cnJlbnQpOwogICAgICAg
ICBKU1ZhbHVlIHYgPSBjdXJyZW50LT5nZXQoKTsKLSAgICAgICAgaWYgKCF2KSB7CisgICAgICAg
IC8vIE5PVEU6IFNpbmNlIHRoaXMgbWF5IGJlIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCB2
IGNvdWxkIGJlIGdhcmJhZ2UuIElmIGl0J3MgZ2FyYmFnZSwKKyAgICAgICAgLy8gdGhhdCBtZWFu
cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorICAgICAgICBpZiAoIXYuaXNJbnQzMigp
KSB7CiAgICAgICAgICAgICAqY3VycmVudEFzRG91YmxlID0gUE5hTjsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCh2LmlzSW50MzIoKSk7CiAgICAgICAg
ICpjdXJyZW50QXNEb3VibGUgPSB2LmFzSW50MzIoKTsKICAgICB9CiAgICAgCkBAIC05NjYsMTMg
KzkwNCwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgp
OwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5
U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUg
diA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewot
ICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmll
cih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMTAxNCwxMyArOTUwLDExIEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlT
dG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91
dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkg
ewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcihKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgICAgICBu
ZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNW
YWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1
ZSkKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJh
bnNpdGlvbik7CkBAIC0xMDQxLDEzICs5NzUsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydENvbnRpZ3VvdQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5
LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBj
b25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2
ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkr
KykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQo
KTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAgICAgICAg
ICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkp
OwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAg
LTI3NTQsNiArMjY4Niw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZN
JiAKICAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0
dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAg
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0
b3JMZW5ndGgpOwogICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUo
dm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc2OCw2ICsyNzAy
LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBu
ZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgp
KTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZv
ciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQor
ICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigp
OwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdW
ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhC
aWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVj
dHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKQEAgLTI3OTksOCArMjczNSwxMiBAQCBib29sIEpTT2Jq
ZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAKICAgICBpZiAoaGFzRG91YmxlKGluZGV4
aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7
IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGln
dW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47CisgICAgICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgIH0KKwog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAogI2lu
Y2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVk
ZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2luY2x1
ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29weUJh
cnJpZXIuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJEZWZl
ckdDLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtMTAzLDcgKzEwMyw2IEBAIHB1YmxpYzoKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29w
eUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2VsbCosIEhlYXBTbmFw
c2hvdEJ1aWxkZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xh
c3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CkBAIC03OTcsNyArNzk2LDYgQEAgcHJvdGVjdGVkOgog
ICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAK
ICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0
dXJlKik7Ci0gICAgdm9pZCBjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiwgQnV0dGVyZmx5Kiwg
c2l6ZV90IHN0b3JhZ2VTaXplKTsKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0
IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0b3Jh
Z2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtOTQ5LDcgKzk0Nyw3IEBAIHByaXZh
dGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3Jh
Z2VTbG93KFZNJik7CiAKIHByb3RlY3RlZDoKLSAgICBDb3B5QmFycmllcjxCdXR0ZXJmbHk+IG1f
YnV0dGVyZmx5OworICAgIEF1eGlsaWFyeUJhcnJpZXI8QnV0dGVyZmx5Kj4gbV9idXR0ZXJmbHk7
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9wYWRkaW5n
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LCAyMDA5LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LCAy
MDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHly
aWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIEpTT2JqZWN0SW5saW5lc19oCiAjZGVmaW5lIEpT
T2JqZWN0SW5saW5lc19oCiAKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMb29r
dXAuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNw
cAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDkgQEAKIAogI2luY2x1ZGUg
IkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiTWlj
cm90YXNrLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTEgQEAKICNpbmNsdWRl
ICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTQ0J1aWx0
aW5zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZS5oIgog
I2luY2x1ZGUgIk1pY3JvdGFzay5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEzICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogCi0jaW5jbHVkZSAiSWRlbnRp
ZmllcklubGluZXMuaCIKICNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI2LDEyICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNT
ZXRJdGVyYXRvci5oIgogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
U2V0LmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRv
cklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkg
KzI4LDcgQEAKICNpbmNsdWRlICJKU1N0cmluZ0l0ZXJhdG9yLmgiCiAKICNpbmNsdWRlICJCdWls
dGluTmFtZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCShy
ZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBs
YXRlUmVnaXN0cnlLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOSArMjcsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIgogCi0jaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjks
NyBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
VHlwZWRBcnJheUFkYXB0b3JzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDEyICsyOSwxMCBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0dGVy
U2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNN
YXAuaCIKICNpbmNsdWRlICJNYXBQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDEzICszMSwxMSBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNp
bmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVk
ZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk1hcERh
dGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiAjaW5jbHVkZSAi
TWFwUHJvdG90eXBlLmx1dC5oIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDggKzI4LDcgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAi
SWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJQcm94eU9iamVjdC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4
ICsyOCw3IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlSW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw5ICszOCw5IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0
aWEKICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICB2b2lkKiB0ZW1wOwotICAgIGlmICghdm0uaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgJnRlbXApKQotICAgICAgICByZXR1cm4gMDsKKyAgICB2b2lkKiB0ZW1wID0gdm0uaGVh
cC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICBpZiAoIXRlbXApCisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIGJ1dHRlcmZseS0+c2V0
VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5n
dGgoaW5pdGlhbExlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZl
cmlmaWVkCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtl
ZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFw
Ojppc1BvaW50ZXJHQ09iamVjdEpTQ2VsbChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRh
YmxlKSk7CiAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6RXhl
Y3V0YWJsZTsKICAgICAgICAgICAgIHN0YWNrRnJhbWUuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7
CiAgICAgICAgICAgICBtX2xpdmVDZWxsUG9pbnRlcnMuYWRkKGV4ZWN1dGFibGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTEgQEAKICNpbmNsdWRl
ICJFcnJvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9y
T3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiTWFwRGF0YS5oIgog
I2luY2x1ZGUgIlNldFByb3RvdHlwZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NldFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTMgKzMxLDExIEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkdl
dHRlclNldHRlci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1Nl
dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKICNpbmNsdWRlICJTZXRQcm90
b3R5cGUubHV0LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOCwxMSArMjgsOSBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJ
dGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtNYXAuaCIKLSNpbmNsdWRlICJT
dHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcFByb3RvdHlwZS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI4LDExICsyOCw5IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkl0ZXJh
dG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha1NldC5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWFrU2V0UHJvdG90eXBlLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1z
dG9yYWdlLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanMJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdl
LWFycmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisvL0AgcnVu
RGVmYXVsdAordmFyIHggPSBbMi41LCAxLjVdOworeC5sZW5ndGggPSAxMDAwMDAwMDAwOworeC5s
ZW5ndGggPSAyOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAzLjUpOworaWYgKHgu
dG9TdHJpbmcoKSAhPSAiMy41LDIuNSwxLjUiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlmdC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlmdC5qcwko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnRp
Z3VvdXMtYXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKy8v
QCBydW5EZWZhdWx0Cit2YXIgeCA9IFsnYicsICdhJ107CitBcnJheS5wcm90b3R5cGUudW5zaGlm
dC5jYWxsKHgsICdjJyk7CitpZiAoeC50b1N0cmluZygpICE9ICJjLGIsYSIpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZG91YmxlLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5z
aGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2RvdWJsZS1hcnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBA
QAorLy9AIHJ1bkRlZmF1bHQKK3ZhciB4ID0gWzIuNSwgMS41XTsKK0FycmF5LnByb3RvdHlwZS51
bnNoaWZ0LmNhbGwoeCwgMy41KTsKK2lmICh4LnRvU3RyaW5nKCkgIT0gIjMuNSwyLjUsMS41IikK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNjcmliZSh4KTsKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbnQzMi1hcnJheS11bnNoaWZ0Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW50MzIt
YXJyYXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2IEBACisvL0AgcnVuRGVmYXVsdAordmFyIHggPSBbMiwgMV07CitBcnJheS5wcm90b3R5
cGUudW5zaGlmdC5jYWxsKHgsIDMpOworaWYgKHgudG9TdHJpbmcoKSAhPSAiMywyLDEiKQorICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2
aXNpb24gMjAzOTIwKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5
IE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhlIEpTQyBHQyBuZWVkcyBhIHRy
eUZhc3RBbGlnbmVkTWFsbG9jKCksIGFuZCB0aGlzIGV4cG9zZXMgc3VjaCBhIGZ1bmN0aW9uLgor
CisgICAgICAgICogd3RmL0Zhc3RNYWxsb2MuY3BwOgorICAgICAgICAoV1RGOjpmYXN0QWxpZ25l
ZE1hbGxvYyk6CisgICAgICAgIChXVEY6OnRyeUZhc3RBbGlnbmVkTWFsbG9jKToKKyAgICAgICAg
KFdURjo6ZmFzdEFsaWduZWRGcmVlKToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5oOgorCiAy
MDE2LTA3LTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IFN0cmluZ1ZpZXcgY2FwYWJsZSBvZiBiZWluZyBwYXNzZWQgb3IgcmV0dXJuZWQgaW4gb25seSAy
IHJlZ2lzdGVycy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAyMDM5MjApCisr
KyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDYgQEAKLS8vIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDExLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSwg
MjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNS0yMDA5LCAyMDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CkBAIC05Nyw2ICs5Niwx
MSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJu
IF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOwogfQogCit2b2lkKiB0cnlGYXN0QWxp
Z25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgcmV0dXJu
IF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOworfQorCiB2b2lkIGZhc3RBbGlnbmVk
RnJlZSh2b2lkKiBwKSAKIHsKICAgICBfYWxpZ25lZF9mcmVlKHApOwpAQCAtMTExLDYgKzExNSwx
MyBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJu
IHA7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCBzaXplKSAKK3sKKyAgICB2b2lkKiBwID0gbnVsbHB0cjsKKyAgICBwb3NpeF9tZW1hbGln
bigmcCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gcDsKK30KKwogdm9pZCBmYXN0QWxp
Z25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgZnJlZShwKTsKQEAgLTIzMSw2ICsyNDIsMTEgQEAg
dm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBibWFs
bG9jOjphcGk6Om1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKK3ZvaWQqIHRyeUZhc3RB
bGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICByZXR1
cm4gYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworfQorCiB2b2lk
IGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBibWFsbG9jOjphcGk6OmZyZWUocCk7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvV1RGL3d0
Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENv
cHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Myw2ICs1Myw3IEBA
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RGcmVlKHZvaWQqKTsKIAogLy8gQWxsb2NhdGlv
bnMgZnJvbSBmYXN0QWxpZ25lZE1hbGxvYygpIG11c3QgYmUgZnJlZWQgdXNpbmcgZmFzdEFsaWdu
ZWRGcmVlKCkuCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlGYXN0
QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqKTsKIAogV1RGX0VYUE9SVF9QUklWQVRFIHNp
emVfdCBmYXN0TWFsbG9jU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xMDcsNiArMTA4LDcgQEAgdXNp
bmcgV1RGOjpmYXN0TWFsbG9jU2l6ZTsKIHVzaW5nIFdURjo6ZmFzdFJlYWxsb2M7CiB1c2luZyBX
VEY6OmZhc3RTdHJEdXA7CiB1c2luZyBXVEY6OmZhc3RaZXJvZWRNYWxsb2M7Cit1c2luZyBXVEY6
OnRyeUZhc3RBbGlnbmVkTWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0Q2FsbG9jOwogdXNpbmcg
V1RGOjp0cnlGYXN0TWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0WmVyb2VkTWFsbG9jOwpJbmRl
eDogU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTYtMDctMjkgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxs
b2NhdGVkIGluIEF1eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRo
ZSBKU0MgR0MgbmVlZHMgdG8gYmUgYWJsZSB0byB0cnlNZW1hbGlnbiwgYW5kIHRoaXMgcmVmYWN0
b3JzIHRoZSBjb2RlIHRvIGV4cG9zZSBzdWNoIGEKKyAgICAgICAgZnVuY3Rpb24uCisKKyAgICAg
ICAgKiBibWFsbG9jL0FsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6
OmFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOgor
ICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZUltcGwpOgorICAgICAgICAoYm1h
bGxvYzo6QWxsb2NhdG9yOjpyZWFsbG9jYXRlKToKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRv
ci5oOgorICAgICAgICAqIGJtYWxsb2MvQ2FjaGUuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hl
OjphbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6dHJ5QWxsb2NhdGUpOgorICAg
ICAgICAqIGJtYWxsb2MvYm1hbGxvYy5oOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjptYWxsb2Mp
OgorICAgICAgICAoYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbik6CisgICAgICAgIChibWFsbG9j
OjphcGk6Om1lbWFsaWduKToKKwogMjAxNi0wNy0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGluIHhjY29u
ZmlnIGZpbGVzIHRvIG1hdGNoIHRoZSBzZGsgbmFtZXMuCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsMTggQEAgdm9p
ZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZQogCiB2b2lkKiBBbGxvY2F0b3I6
OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogeworICAgIGJvb2wgY3Jh
c2hPbkZhaWx1cmUgPSB0cnVlOworICAgIHJldHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBz
aXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVy
ZSA9IGZhbHNlOworICAgIHJldHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFz
aE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplLCBib29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEJBU1NF
UlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJs
ZWQpIHsKQEAgLTgwLDcgKzkyLDEwIEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90
IGFsaWdubWUKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKHJvdW5kVXBUb011bHRpcGxlT2YoYWxp
Z25tZW50LCBzaXplKSk7CiAKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2so
UGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46
OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAg
ICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAo
Y3Jhc2hPbkZhaWx1cmUpCisgICAgICAgIHJldHVybiBoZWFwLT5hbGxvY2F0ZUxhcmdlKGxvY2ss
IGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGhlYXAtPnRyeUFsbG9jYXRlTGFyZ2UobG9j
aywgYWxpZ25tZW50LCBzaXplKTsKIH0KIAogdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZv
aWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDEyICs0MywxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
KiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAg
dm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIHJlYWxsb2NhdGUo
dm9pZCosIHNpemVfdCk7CiAKICAgICB2b2lkIHNjYXZlbmdlKCk7CiAKIHByaXZhdGU6CisgICAg
dm9pZCogYWxsb2NhdGVJbXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgYm9vbCBjcmFzaE9u
RmFpbHVyZSk7CisgICAgCiAgICAgYm9vbCBhbGxvY2F0ZUZhc3RDYXNlKHNpemVfdCwgdm9pZCom
KTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9DYWNoZS5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKik7CiAgICAgc3RhdGlj
IHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7CkBAIC03OSw2ICs4MCwxNCBAQCBpbmxp
bmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBzaXplCiAgICAgcmV0dXJuIGNhY2hlLT5h
bGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKIH0KIAoraW5saW5lIHZvaWQqIENhY2hlOjp0cnlB
bGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBDYWNoZSogY2Fj
aGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlmICghY2FjaGUpCisg
ICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKGFsaWdubWVudCwgc2l6ZSk7
CisgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNp
emUpOworfQorCiBpbmxpbmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCBzaXplKQogewogICAgIENhY2hlKiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46Omdl
dEZhc3RDYXNlKCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkocmV2aXNpb24gMjAz
OTIwKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDMsNiArNDMsMTIgQEAgaW5saW5lIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkKICAg
ICByZXR1cm4gQ2FjaGU6OmFsbG9jYXRlKHNpemUpOwogfQogCisvLyBSZXR1cm5zIG51bGwgb24g
ZmFpbHVyZS4KK2lubGluZSB2b2lkKiB0cnlNZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gQ2FjaGU6OnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6
ZSk7Cit9CisKIC8vIENyYXNoZXMgb24gZmFpbHVyZS4KIGlubGluZSB2b2lkKiBtZW1hbGlnbihz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284920</attachid>
            <date>2016-07-29 17:13:18 -0700</date>
            <delta_ts>2016-07-30 12:27:19 -0700</delta_ts>
            <desc>fixing internal fuzz test failures</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>140018</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNl
IGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFrZSB0aGUgR0MgY29uY3VycmVu
dCAoYnVnIDE0OTQzMiksIHdlIHdvdWxkIGVpdGhlciBuZWVkIHRvIGVuYWJsZSBjb25jdXJyZW50
CisgICAgICAgIGNvcHlpbmcgb3Igd2Ugd291bGQgbmVlZCB0byBub3QgY29weS4gQ29uY3VycmVu
dCBjb3B5aW5nIGNhcnJpZXMgYSAxLTIlIHRocm91Z2hwdXQgb3ZlcmhlYWQKKyAgICAgICAgZnJv
bSB0aGUgYmFycmllcnMgYWxvbmUuIENvbnNpZGVyaW5nIHRoYXQgTWFya2VkU3BhY2UgZG9lcyBh
IGRlY2VudCBqb2Igb2YgYXZvaWRpbmcKKyAgICAgICAgZnJhZ21lbnRhdGlvbiwgaXQncyB1bmxp
a2VseSB0aGF0IGl0J3Mgd29ydGggcGF5aW5nIDEtMiUgdGhyb3VnaHB1dCBmb3IgY29weWluZy4g
U28sIHdlIHdhbnQKKyAgICAgICAgdG8gZ2V0IHJpZCBvZiBjb3BpZWQgc3BhY2UuIFRoaXMgY2hh
bmdlIG1vdmVzIGNvcGllZCBzcGFjZSdzIGJpZ2dlc3QgY2xpZW50IG92ZXIgdG8gbWFya2VkCisg
ICAgICAgIHNwYWNlLgorICAgICAgICAKKyAgICAgICAgTW92aW5nIGJ1dHRlcmZsaWVzIHRvIG1h
cmtlZCBzcGFjZSBtZWFucyBoYXZpbmcgdGhlbSB1c2UgdGhlIG5ldyBBdXhpbGlhcnkgSGVhcENl
bGwKKyAgICAgICAgYWxsb2NhdGlvbiBwYXRoLiBUaGlzIGlzIGEgZmFpcmx5IG1lY2hhbmljYWwg
Y2hhbmdlLiBBdCBhIGhpZ2ggbGV2ZWwgdGhpcyBkb2VzIHRoZXNlIHRoaW5nczoKKyAgICAgICAg
CisgICAgICAgIC0gV2UgdXNlIEF1eGlsaWFyeUJhcnJpZXIgaW5zdGVhZCBvZiBDb3B5QmFycmll
ci4KKyAgICAgICAgCisgICAgICAgIC0gV2UgdXNlIHRyeUFsbG9jYXRlQXV4aWxpYXJ5IGluc3Rl
YWQgb2YgdHJ5QWxsb2NhdGVTdG9yYWdlLiBJIGdvdCByaWQgb2YgdGhlIHNpbGx5CisgICAgICAg
ICAgQ2hlY2tlZEJvb2xlYW4gc3R1ZmYsIHNpbmNlIGl0J3Mgc28gbXVjaCBtb3JlIHRyb3VibGUg
dGhhbiBpdCdzIHdvcnRoLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgSklUcyBoYXZlIHRvIGVt
aXQgaW5saW5lZCBtYXJrZWQgc3BhY2UgYWxsb2NhdGlvbnMgaW5zdGVhZCBvZiBpbmxpbmUgY29w
eSBzcGFjZQorICAgICAgICAgIGFsbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgLSBFdmVy
eW9uZSBoYXMgdG8gZ2V0IHVzZWQgdG8gemVyb2luZyB0aGVpciBidXR0ZXJmbGllcyBhZnRlciBh
bGxvY2F0aW9uIGluc3RlYWQgb2YgcmVseWluZworICAgICAgICAgIG9uIHRoZW0gYmVpbmcgcHJl
LXplcm9lZCBieSB0aGUgR0MuIENvcGllZCBzcGFjZSB3b3VsZCB6ZXJvIHRoaW5ncyBmb3IgeW91
LCB3aGlsZSBtYXJrZWQKKyAgICAgICAgICBzcGFjZSBkb2Vzbid0LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIEl0IHN0aWxsIGZhaWxzIHNvbWUg
aW50ZXJuYWwgZnV6emluZyB0ZXN0cyBhbmQgSSBoYXZlbid0CisgICAgICAgIG1lYXN1cmVkIHBl
cmZvcm1hbmNlIHlldC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5l
d09iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmluaXRpYWxp
emVBcnJheUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0UmlnaHRTaGlmdFNuaXBwZXQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZUhlYXBDZWxsKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVPYmplY3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0b3JGb3JTaXplKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVKU0FycmF5KToKKyAg
ICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkNvbnNlcnZh
dGl2ZVJvb3RzOjpncm93KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAg
ICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6OnJvb3RzKToKKyAgICAgICAgKiBoZWFwL0NvcHlUb2tlbi5oOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0
b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9yYWdlQWxsb2NhdG9y
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Omlz
Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxs
b2NhdGVPYmplY3RPZlR5cGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdWJzcGFjZUZvck9iamVj
dE9mVHlwZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZSk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkRnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZmluZEdDT2JqZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNWYWx1ZUdDT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNQb2ludGVyR0NPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
OjpyZXRpcmUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlQ
b3BGcmVlTGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZUltcGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2sp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxLaW5kKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpoZWFwKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0YWtlTGFzdEFjdGl2ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6dHJ5
Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNBdG9tQWxpZ25lZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjZWxsQWxpZ24pOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tGb3IpOgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0
c1dpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9y
T2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnRyeUFsbG9jYXRl
QXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhp
bGlhcnkpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeSk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwpOgorICAgICAgICAoSlNDOjpTZXRD
dXJyZW50Q2VsbFNjb3BlOjpTZXRDdXJyZW50Q2VsbFNjb3BlKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KiBsbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0F1eGls
aWFyeUJhcnJpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OkF1
eGlsaWFyeUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkF1
eGlsaWFyeUJhcnJpZXI6OnNsb3QpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6c2V0V2l0aG91
dEJhcnJpZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQpOgorICAgICAgICAq
IHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJp
Z2h0KToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6
CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmNyZWF0
ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVu
dGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NhbGxlZS5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRp
Z3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29weUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFj
a2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
bWlzZS5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanM6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorCiAyMDE2LTA3LTI5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIEJ5VmFsSW5mbyBpcyBvbmx5IHVzZWQgaW4gSklUIGVuYWJs
ZWQgZW52aXJvbm1lbnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsOCBAQAog
CQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE0MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9OwogCQkwRjM4QjAxOTE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwICovOyB9OwogCQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYz
OEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5
MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmNwcCAqLzsgfTsKIAkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM5MkM4ODFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCAq
LzsgfTsKIAkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi87
IH07CkBAIC0yNTE4LDYgKzI1MjAsOCBAQAogCQkwRjM4QjAxNDE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25LZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
Q29tcGlsYXRpb25LZXkuaDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbktleS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAxNTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29t
cGlsYXRpb25Nb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0NvbXBpbGF0aW9uTW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8q
IERGR0NvbXBpbGF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdDb21waWxhdGlvbk1vZGUuaDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1
eGlsaWFyeUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV4aWxp
YXJ5QmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM4RDJBMTFENDQx
OTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXV4aWxpYXJ5QmFycmllcklubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRG
dXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRG
dXp6LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0RnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzkyQzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0RnV6ei5oOyBwYXRo
ID0gZGZnL0RGR09TUkV4aXRGdXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
M0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTYwNyw2ICs1NjExLDggQEAKIAkJCQlGNjkyQTg0RDAyNTU1
OTdEMDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuY3BwICovLAogCQkJCUY2OTJBODRFMDI1NTU5
N0QwMUZGNjBGNyAvKiBBcnJheVByb3RvdHlwZS5oICovLAogCQkJCTBGQjdGMzhBMTVFRDhFMzgw
MEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLywKKwkJCQkwRjM4RDJBMDFENDQxOTY2MDA2ODA0
OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovLAorCQkJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovLAogCQkJCTUyNjc4RjhDMUEwMzEwMDkw
MDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uY3BwICovLAogCQkJCTUyNjc4RjhEMUEwMzEw
MDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCAqLywKIAkJCQkxNDdCODNBQTBFNkRC
OEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCAqLywKQEAgLTU3NzIs
NyArNTc3OCw2IEBACiAJCQkJNzBEQzNFMDgxQjJERjJDNzAwMDU0Mjk5IC8qIEl0ZXJhdG9yUHJv
dG90eXBlLmggKi8sCiAJCQkJOTNBREZDRTYwQ0NCRDdBQzAwRDMwQjA4IC8qIEpTQXJyYXkuY3Bw
ICovLAogCQkJCTkzODc3MkU1MDM4QkZFMTkwMDg2MzVDRSAvKiBKU0FycmF5LmggKi8sCi0JCQkJ
NTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8sCiAJCQkJMEYy
QjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovLAogCQkJCTBGMkI2
NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi8sCiAJCQkJMEYyQjY2QjYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC01
NzgyLDYgKzU3ODcsNyBAQAogCQkJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5jcHAgKi8sCiAJCQkJMEYyQjY2QkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3LmggKi8sCiAJCQkJMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAorCQkJCTUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAv
KiBKU0FycmF5SW5saW5lcy5oICovLAogCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uY3BwICovLAogCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk2NTdDRjQ1NjE5QkY2NjYyMDA0QUNCRjIgLyogSlND
YWxsZWUuY3BwICovLApAQCAtNzI2MSw2ICs3MjY3LDcgQEAKIAkJCQkwRjMzOEUxQzFCRjI4NkVB
MDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNEY0QjZGMzFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjM4RDJBMjFENDQxOTY4MDA2ODA0OTkgLyogQXV4aWxpYXJ5
QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8q
IGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkIxQkQxN0ZBNDAw
MUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTkyRkNFNzkw
MDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzgxNSw2
ICs3ODIyLDcgQEAKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThBNDExNzkwMDhBMEZDRCAvKiBKU01h
bmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODc0MjE3Q0JFOEVC
MDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzhEMkEzMUQ0NDE5NkQw
MDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc0REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBpbiBIZWFkZXJzICov
LAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25tZW50Lmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIwNiwzNCArMTIwNiwyMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgICAgIENvcGll
ZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFi
c29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9
IHZtLmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShuZXdTaXplKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJmFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICBqaXQuZW1pdEFs
bG9jYXRlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOwor
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3
U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVhbGxvY2F0aW5nKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0aW5nIChpLmUu
IHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQogICAgICAgICAgICAgICAgICAgICAvLyBhbHJl
YWR5IGhhZCBvdXQtb2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlKS4KICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNp
emVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNo
U3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVk
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRv
ci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGhhdmUgc2NyYXRjaEdQUiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBz
dG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRT
aXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTA3LDI3ICszOTA3LDMwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1t
MzIoMyksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNp
Y1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQ
dHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2Nh
dGVWYXJpYWJsZVNpemVkKAorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCkt
PmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwK
KyAgICAgICAgICAgICAgICBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgICAgIG1f
aml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VH
UFIpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGlu
Z1R5cGUoKSk7CiAgICAgICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIEpT
VmFsdWUgbmFuID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMudGFn
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4u
dS5hc0JpdHMucGF5bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3As
ICZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBKU1ZhbHVlIGhvbGU7CisgICAgICAgICAgICBpZiAoaGFzRG91Ymxl
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICBob2xlID0gSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgaG9sZSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2pp
dC5sYWJlbCgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5h
c0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMy
KGhvbGUudS5hc0JpdHMucGF5bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9v
cCwgJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxB
cnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwg
cmVzdWx0R1BSLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODY5
LDI3ICszODY5LDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAg
ICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAg
ICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BS
KSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAorICAgICAgICAgICAg
ICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRh
KCksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBzY3JhdGNoMkdQUiwg
c2xvd0Nhc2VzKTsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChi
aXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBzY3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
NjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3Jh
dGNoMkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5s
aW5rVG8obG9vcCwgJm1faml0KTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQo
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNo
MkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhs
b29wLCAmbV9qaXQpOworICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2Fs
bEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKKyAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9y
PigKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplLCByZXN1bHRHUFIsCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4
aW5nVHlwZSgpKSwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdl
KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIHNpemUgKz0gb3V0
T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICBpZiAoc2l6ZSkgewotICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9y
YWdlKFRydXN0ZWRJbW0zMihzaXplKSwgc3RvcmFnZUdQUikpOwotICAgICAgICBpZiAoaGFzSW5k
ZXhpbmdIZWFkZXIpCi0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihKU1ZhbHVlKSksIHN0b3JhZ2VHUFIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKCZtX2pp
dC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZSkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKAor
ICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFs
dWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCisgICAgICAgICAgICBzdG9yYWdlR1BSKTsK
ICAgICB9IGVsc2UKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdl
R1BSKTsKIApAQCAtMTI3LDE0ICsxMjcsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFs
bG9jYXRlUmF3T2JqZQogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1Jhd09i
amVjdCwgcmVzdWx0R1BSLCBzdG9yYWdlR1BSLAogICAgICAgICBzdHJ1Y3R1cmUsIHZlY3Rvckxl
bmd0aCkpOwogCi0gICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSAm
JiBudW1FbGVtZW50cyA8IHZlY3Rvckxlbmd0aCkgeworICAgIGlmIChudW1FbGVtZW50cyA8IHZl
Y3Rvckxlbmd0aCkgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwg
c2NyYXRjaEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciB2YWx1ZTsKLSAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CisgICAg
ICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAg
ICB2YWx1ZS5hc0ludDY0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2Rl
QXNEb3VibGUsIFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUuYXNJbnQ2
NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMih2YWx1ZS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1
c3RlZEltbTMyKHZhbHVlLmFzQml0cy5wYXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSk7CkBAIC02NzI2LDE4ICs2NzMyLDI0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDEodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMyh0aGlzKTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
MyA9IHNjcmF0Y2gzLmdwcigpOwogICAgICAgICAKICAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRp
b24oKS0+cHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChpbml0aWFs
T3V0T2ZMaW5lQ2FwYWNpdHkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAg
ICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZSgKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihp
bml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7
Ci0KLSAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOworICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91
dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpOworICAgIG1faml0Lm1vdmUoCisgICAg
ICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEoc2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgbV9qaXQu
YWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKQEAgLTY3
NzIsMTYgKzY3ODQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQ
cgogICAgIFN0b3JhZ2VPcGVyYW5kIG9sZFN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwog
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAgICAKICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIG9sZFN0b3JhZ2VHUFIg
PSBvbGRTdG9yYWdlLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdw
cigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwotICAgICAgICAK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJh
c2ljU3RvcmFnZShUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1f
aml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpLCBzY3JhdGNoR1BSMSk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3By
KCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIG1faml0
Lm1vdmUoCisgICAgICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5o
ZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEobmV3U2l6ZSkpLAorICAgICAgICBzY3JhdGNo
R1BSMik7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0
Y2hHUFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNs
b3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsIHNjcmF0Y2hHUFIxLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3NjYsNyArMzc2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgc2l6ZSwgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25T
aXplKG1pbkNhcGFjaXR5KSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmYXN0T2JqZWN0
ID0gYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCi0gICAgICAg
ICAgICAgICAgc2l6ZSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihzaXplKSwgc3RydWN0dXJlLCBtX291dC5p
bnRQdHJaZXJvLCBzbG93UGF0aCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0
LnN0b3JlMzIobGVuZ3RoLnZhbHVlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19sZW5ndGgpOwpAQCAtNDA2Miw5ICs0MDYyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBM
VmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2Fk
U2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0
b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZh
bHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5o
ZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7
CisgICAgICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFs
bG9jYXRvciwgZmFpbENhc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0
dGVyZmx5ID0gbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAg
ICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29u
c3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBi
dXR0ZXJmbHksIGZhaWxDYXNlKTsKICAgICAgICAgICAgIApAQCAtNjkxOSwxMSArNjkyMSwxMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2Nh
dGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAg
ICAgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAg
ICAgICAgICAgICAgICAgIGFsbG9jYXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4
aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoKTsKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFs
dWUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3Jh
Z2UsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6
ZSkpOworICAgICAgICAgICAgICAgICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsg
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUz
Mih2ZWN0b3JMZW5ndGgsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVj
dG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAKQEAgLTc3MTcsMTAgKzc3MjEsMTEgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSwgTFZhbHVlIHZlY3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7
Ci0gICAgICAgIGlmICghaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8v
IFRoZSBHQyBhbHJlYWR5IGluaXRpYWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1
cy4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsK
KyAgICAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9
IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpOwogCiAgICAgICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0
byBQTmFOLgogICAgICAgICBMQmFzaWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CkBAIC03NzM1LDkgKzc3NDAsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBt
X291dC5waGkoSW50MzIsIG9yaWdpbmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9
IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAg
ICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBz
LmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAg
ICBtX291dC5zdG9yZTY0KGhvbGUsIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZh
bHVlIG5leHRJbmRleCA9IG1fb3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAg
ICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7
CkBAIC03Nzk4LDEyICs3ODAxLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3Jh
Z2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMg
KiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5
dGVzID0gc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxv
Y2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNp
emVJbkJ5dGVzKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFw
Q2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAK
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJ
bnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3Jh
Z2UpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgCkBAIC04MzczLDcgKzgzNzcsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBh
dGNocG9pbnQpOwogICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9j
YXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwo
TFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBM
QmFzaWNCbG9jayBzdWNjZXNzID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAKQEAgLTg0MDgsNyAr
ODQxMiw3IEBAIHByaXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxv
Y2F0b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0
aCk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwg
c2xvd1BhdGgpOwogICAgICAgICBzdG9yZVN0cnVjdHVyZShyZXN1bHQsIHN0cnVjdHVyZSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtODQzNiw0NiArODQ0MCw1NCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgwKSwgc3RydWN0dXJl
LCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2xhc3NUeXBlPgotICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCi0g
ICAgICAgIExWYWx1ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoTFZh
bHVlIHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewog
ICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0
IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3Bh
Y2U6OmltcHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJN
YXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogCi0g
ICAgICAgIExWYWx1ZSBzdWJzcGFjZSA9IG1fb3V0LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vi
c3BhY2VGb3JPYmplY3RPZlR5cGU8Q2xhc3NUeXBlPigpKTsKLSAgICAgICAgCiAgICAgICAgIExC
YXNpY0Jsb2NrIHNtYWxsQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJh
c2ljQmxvY2sgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogICAgICAg
ICAKLSAgICAgICAgTFZhbHVlIHVwcm91bmRlZFNpemUgPSBtX291dC5hZGQoc2l6ZSwgbV9vdXQu
Y29uc3RJbnQzMihNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgLSAxKSk7Ci0gICAgICAgIExWYWx1
ZSBpc1NtYWxsID0gbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihN
YXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOworICAgICAgICBMVmFsdWUgdXByb3VuZGVkU2l6
ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lz
ZVN0ZXAgLSAxKSk7CisgICAgICAgIExWYWx1ZSBpc1NtYWxsID0gbV9vdXQuYmVsb3codXByb3Vu
ZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoTWFya2VkU3BhY2U6OnByZWNpc2VDdXRvZmYpKTsK
ICAgICAgICAgbV9vdXQuYnJhbmNoKGlzU21hbGwsIHVuc3VyZShzbWFsbENhc2VCbG9jayksIHVu
c3VyZShsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2spKTsKICAgICAgICAgCiAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc21hbGxDYXNlQmxvY2ssIGxhcmdlT3JP
dmVyc2l6ZUNhc2VCbG9jayk7CiAgICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9vdXQu
YmFzZUluZGV4KAogICAgICAgICAgICAgbV9oZWFwcy5NYXJrZWRTcGFjZV9TdWJzcGFjZV9wcmVj
aXNlQWxsb2NhdG9ycywgc3Vic3BhY2UsCi0gICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKG1f
b3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2Vk
U3BhY2U6OnByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291dC5sU2hyKHVwcm91bmRl
ZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpwcmVjaXNlU3Rl
cCkpKSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsQWxsb2NhdG9yID0gbV9vdXQuYW5j
aG9yKGFkZHJlc3MudmFsdWUoKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
ICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9j
aywgbGFyZ2VDYXNlQmxvY2spOwogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBt
X291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpp
bXByZWNpc2VDdXRvZmYpKSwKKyAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91bmRlZFNpemUs
IG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjppbXByZWNpc2VDdXRvZmYpKSwKICAgICAg
ICAgICAgIHVzdWFsbHkobGFyZ2VDYXNlQmxvY2spLCByYXJlbHkoc2xvd1BhdGgpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlQ2FzZUJsb2NrLCBjb250aW51YXRpb24p
OwogICAgICAgICBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgbV9oZWFw
cy5NYXJrZWRTcGFjZV9TdWJzcGFjZV9pbXByZWNpc2VBbGxvY2F0b3JzLCBzdWJzcGFjZSwKLSAg
ICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5kZWRTaXplLCBtX291
dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCkpKSkpOwor
ICAgICAgICAgICAgbV9vdXQubFNocih1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKGdl
dExTQlNldChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCkpKSk7CiAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGxhcmdlQWxsb2NhdG9yID0gbV9vdXQuYW5jaG9yKGFkZHJlc3MudmFsdWUoKSk7CiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFsdWUgYWxsb2Nh
dG9yID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIHNtYWxsQWxsb2NhdG9yLCBsYXJnZUFsbG9j
YXRvcik7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCks
IHNtYWxsQWxsb2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBhbGxvY2F0b3JGb3JTaXplKE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1
ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhbGxv
Y2F0b3JGb3JTaXplKG1fb3V0LmNvbnN0SW50UHRyKCZzdWJzcGFjZSksIHNpemUsIHNsb3dQYXRo
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgorICAgIExW
YWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCisgICAgICAgIExWYWx1ZSBzaXplLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1Bh
dGgpCisgICAgeworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgK
KyAgICAgICAgICAgIHZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9mVHlwZTxDbGFzc1R5cGU+
KCksIHNpemUsIHNsb3dQYXRoKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KGFsbG9j
YXRvciwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCkBAIC04
NTYyLDI2ICs4NTc0LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIG51bUVsZW1lbnRzKTsKICAg
ICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFn
ZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVl
KSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLAotICAgICAgICAgICAg
c2xvd1BhdGgpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVh
cC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKAorICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUp
ICogdmVjdG9yTGVuZ3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIExWYWx1
ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoJmFs
bG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBidXR0ZXJmbHkg
PSBtX291dC5zdWIoCi0gICAgICAgICAgICBlbmRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRy
KHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCkpOworICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxs
b2NhdGVPYmplY3Q8SlNBcnJheT4oCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwg
c2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJh
eT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIG1f
b3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihudW1FbGVtZW50cyksIGJ1dHRlcmZseSwgbV9o
ZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291
dC5jb25zdEludDMyKHZlY3Rvckxlbmd0aCksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlf
dmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVs
ZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX291dC5z
dG9yZTY0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2Fz
dDxpbnQ2NF90PihQTmFOKSksCi0gICAgICAgICAgICAgICAgICAgIGJ1dHRlcmZseSwgbV9oZWFw
cy5pbmRleGVkRG91YmxlUHJvcGVydGllc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
KworICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KGJp
dHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhv
bGUgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaG9sZSwgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4
ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBBcnJheVZh
bHVlcyhvYmplY3QsIGJ1dHRlcmZseSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMjAzOTIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MSwxNiArNTEsMTYgQEAgQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2
ZVJvb3RzKE1hcgogQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCiB7CiAg
ICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsK
KyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFj
aXR5ICogc2l6ZW9mKEhlYXBDZWxsKikpOwogfQogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpn
cm93KCkKIHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNh
cGFjaXR5ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKLSAgICBKU0NlbGwq
KiBuZXdSb290cyA9IHN0YXRpY19jYXN0PEpTQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFu
ZENvbW1pdChuZXdDYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSkpOwotICAgIG1lbWNweShuZXdS
b290cywgbV9yb290cywgbV9zaXplICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICBIZWFwQ2VsbCoq
IG5ld1Jvb3RzID0gc3RhdGljX2Nhc3Q8SGVhcENlbGwqKj4oT1NBbGxvY2F0b3I6OnJlc2VydmVB
bmRDb21taXQobmV3Q2FwYWNpdHkgKiBzaXplb2YoSGVhcENlbGwqKSkpOworICAgIG1lbWNweShu
ZXdSb290cywgbV9yb290cywgbV9zaXplICogc2l6ZW9mKEhlYXBDZWxsKikpOwogICAgIGlmICht
X3Jvb3RzICE9IG1faW5saW5lUm9vdHMpCi0gICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFu
ZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSk7CisgICAgICAg
IE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNp
emVvZihIZWFwQ2VsbCopKTsKICAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgbV9y
b290cyA9IG5ld1Jvb3RzOwogfQpAQCAtNzIsMTMgKzcyLDE0IEBAIGlubGluZSB2b2lkIENvbnNl
cnZhdGl2ZVJvb3RzOjpnZW5lcmljQWQKIAogICAgIG1fY29waWVkU3BhY2UtPnBpbklmTmVjZXNz
YXJ5KHApOwogCi0gICAgaWYgKCFIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsICptX2Js
b2NrcywgcCkpCisgICAgcCA9IEhlYXA6OmZpbmRHQ09iamVjdFBvaW50ZXIoZmlsdGVyLCAqbV9i
bG9ja3MsIHApOworICAgIGlmICghcCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fc2l6
ZSA9PSBtX2NhcGFjaXR5KQogICAgICAgICBncm93KCk7CiAKLSAgICBtX3Jvb3RzW21fc2l6ZSsr
XSA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHApOworICAgIG1fcm9vdHNbbV9zaXplKytdID0gYml0
d2lzZV9jYXN0PEhlYXBDZWxsKj4ocCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29r
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290
cy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBKSVRT
dHViUm91dGluZVNldDsKLWNsYXNzIEpTQ2VsbDsKIAogY2xhc3MgQ29uc2VydmF0aXZlUm9vdHMg
ewogcHVibGljOgpAQCAtNDQsMTEgKzQ0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCh2b2lk
KiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYpOwog
ICAgIAogICAgIHNpemVfdCBzaXplKCk7Ci0gICAgSlNDZWxsKiogcm9vdHMoKTsKKyAgICBIZWFw
Q2VsbCoqIHJvb3RzKCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbmxp
bmVDYXBhY2l0eSA9IDEyODsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNhcGFj
aXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5v
bklubGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihIZWFwQ2VsbCopOwogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgogICAgIHZvaWQgZ2VuZXJpY0FkZFBvaW50ZXIodm9p
ZCosIFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKQEAgLTU4LDEyICs1OCwxMiBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgZ3JvdygpOwogCi0gICAgSlNDZWxsKiogbV9yb290czsKKyAg
ICBIZWFwQ2VsbCoqIG1fcm9vdHM7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBzaXplX3QgbV9j
YXBhY2l0eTsKICAgICBNYXJrZWRCbG9ja1NldCogbV9ibG9ja3M7CiAgICAgQ29waWVkU3BhY2Uq
IG1fY29waWVkU3BhY2U7Ci0gICAgSlNDZWxsKiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5
XTsKKyAgICBIZWFwQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBhY2l0eV07CiB9OwogCiBp
bmxpbmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKQEAgLTcxLDcgKzcxLDcgQEAg
aW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiAgICAgcmV0dXJuIG1fc2l6
ZTsKIH0KIAotaW5saW5lIEpTQ2VsbCoqIENvbnNlcnZhdGl2ZVJvb3RzOjpyb290cygpCitpbmxp
bmUgSGVhcENlbGwqKiBDb25zZXJ2YXRpdmVSb290czo6cm9vdHMoKQogewogICAgIHJldHVybiBt
X3Jvb3RzOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJl
dmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDYgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgQnV0dGVyZmx5Q29weVRva2VuLAogICAgIFR5cGVk
QXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0b3JlQ29weVRva2VuLAogICAg
IERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTIgKzU5OCw2IEBAIHZvaWQg
SGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBDb3B5V29ya0xpc3QmIHdvcmtMaXN0ID0gYmxvY2stPndvcmtM
aXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENvcHlXb3JrbGlzdEl0ZW0gaXRl
bSA6IHdvcmtMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udG9r
ZW4oKSA9PSBCdXR0ZXJmbHlDb3B5VG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3IsIEJ1dHRlcmZseUNvcHlUb2tl
bik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKS0+bWV0aG9kVGFibGUoKS0+Y29weUJh
Y2tpbmdTdG9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCks
IGNvcHlWaXNpdG9yLCBpdGVtLnRva2VuKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBE
Rkc6OlNwZWN1bGF0aXZlSklUOwogICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFsdWUp
OyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCi0gICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3Qg
SlNDZWxsKik7CisgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSGVhcENlbGwqKTsKIAogICAg
IC8vIFRoaXMgY29uc3RhbnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mgd2UgaXRlcmF0ZSBi
ZXR3ZWVuIGNoZWNrcyBvZiBvdXIgCiAgICAgLy8gZGVhZGxpbmUgd2hlbiBjYWxsaW5nIEhlYXA6
OmlzUGFnZWRPdXQuIERlY3JlYXNpbmcgaXQgd2lsbCBjYXVzZSB1cyB0byBkZXRlY3QgCkBAIC0x
MDQsNyArMTA0LDggQEAgcHVibGljOgogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJ1
biBhZnRlciBzdG9wQWxsb2NhdGlvbigpIGlzIGNhbGxlZCBhbmQgCiAgICAgLy8gYmVmb3JlIGxp
dmVuZXNzIGRhdGEgaXMgY2xlYXJlZCB0byBiZSBhY2N1cmF0ZS4KLSAgICBzdGF0aWMgYm9vbCBp
c1BvaW50ZXJHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIsIE1hcmtlZEJsb2NrU2V0Jiwgdm9pZCog
cG9pbnRlcik7CisgICAgc3RhdGljIHZvaWQqIGZpbmRHQ09iamVjdFBvaW50ZXIoVGlueUJsb29t
RmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIHZvaWQqIHBvaW50ZXIpOworICAgIHN0YXRpYyBib29s
IGlzUG9pbnRlckdDT2JqZWN0SlNDZWxsKFRpbnlCbG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQm
LCBjb25zdCB2b2lkKiBwb2ludGVyKTsKICAgICBzdGF0aWMgYm9vbCBpc1ZhbHVlR0NPYmplY3Qo
VGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIEpTVmFsdWUpOwogCiAgICAgdm9pZCB3
cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7CkBAIC0xNTAsNyArMTUxLDExIEBAIHB1YmxpYzoK
ICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9y
KHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0ZXMp
OyB9CiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rv
cihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFsbG9jYXRv
ckZvcihieXRlcyk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IE1hcmtlZEFs
bG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcyk7CisgICAgTWFy
a2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRlcykgeyBy
ZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAg
Q29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdlU3Bh
Y2UuYWxsb2NhdG9yKCk7IH0KKyAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGlu
dGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlND
ZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVBdXhp
bGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6
ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU3RvcmFn
ZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9v
bGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiwg
c2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRP
d25lciwgdm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBib29sIEhl
YXA6OmlzQ29sbGVjdGluZygpCiAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBG
dWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb247
CiB9CiAKLWlubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKK2lubGlu
ZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIHJldHVybiBN
YXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKIH0KQEAgLTE5OSw3ICsxOTksNyBA
QCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIENsYXNzVHlwZT4KLXZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNp
emVfdCBieXRlcykKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXpl
X3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMg
YWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVj
dGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8
IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3Rk
Ojppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUp
KTsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShz
aXplX3QgCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLU1hcmtlZFNwYWNlOjpT
dWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQoraW5saW5lIE1hcmtlZFNw
YWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQogewogICAgIC8v
IEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1h
bCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFT
U0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1
cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xh
c3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMjEsNyArMjIxLDcg
QEAgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvcgogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci1NYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZv
ck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBIZWFw
OjphbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogewogICAgIC8vIEpTQ2Vs
bDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0
cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VSVCgo
IUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFn
cyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBl
LCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMzEsNiArMjMxLDM3IEBAIE1h
cmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWMKICAgICByZXR1cm4gYWxsb2Nh
dG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCog
SGVhcDo6YWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0
ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZUF1eGlsaWFy
eShieXRlcyk7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigi
SlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwg
Ynl0ZXMsIGludGVuZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShp
bnRlbmRlZE93bmVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2
b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNp
emVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNwYWNlLnRyeUFsbG9j
YXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAg
IGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAl
cDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworaW5saW5lIHZvaWQqIEhlYXA6OnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
Cit7CisgICAgdm9pZCogbmV3QmFzZSA9IHRyeUFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3du
ZXIsIG5ld1NpemUpOworICAgIGlmICghbmV3QmFzZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2UsIG9sZFNpemUpOworICAgIHJldHVybiBuZXdC
YXNlOworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewog
ICAgIENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5
dGVzLCBvdXRQdHIpOwpAQCAtMzU0LDIwICszODUsNDYgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGlk
RnJlZUJsb2NrKHNpemVfdCBjYQogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIEhlYXA6OmlzUG9p
bnRlckdDT2JqZWN0KFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJr
ZWRCbG9ja1NldCwgdm9pZCogcG9pbnRlcikKK2lubGluZSB2b2lkKiBIZWFwOjpmaW5kR0NPYmpl
Y3RQb2ludGVyKFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRC
bG9ja1NldCwgdm9pZCogcG9pbnRlcikKIHsKICAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0g
TWFya2VkQmxvY2s6OmJsb2NrRm9yKHBvaW50ZXIpOwogICAgIGlmIChmaWx0ZXIucnVsZU91dChi
aXR3aXNlX2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRh
dGUgfHwgIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KKyAgICAKKyAg
ICBpZiAoIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKGNhbmRpZGF0ZS0+Y2VsbEtpbmQoKSA9PSBIZWFw
Q2VsbDo6SlNDZWxsKSB7CisgICAgICAgIGlmICghTWFya2VkQmxvY2s6OmlzQXRvbUFsaWduZWQo
cG9pbnRlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgcG9pbnRlciA9IGNhbmRpZGF0ZS0+Y2VsbEFsaWduKHBvaW50ZXIpOworCisgICAgaWYgKCFj
YW5kaWRhdGUtPmlzTGl2ZUNlbGwocG9pbnRlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIHBvaW50ZXI7Cit9CiAKK2lubGluZSBib29sIEhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0SlNDZWxsKFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJr
ZWRCbG9ja1NldCwgY29uc3Qgdm9pZCogcG9pbnRlcikKK3sKKyAgICBNYXJrZWRCbG9jayogY2Fu
ZGlkYXRlID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKHBvaW50ZXIpOworICAgIGlmIChmaWx0ZXIu
cnVsZU91dChiaXR3aXNlX2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKKyAgICAgICAgQVNTRVJU
KCFjYW5kaWRhdGUgfHwgIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAogICAgIGlmICghTWFya2VkQmxv
Y2s6OmlzQXRvbUFsaWduZWQocG9pbnRlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNhbmRpZGF0ZS0+Y2VsbEtpbmQoKSAhPSBIZWFwQ2Vs
bDo6SlNDZWxsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWNhbmRpZGF0ZS0+
aXNMaXZlQ2VsbChwb2ludGVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNzgsNyAr
NDM1LDcgQEAgaW5saW5lIGJvb2wgSGVhcDo6aXNWYWx1ZUdDT2JqZWN0KFRpbnlCbAogewogICAg
IGlmICghdmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
aXNQb2ludGVyR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9p
ZCo+KHZhbHVlLmFzQ2VsbCgpKSk7CisgICAgcmV0dXJuIGlzUG9pbnRlckdDT2JqZWN0SlNDZWxs
KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIHN0YXRpY19jYXN0PHZvaWQqPih2YWx1ZS5hc0NlbGwo
KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmV0aXJlKE1hcmtlZEJs
b2NrCiAgICAgYmxvY2stPmRpZFJldGlyZUJsb2NrKGZyZWVMaXN0KTsKIH0KIAotaW5saW5lIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90IGJ5dGVzKQoraW5s
aW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0lt
cGwoc2l6ZV90IGJ5dGVzKQogewogICAgIGlmIChtX2N1cnJlbnRCbG9jaykgewogICAgICAgICBB
U1NFUlQobV9jdXJyZW50QmxvY2sgPT0gbV9uZXh0QmxvY2tUb1N3ZWVwKTsKQEAgLTEyMCwxMSAr
MTIwLDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeVBvcEZyZWUKICAgICBy
ZXR1cm4gaGVhZDsKIH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGUoc2l6ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZyhzaXplX3QgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKCFtX2hlYXAt
PmlzQnVzeSgpKTsKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEFsbG9jYXRp
b247Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVIZWxwZXIoYnl0ZXMpOworICAgIHZv
aWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJbXBsKGJ5dGVzKTsKIAog
ICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247CiAgICAgQVNT
RVJUKHJlc3VsdCB8fCAhbV9jdXJyZW50QmxvY2spOwpAQCAtMTQ4LDYgKzE0OCwxOCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAKIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCiB7CisgICAgYm9vbCBjcmFzaE9u
RmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGJ5dGVzLCBj
cmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVT
bG93Q2FzZShzaXplX3QgYnl0ZXMpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNl
OworICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChieXRlcywgY3Jhc2hPbkZhaWx1cmUp
OworfQorCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBsKHNpemVf
dCBieXRlcywgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBBU1NFUlQobV9oZWFwLT52bSgp
LT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBkb1Rlc3RDb2xsZWN0aW9u
c0lmTmVlZGVkKCk7CiAKQEAgLTE1NSwyOSArMTY3LDM0IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6YWxsb2NhdGVTbG93Q2FzZSgKICAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAg
bV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0LmJ5dGVzKTsKICAgICAKLSAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgCiAgICAgaWYgKExJS0VMWShyZXN1bHQg
IT0gMCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCiAgICAgaWYgKG1faGVhcC0+Y29s
bGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRl
KGJ5dGVzKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhi
eXRlcyk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIEFTU0VSVCghbV9oZWFwLT5zaG91bGRDb2xsZWN0KCkpOwogICAgIAotICAg
IE1hcmtlZEJsb2NrKiBibG9jayA9IGFsbG9jYXRlQmxvY2soYnl0ZXMpOwotICAgIEFTU0VSVChi
bG9jayk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9jayhieXRlcyk7
CisgICAgaWYgKCFibG9jaykgeworICAgICAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAgICAgYWRkQmxvY2soYmxvY2spOwogICAgICAg
ICAKLSAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgcmVzdWx0ID0gdHJ5QWxs
b2NhdGVXaXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGVCbG9jayhzaXplX3QgYnl0ZXMpCitNYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZUJsb2NrKHNpemVfdCBieXRlcykKIHsKICAgICBzaXplX3QgbWluQmxvY2tTaXplID0g
TWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKICAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplb2YoTWFy
a2VkQmxvY2spKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNp
emU+KGJ5dGVzKTsKQEAgLTE4Niw3ICsyMDMsNyBAQCBNYXJrZWRCbG9jayogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZUJsCiAKICAgICBzaXplX3QgY2VsbFNpemUgPSBtX2NlbGxTaXplID8gbV9j
ZWxsU2l6ZSA6IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+
KGJ5dGVzKTsKIAotICAgIHJldHVybiBNYXJrZWRCbG9jazo6Y3JlYXRlKCptX2hlYXAsIHRoaXMs
IGJsb2NrU2l6ZSwgY2VsbFNpemUsIG1fYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIE1hcmtlZEJs
b2NrOjp0cnlDcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxsU2l6ZSwgbV9hdHRy
aWJ1dGVzKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsb2Nr
KiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6
CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
aWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KICAgICB2b2lkKiBhbGxvY2F0ZShz
aXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgSGVhcCogaGVhcCgp
IHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE1hcmtlZEJsb2NrKiB0YWtlTGFzdEFjdGl2ZUJsb2Nr
KCkKICAgICB7CkBAIC03MSwxMCArNzIsMTIgQEAgcHVibGljOgogICAgCiBwcml2YXRlOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKLSAgICB2
b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlSGVscGVyKHNp
emVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZShz
aXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKHNpemVfdCwgYm9vbCBjcmFz
aE9uRmFpbHVyZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhzaXpl
X3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJbXBsKHNpemVfdCk7
CiAgICAgdm9pZCogdHJ5UG9wRnJlZUxpc3Qoc2l6ZV90KTsKLSAgICBNYXJrZWRCbG9jayogYWxs
b2NhdGVCbG9jayhzaXplX3QpOworICAgIE1hcmtlZEJsb2NrKiB0cnlBbGxvY2F0ZUJsb2NrKHNp
emVfdCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQo
KTsKICAgICB2b2lkIHJldGlyZShNYXJrZWRCbG9jayosIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCYp
OwogICAgIApAQCAtMTEzLDIxICsxMTYsMzUgQEAgaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9y
Ojppbml0KEhlYXAqIAogICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiB9CiAKK2lubGlu
ZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcykKK3sKKyAg
ICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CisgICAgaWYg
KFVOTElLRUxZKCFoZWFkKSkgeworICAgICAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNs
b3dDYXNlKGJ5dGVzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiAhQVNTRVJUX0RJU0FCTEVEKQor
ICAgICAgICAgICAgbWVtc2V0KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0Owor
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0
ZXMpOworICAgIHJldHVybiBoZWFkOworfQorCiBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBo
ZWFkID0gbV9mcmVlTGlzdC5oZWFkOwogICAgIGlmIChVTkxJS0VMWSghaGVhZCkpIHsKICAgICAg
ICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdGVTbG93Q2FzZShieXRlcyk7Ci0jaWZuZGVmIE5ERUJV
RwotICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBi
eXRlcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIG1fZnJlZUxp
c3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1lbXNldChoZWFkLCAw
eENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAg
bWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKICAgICByZXR1cm4gaGVhZDsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjAz
OTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgY29u
c3QgYm9vbCBjb21wdXRlQmFsYW5jZSA9IGZhbHNlOwogc3RhdGljIHNpemVfdCBiYWxhbmNlOwog
Ci1NYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwJiBoZWFwLCBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0
IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCitNYXJrZWRCbG9jayogTWFya2VkQmxv
Y2s6OnRyeUNyZWF0ZShIZWFwJiBoZWFwLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6
ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMm
IGF0dHJpYnV0ZXMpCiB7CiAgICAgaWYgKGNvbXB1dGVCYWxhbmNlKSB7CiAgICAgICAgIGJhbGFu
Y2UrKzsKICAgICAgICAgaWYgKCEoYmFsYW5jZSAlIDEwKSkKICAgICAgICAgICAgIGRhdGFMb2co
Ik1hcmtlZEJsb2NrIEJhbGFuY2U6ICIsIGJhbGFuY2UsICJcbiIpOwogICAgIH0KLSAgICBNYXJr
ZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGZhc3RBbGlnbmVkTWFsbG9jKGJsb2NrU2l6
ZSwgY2FwYWNpdHkpKSBNYXJrZWRCbG9jayhhbGxvY2F0b3IsIGNhcGFjaXR5LCBjZWxsU2l6ZSwg
YXR0cmlidXRlcyk7CisgICAgdm9pZCogYmxvY2tTcGFjZSA9IHRyeUZhc3RBbGlnbmVkTWFsbG9j
KGJsb2NrU2l6ZSwgY2FwYWNpdHkpOworICAgIGlmICghYmxvY2tTcGFjZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBibG9j
a1NwYWNlKSBNYXJrZWRCbG9jayhhbGxvY2F0b3IsIGNhcGFjaXR5LCBjZWxsU2l6ZSwgYXR0cmli
dXRlcyk7CiAgICAgaGVhcC5kaWRBbGxvY2F0ZUJsb2NrKGNhcGFjaXR5KTsKICAgICByZXR1cm4g
YmxvY2s7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJ
KHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMCArMTA5LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgbXV0YWJsZSBSZXR1cm5UeXBlIG1fY291bnQ7CiAgICAgICAgIH07CiAK
LSAgICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiBjcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRv
ciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJik7CisgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogdHJ5Q3JlYXRlKEhlYXAmLCBN
YXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3Qg
QWxsb2NhdG9yQXR0cmlidXRlcyYpOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEhlYXAm
LCBNYXJrZWRCbG9jayopOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzQXRvbUFsaWduZWQoY29u
c3Qgdm9pZCopOworICAgICAgICB2b2lkKiBjZWxsQWxpZ24odm9pZCopOwogICAgICAgICBzdGF0
aWMgTWFya2VkQmxvY2sqIGJsb2NrRm9yKGNvbnN0IHZvaWQqKTsKICAgICAgICAgc3RhdGljIHNp
emVfdCBmaXJzdEF0b20oKTsKICAgICAgICAgCkBAIC0yMzYsNiArMjM3LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICByZXR1cm4gIShyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYXRv
bUFsaWdubWVudE1hc2spOwogICAgIH0KIAorICAgIGlubGluZSB2b2lkKiBNYXJrZWRCbG9jazo6
Y2VsbEFsaWduKHZvaWQqIHApCisgICAgeworICAgICAgICBCaXRzIGJpdHMgPSByZWludGVycHJl
dF9jYXN0PEJpdHM+KHApOworICAgICAgICBiaXRzIC09IGJpdHMgJSBjZWxsU2l6ZSgpOworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYml0cyk7CisgICAgfQorCiAgICAg
aW5saW5lIE1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY29uc3Qgdm9pZCogcCkK
ICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE1hcmtlZEJsb2NrKj4ocmVp
bnRlcnByZXRfY2FzdDxCaXRzPihwKSAmIGJsb2NrTWFzayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYg
KzY4LDcgQEAgcHVibGljOgogICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90
KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9p
ZCogYWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGls
aWFyeShzaXplX3QpOwogCiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhEZXN0
cnVjdG9yKCkgeyByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2U7IH0KICAgICBTdWJzcGFjZSYgc3Vi
c3BhY2VGb3JPYmplY3RzV2l0aG91dERlc3RydWN0b3IoKSB7IHJldHVybiBtX25vcm1hbFNwYWNl
OyB9CkBAIC0xODIsNiArMTgzLDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2Nh
dGVBdXhpbGkKICAgICByZXR1cm4gYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0
ZShieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXhp
bGlhcnkoc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3Io
Ynl0ZXMpLnRyeUFsbG9jYXRlKGJ5dGVzKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+IGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKIHsKICAgICBmb3JFYWNoU3Vic3BhY2UoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTE4LDEwICsxMTgsNDIgQEAgdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2so
KQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZh
dGl2ZVJvb3RzKQogewotICAgIEpTQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9v
dHMoKTsKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsK
ICAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgYXBwZW5kKHJvb3RzW2ldKTsKKyAg
ICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0pOworfQorCit2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2VsbCogaGVhcENlbGwpCit7Cisg
ICAgaWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVCghbV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24pOworICAgIAorICAgIGlmIChIZWFwOjp0
ZXN0QW5kU2V0TWFya2VkKGhlYXBDZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE1h
cmtlZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihoZWFwQ2VsbCk7CisgICAg
c3dpdGNoIChibG9jay0+Y2VsbEtpbmQoKSkgeworICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbDog
eworICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxs
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghanNDZWxsLT5zdHJ1Y3R1cmUoKSkgeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3
R3JleSk7CisKKyAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soYmxvY2ssIGpzQ2VsbCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgSGVhcENlbGw6OkF1eGlsaWFy
eTogeworICAgICAgICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoYmxvY2spOworICAgICAgICByZXR1
cm47CisgICAgfSB9CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlIHZhbHVl
KQpAQCAtMTY4LDE3ICsyMDAsMzYgQEAgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBw
ZW5kVG9NYQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNl
bGwpCiB7CisgICAgYXBwZW5kVG9NYXJrU3RhY2soTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwp
LCBjZWxsKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soTWFya2Vk
QmxvY2sqIGJsb2NrLCBKU0NlbGwqIGNlbGwpCit7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2Vk
KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogCiAgICAgbV92aXNpdENv
dW50Kys7Ci0gICAgbV9ieXRlc1Zpc2l0ZWQgKz0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwp
LT5jZWxsU2l6ZSgpOworICAgIG1fYnl0ZXNWaXNpdGVkICs9IGJsb2NrLT5jZWxsU2l6ZSgpOwog
ICAgIG1fc3RhY2suYXBwZW5kKGNlbGwpOwogCiAgICAgaWYgKFVOTElLRUxZKG1faGVhcFNuYXBz
aG90QnVpbGRlcikpCiAgICAgICAgIG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBwZW5kTm9kZShj
ZWxsKTsKIH0KIAordm9pZCBTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBi
YXNlKQoreworICAgIGlmIChIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGJhc2UpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihiYXNlKSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6Om5vdGVMaXZlQXV4aWxpYXJ5Q2Vs
bChNYXJrZWRCbG9jayogYmxvY2spCit7CisgICAgbV92aXNpdENvdW50Kys7CisgICAgbV9ieXRl
c1Zpc2l0ZWQgKz0gYmxvY2stPmNlbGxTaXplKCk7Cit9CisKIGNsYXNzIFNldEN1cnJlbnRDZWxs
U2NvcGUgewogcHVibGljOgogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGNvbnN0IEpTQ2VsbCogY2VsbCkKQEAgLTIwMiw5ICsyNTMsOSBAQCBwcml2YXRlOgog
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwotCisgICAgCiAg
ICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKLQor
ICAgIAogICAgIG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nID0gY2VsbC0+
Y2VsbFN0YXRlKCk7CiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkQmxhY2sp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShy
ZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw4ICszNywxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRT
aGFyZWREYXRhOwogY2xhc3MgSGVhcDsKK2NsYXNzIEhlYXBDZWxsOwogY2xhc3MgSGVhcFNuYXBz
aG90QnVpbGRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEpJVFdyaXRlQmFycmllcjsK
K2NsYXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplcjsKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CiBjbGFzcyBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
OwpAQCAtMTA1LDYgKzEwNywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwor
ICAgIAorICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUg
c2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KKyAgICAvLyB0
aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgorICAgIHZvaWQg
bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKIAogICAgIHZvaWQgY29weUxhdGVyKEpT
Q2VsbCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCkBAIC0xMjQsMTAgKzEzMCwx
MyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKEpTVmFsdWUpOyAvLyBUaGlzIGlz
IHByaXZhdGUgdG8gZW5jb3VyYWdlIGNsaWVudHMgdG8gdXNlIFdyaXRlQmFycmllcjxUPi4KKyAg
ICB2b2lkIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKik7CiAgICAgdm9pZCBhcHBl
bmRIaWRkZW4oSlNWYWx1ZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1hcmtl
ZEFuZEFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3Rh
Y2soSlNDZWxsKik7CisgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jayosIEpT
Q2VsbCopOworICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKik7CiAg
ICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAg
dm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDkg
QEAKICNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNs
dWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0
cnVjdG9yLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRz
RXh0cmFjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDQgKzkxLDMgQEAgaW50IG1haW4oaW50LCBjaGFyKiopCiAgICAgcmV0dXJuIDA7
CiB9CiAKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzksNyArNjM5LDcgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CiAg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKDIpLmpzVmFsdWUoKTsKICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIFByb3BlcnR5U2xvdDo6UHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0KKyAgICAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigp
OwogICAgIExMSU5UX09QKDEpID0gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDkgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNb2R1bGVB
bmFseXplci5oIgogCi0jaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJK
U01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFZNOworCisv
LyBBbiBBdXhpbGlhcnkgYmFycmllciBpcyBhIGJhcnJpZXIgdGhhdCBkb2VzIG5vdCB0cnkgdG8g
cmVhc29uIGFib3V0IHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQgaW50bworLy8gaXQsIG90aGVyIHRo
YW4gaW50ZXJwcmV0aW5nIGEgZmFsc2lzaCB2YWx1ZSBhcyBub3QgbmVlZCBhIGJhcnJpZXIuIEl0
J3MgT0sgdG8gdXNlIHRoaXMgZm9yIGVpdGhlcgorLy8gSlNDZWxscyBvciBhbnkgb3RoZXIga2lu
ZCBvZiBkYXRhLCBzbyBsb25nIGFzIGl0IHJlc3BvbmRzIHRvIG9wZXJhdG9yISgpLgordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NsYXNzIEF1eGlsaWFyeUJhcnJpZXIgeworcHVibGljOgorICAgIEF1
eGlsaWFyeUJhcnJpZXIoKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg
IEF1eGlsaWFyeUJhcnJpZXIoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIHZvaWQgY2xl
YXIoKSB7IG1fdmFsdWUgPSBUKCk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
ICAgIHZvaWQgc2V0KFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICBjb25zdCBUJiBnZXQo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgCisgICAgVCogc2xvdCgpIHsgcmV0dXJu
ICZtX3ZhbHVlOyB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuICEhbV92YWx1ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAg
dm9pZCBzZXRXaXRob3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV92YWx1ZSA9IHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVCBtX3ZhbHVlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1
eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFU+CitBdXhpbGlhcnlC
YXJyaWVyPFQ+OjpBdXhpbGlhcnlCYXJyaWVyKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVSYmIHZh
bHVlKQoreworICAgIG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOworICAgIHZtLmhl
YXAud3JpdGVCYXJyaWVyKG93bmVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlPHR5cGVuYW1lIFU+Cit2b2lkIEF1eGlsaWFyeUJhcnJpZXI8VD46OnNldChWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFUmJiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEwICsz
Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKLSAgICB2b2lkKiB0ZW1w
OwogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAg
IFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIs
IHNpemUsICZ0ZW1wKSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSh0ZW1wLCBw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmhlYXAu
YWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgc2l6ZSk7CisgICAgQnV0dGVyZmx5KiBy
ZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTE5LDcgKzExOCw4IEBAIGlubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBw
cm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9w
ZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNp
dHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBpZiAoIXZtLmhl
YXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgJnRoZUJhc2UsIG9sZFNpemUs
IG5ld1NpemUpKQorICAgIHRoZUJhc2UgPSB2bS5oZWFwLnRyeVJlYWxsb2NhdGVBdXhpbGlhcnko
aW50ZW5kZWRPd25lciwgdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgaWYgKCF0aGVC
YXNlKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwg
cHJvcGVydHlDYXBhY2l0eSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbG9uZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDEyICs0OCwxNSBAQCBDbG9uZWRBcmd1bWVudHMqIENsb25lZEFyZ3VtZW50czo6
Y3JlYXRlCiAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksICZ0ZW1wKSkKKyAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1
eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpKTsKKyAgICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiAwOwogICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpOwogICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxl
bmd0aCk7CiAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKIAogICAgIENsb25lZEFyZ3Vt
ZW50cyogcmVzdWx0ID0KICAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8Q2xvbmVk
QXJndW1lbnRzPih2bS5oZWFwKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyICh0aGV0
YWxlY3JhZnRlckBnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsgU2Fr
c2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzMsOCArMzQsNyBAQAogI2luY2x1ZGUgIkludGxDb2xsYXRvckNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgot
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlu
bGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGlt
ZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERhdGVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsOCArMzQsNyBAQAogI2luY2x1ZGUgIkludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5o
IgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTEgKzM0LDggQEAKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0j
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgi
Ci0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwx
MiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIDAKKyNk
ZWZpbmUgTE9HSVQoKSBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6ICIsIFdURl9QUkVUVFlf
RlVOQ1RJT04sICJcbiIpOworI2Vsc2UKKyNkZWZpbmUgTE9HSVQoKSBkbyB7IH0gd2hpbGUoZmFs
c2UpCisjZW5kaWYKKwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpT
QXJyYXkpOwogCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZK
U05vbkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheSl9
OwpAQCAtNjEsNiArNjcsOCBAQCBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0
aW9uCiAKIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiBleGVjLCBi
b29sIHdyaXRhYmxlKQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgQVNTRVJUKGlzTGVuZ3Ro
V3JpdGFibGUoKSB8fCAhd3JpdGFibGUpOwogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8
IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CkBAIC0yMzgsMTEgKzI0NiwxMyBAQCB2b2lkIEpT
QXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyBy
b29tIGluIHRoZSB2ZWN0b3IsIGJ1dCBsZWF2ZXMgdGhlIG5ldyBzcGFjZSBmb3IgY291bnQgc2xv
dHMgdW5jbGVhcmVkLgogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdm0s
IGJvb2wgYWRkVG9Gcm9udCwgdW5zaWduZWQgY291bnQpCiB7CisgICAgTE9HSVQoKTsKKyAgICAK
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pOwogICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7CiAgICAgdW5zaWdu
ZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCk7
CiAgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lU2l6
ZSgpOwotCisgICAgCiAgICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMg
b24gdGhlIGZhc3QgcGF0aC4KICAgICBBU1NFUlQoIWFkZFRvRnJvbnQgfHwgY291bnQgPiBzdG9y
YWdlLT5tX2luZGV4Qmlhcyk7CiAKQEAgLTI1NCw3ICsyNjQsOCBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93
IGxhcmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4
IHJlcXVpcmVkVmVjdG9yTGVuZ3RoLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0g
bWluKG9sZFZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVp
cmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlv
bi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rv
ckxlbmd0aCkKQEAgLTI3MywxNSArMjg0LDE5IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UoVk0mIHYKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgdm9pZCog
bmV3QWxsb2NCYXNlID0gMDsKICAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHk7CisgICAg
Ym9vbCBhbGxvY2F0ZWROZXdTdG9yYWdlOwogICAgIC8vIElmIHRoZSBjdXJyZW50IHN0b3JhZ2Ug
YXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEpIHRoZW4ganVz
dCBrZWVwIHVzaW5nIGl0LgogICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgPiBkZXNpcmVkQ2FwYWNp
dHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50Q2FwYWNpdHksIHJlcXVpcmVkVmVj
dG9yTGVuZ3RoKSkgewogICAgICAgICBuZXdBbGxvY0Jhc2UgPSBidXR0ZXJmbHktPmJhc2Uoc3Ry
dWN0dXJlKHZtKSk7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0
eTsKKyAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFnZSA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlD
YXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOwot
ICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG5ld1NpemUsICZu
ZXdBbGxvY0Jhc2UpKQorICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5oZWFwLnRyeUFsbG9jYXRl
QXV4aWxpYXJ5KHRoaXMsIG5ld1NpemUpOworICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVz
aXJlZENhcGFjaXR5OworICAgICAgICBhbGxvY2F0ZWROZXdTdG9yYWdlID0gdHJ1ZTsKICAgICB9
CiAKICAgICAvLyBTdGVwIDM6CkBAIC0zMTEsMTMgKzMyNiwxOSBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgICAgIEFTU0VSVChjb3VudCArIHVzZWRWZWN0
b3JMZW5ndGggPD0gbmV3VmVjdG9yTGVuZ3RoKTsKICAgICAgICAgbWVtbW92ZShuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwg
c2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7CiAgICAgICAgIG1lbW1vdmUobmV3
QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9mKEpTVmFsdWUpICogcHJvcGVy
dHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigw
KSk7CisgICAgICAgIAorICAgICAgICBpZiAoYWxsb2NhdGVkTmV3U3RvcmFnZSkgeworICAgICAg
ICAgICAgLy8gV2Ugd2lsbCBzZXQgdGhlIHZlY3Rvckxlbmd0aCB0byBuZXdWZWN0b3JMZW5ndGgu
IFdlIHBvcHVsYXRlZCByZXF1aXJlZFZlY3Rvckxlbmd0aAorICAgICAgICAgICAgLy8gKHVzZWRW
ZWN0b3JMZW5ndGggKyBjb3VudCksIHdoaWNoIGlzIGxlc3MuIENsZWFyIHRoZSBkaWZmZXJlbmNl
LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkg
PCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOworICAgICAgICB9CiAgICAgfSBlbHNl
IGlmICgobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUodm0pKSkgfHwg
KG5ld0luZGV4QmlhcyAhPSBzdG9yYWdlLT5tX2luZGV4QmlhcykpIHsKICAgICAgICAgbWVtbW92
ZShuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBidXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBzaXplb2YoSlNWYWx1ZSkgKiBw
cm9wZXJ0eVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKICAgICAgICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3Rvciwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0b3JM
ZW5ndGgpOwotCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogbmV3VmVjdG9yID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSByZXF1aXJlZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0
aDsgaSsrKQotICAgICAgICAgICAgbmV3VmVjdG9yW2ldLmNsZWFyKCk7CisgICAgICAgICAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0K
IAogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdW
ZWN0b3JMZW5ndGgpOwpAQCAtMzI5LDggKzM1MCwxMCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRD
b3VudFNsb3dDYXNlKFZNJiB2CiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2Vw
dGlvbiwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7Ci0KKyAgICAKICAgICAvLyBJZiB0
aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91
bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgogICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxl
KCkgfHwgc3RvcmFnZS0+bV9zcGFyc2VNYXApOwogCkBAIC0zOTMsNiArNDE2LDggQEAgYm9vbCBK
U0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAogCiBib29sIEpTQXJyYXk6OmFwcGVu
ZE1lbWNweShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgdW5zaWduZWQgc3RhcnRJbmRleCwgSlND
OjpKU0FycmF5KiBvdGhlckFycmF5KQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgaWYgKCFj
YW5GYXN0Q29weSh2bSwgb3RoZXJBcnJheSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
NDMzLDYgKzQ1OCw4IEBAIGJvb2wgSlNBcnJheTo6YXBwZW5kTWVtY3B5KEV4ZWNTdGF0ZSogZXgK
IAogYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdM
ZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC00OTcsNiArNTI0LDggQEAg
Ym9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogCiBKU1ZhbHVlIEpTQXJy
YXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTU5NCw2ICs2MjMsOCBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBv
cChFeGVjU3RhdGUqIGV4ZWMpCiAvLyAgLSBwdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAy
XjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgogdm9p
ZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBM
T0dJVCgpOworICAgIAogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewpAQCAtNzMwLDYgKzc2MSw4
IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogSlNBcnJheSog
SlNBcnJheTo6ZmFzdFNsaWNlKEV4ZWNTdGF0ZSYgZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBhdXRvIGFycmF5VHlw
ZSA9IGluZGV4aW5nVHlwZSgpOwogICAgIHN3aXRjaCAoYXJyYXlUeXBlKSB7CiAgICAgY2FzZSBB
cnJheVdpdGhEb3VibGU6CkBAIC03NjAsNiArNzkzLDggQEAgSlNBcnJheSogSlNBcnJheTo6ZmFz
dFNsaWNlKEV4ZWNTdGF0ZSYgZQogCiBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYWdlKFZNJiB2bSwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5
U3RvcmFnZSogc3RvcmFnZSkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIHVuc2lnbmVkIG9s
ZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9
IG9sZExlbmd0aCk7CiAgICAgCkBAIC04NjUsNiArOTAwLDggQEAgYm9vbCBKU0FycmF5OjpzaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZQogCiBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55
SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50KQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA+IDApOwogCkBAIC05NjMsNiArMTAwMCw4IEBA
IGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdW5zaGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2suICAgIAog
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3Jh
Z2UtPmxlbmd0aCgpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoc3RhcnRJbmRleCA8PSBsZW5ndGgp
OwpAQCAtMTEwMCw2ICsxMTM5LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55
SW5kZXhpbgogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFy
a2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICB1bnNp
Z25lZCBpID0gMDsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CiAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3I7CkBAIC0xMTY2LDYgKzEyMDcsOCBAQCB2b2lkIEpTQXJyYXk6OmZpbGxB
cmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAKIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4
ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgdW5z
aWduZWQgaSA9IG9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKICAg
ICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xOTEsOCArMTkxLDggQEAgaW5saW5lIEJ1dHRlcmZs
eSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoVgogICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgMCwg
MCwgdHJ1ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCksCiAgICAg
ICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RPUl9MRU4pKTsKICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgIHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAg
IHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gMDsKICAgICByZXR1cm4gYnV0dGVyZmx5OwogfQpAQCAtMjE1LDEyICsyMTUsMTcgQEAg
aW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShWTSYgdm0sIAogICAgICAgICBpZiAoaGFz
RG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoCiAgICAgICAgICAgICBzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICAgICAg
ICAgICAgIHx8IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKTsKICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkodm0sIDAsIGlu
aXRpYWxMZW5ndGgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQkFTRV9WRUNU
T1JfTEVOOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcltpXS5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CkBAIC0yMzUsMzMgKzI0MCwzOSBAQCBpbmxpbmUg
SlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgdW5zaWduZWQgb3V0T2ZMaW5l
U3RvcmFnZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAogICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5OwotICAgIGlmIChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSkpIHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0g
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0
b3JhZ2UoaW5kZXhpbmdUeXBlKSkpIHsKICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFz
VW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJ
bnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91Ymxl
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3Vz
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKLQotICAgICAgICB2b2lkKiB0ZW1wOwotICAg
ICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBoYXNJbnQzMihpbmRl
eGluZ1R5cGUpCisgICAgICAgICAgICB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKQorICAgICAg
ICAgICAgfHwgaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUpKTsKKworICAgICAgICB2b2lkKiB0
ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIGlmICghdGVtcCkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAs
IDAsIG91dE9mTGluZVN0b3JhZ2UpOwogICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0
aCh2ZWN0b3JMZW5ndGgpOwogICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0
aWFsTGVuZ3RoKTsKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkgeworICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpIHsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsr
aSkKICAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBO
YU47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0
aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3Jh
Z2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlh
cnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1
ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAgICAgaWYgKCF0
ZW1wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CiAgICAgICAgICpi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRp
YWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFz
ID0gMDsKICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICAgICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzky
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAko
cmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxs
ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMyArMjcsOSBAQAogI2luY2x1ZGUgIkpTQ2FsbGVl
LmgiCiAKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNp
bmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxMCwyNSArNTEwLDE1IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGEKICAgICAvLyB1cC4gQnV0IGlmIHlvdSBkbyAqYW55dGhpbmcq
IHRvIHRyaWdnZXIgYSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25vdwogICAgIC8vIHRo
YXQgeW91ICpoYWQqIGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdpbGwgR0MgYXBwcm9w
cmlhdGVseS4KICAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KTsKKyAgICBW
TSYgdm0gPSAqaGVhcC0+dm0oKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAp
OwogICAgIAogICAgIEFTU0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7CiAK
LSAgICBzaXplX3Qgc2l6ZSA9IHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7Ci0gICAgCi0gICAgaWYg
KHRoaXNPYmplY3QtPm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQotICAgICAgICAmJiAhdGhpc09i
amVjdC0+YnV0dGVyZmx5KCkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7Ci0g
ICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Ci0gICAgICAgIC8vIFJldXNlIGFs
cmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9zc2libGUuCi0gICAgICAgIHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKAotICAgICAgICAgICAgYml0d2lz
ZV9jYXN0PEluZGV4aW5nSGVhZGVyKj4odGhpc09iamVjdC0+dmVjdG9yKCkpLT5idXR0ZXJmbHko
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmhh
c0luZGV4aW5nSGVhZGVyKCkpOwotICAgICAgICBWTSYgdm0gPSAqaGVhcC0+dm0oKTsKLSAgICAg
ICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzT2JqZWN0LCBCdXR0ZXJmbHk6
OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5idXR0ZXJm
bHkoKSwgdm0sIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLAotICAgICAgICAg
ICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAw
LCAwKSk7Ci0gICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGlu
Z0hlYWRlcigpKTsKKyAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXQodm0sIHRoaXNPYmpl
Y3QsIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKKyAgICAgICAgdGhpc09iamVj
dC0+YnV0dGVyZmx5KCksIHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwK
KyAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZh
bHNlLCAwLCAwKSk7CiAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMiArMjYsOSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAko
cmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE0ICsyNywxMCBAQAogI2lu
Y2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCiAKICNpbmNsdWRlICJFcnJvci5oIgot
I2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZVJl
Y29yZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTQg
KzI4LDEwIEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIK
LSNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIK
ICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgotI2luY2x1ZGUgIlNsb3RWaXNp
dG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTIgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKKyNpZiAwCisjZGVmaW5lIExPR0lUKCkgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMp
LCAiOiAiLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiXG4iKTsKKyNlbHNlCisjZGVmaW5lIExPR0lU
KCkgZG8geyB9IHdoaWxlKGZhbHNlKQorI2VuZGlmCisKIC8vIFdlIGtlZXAgdHJhY2sgb2YgdGhl
IHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiBXZSB1c2UgdGhpcwog
Ly8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4
dCBhcnJheSBmcm9tIHNpemUgMC4KIC8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25z
dGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGluCkBAIC04OCw3NyArOTQsNiBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZpc2l0b3Is
IEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCi17Ci0gICAgQVNTRVJU
KGJ1dHRlcmZseSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1
Y3R1cmUoKTsKLSAgICAKLSAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBzaXplX3QgcHJlQ2FwYWNpdHk7Ci0gICAgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOwotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIg
PSB0aGlzLT5oYXNJbmRleGluZ0hlYWRlcigpOwotICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGlu
Z0hlYWRlcikpIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyhzdHJ1Y3R1cmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByZUNhcGFjaXR5
ID0gMDsKLSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLSAg
ICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkoYnV0dGVyZmx5
LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSkpIHsKLSAgICAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdD
b2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRl
eGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotCi0gICAgICAgIC8vIENv
cHkgdGhlIHByb3BlcnRpZXMuCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0
ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgUHJvcGVydHlTdG9y
YWdlIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwotICAgICAg
ICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykKLSAgICAgICAgICAg
ICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKCgtLWN1cnJlbnRTb3Vy
Y2UpLT5nZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdI
ZWFkZXIpKSB7Ci0gICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0g
KmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gQ29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCi0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldDsKLSAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZTsKLSAgICAgICAgICAgIHNpemVfdCBj
b3VudDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5
cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgot
ICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
ICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9
IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBjdXJy
ZW50U291cmNlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gbmV3QnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCkpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY291bnQg
PSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IDA7Ci0gICAgICAg
ICAgICAgICAgY3VycmVudFNvdXJjZSA9IDA7Ci0gICAgICAgICAgICAgICAgY291bnQgPSAwOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtZW1j
cHkoY3VycmVudFRhcmdldCwgY3VycmVudFNvdXJjZSwgY291bnQgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0
aG91dEJhcnJpZXIobmV3QnV0dGVyZmx5KTsKLSAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRl
cmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRl
cyk7Ci0gICAgfSAKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChidXR0ZXJmbHkpOwpAQCAtMTc1LDEzICsxMTAs
MTYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICBw
cmVDYXBhY2l0eSA9IDA7CiAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsK
ICAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXpl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIAorICAgIEhlYXBDZWxsKiBiYXNlID0gYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4oYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5KSk7CiAKKyAgICBBU1NFUlQoSGVhcDo6aGVhcChiYXNlKSA9PSB2aXNpdG9yLmhlYXAo
KSk7CisKKyAgICAvLyBLZWVwIHRoZSBidXR0ZXJmbHkgYWxpdmUuCisgICAgdmlzaXRvci5tYXJr
QXV4aWxpYXJ5KGJhc2UpOworICAgIAogICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCiAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAt
IHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgdmlzaXRvci5jb3B5TGF0ZXIoCi0gICAg
ICAgIHRoaXMsIEJ1dHRlcmZseUNvcHlUb2tlbiwKLSAgICAgICAgYnV0dGVyZmx5LT5iYXNlKHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKICAgICAKICAg
ICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICBzd2l0Y2ggKHRoaXMtPmlu
ZGV4aW5nVHlwZSgpKSB7CkBAIC0yMjUsMTkgKzE2Myw2IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICNlbmRpZgogfQogCi12b2lkIEpTT2JqZWN0Ojpjb3B5QmFj
a2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0
b2tlbikKLXsKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNl
bGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LQotICAgIGlmICh0b2tlbiAhPSBCdXR0ZXJmbHlDb3B5VG9rZW4pCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5
LmdldCgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPmNvcHlCdXR0
ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lU2l6ZSgpKTsKLX0KLQogdm9pZCBKU09iamVjdDo6aGVhcFNuYXBzaG90KEpTQ2VsbCogY2Vs
bCwgSGVhcFNuYXBzaG90QnVpbGRlciYgYnVpbGRlcikKIHsKICAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtNzgwLDYgKzcwNSw3IEBAIHZvaWQg
SlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWMKIAogQnV0dGVyZmx5KiBKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoLCBz
aXplX3QgZWxlbWVudFNpemUpCiB7CisgICAgTE9HSVQoKTsKICAgICBBU1NFUlQobGVuZ3RoIDwg
TUFYX0FSUkFZX0lOREVYKTsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGluZGV4aW5nVHlw
ZSgpOwogICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9s
ZFR5cGUpKTsKQEAgLTgwNyw2ICs3MzMsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6
OmNyZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5n
dGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+Y29u
dGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQz
Mik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1
dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CkBA
IC04MjcsNiArNzU1LDggQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0
aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAgIHNl
dFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwog
ICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTgzNCw2ICs3NjQsNyBA
QCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAKIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogeworICAgIExPR0lUKCk7CiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJl
KHZtKTsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGluZGV4aW5nVHlwZSgpOwpAQCAtODQ5
LDYgKzc4MCw4IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAg
ICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgcmVzdWx0LT5tX251bVZhbHVlc0lu
VmVjdG9yID0gMDsKICAgICByZXN1bHQtPm1faW5kZXhCaWFzID0gMDsKKyAgICBmb3IgKHNpemVf
dCBpID0gdmVjdG9yTGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPm1fdmVjdG9yW2ldLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHN0
cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAgICBzZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtODYyLDYgKzc5NSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsQXJyCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRV
bmRlY2lkZWRUb0ludDMyKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4
aW5nVHlwZSgpKSk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGkt
LTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcihKU1ZhbHVlKCkpOworCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uOjpBbGxvY2F0ZUludDMyKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5j
b250aWd1b3VzSW50MzIoKTsKIH0KQEAgLTg4MSw2ICs4MTksMTEgQEAgQ29udGlndW91c0RvdWJs
ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlYwogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpj
b252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5k
ZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3Bl
cnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LmdldCgpLT5jb250aWd1b3VzKCk7CiB9CkBAIC05MTcsNyArODYwLDkgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogCiAgICAgdW5zaWduZWQgdmVjdG9yTGVu
Z3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5n
RWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1l
bnRzLgorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVl
KCkpOwogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwogICAgIHNl
dFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJm
bHkoKSk7CkBAIC05MzgsMTEgKzg4MywxMiBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6
Y29udmVydEludDMyCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudCA9ICZi
dXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldOwogICAgICAgICBkb3VibGUqIGN1cnJlbnRB
c0RvdWJsZSA9IGJpdHdpc2VfY2FzdDxkb3VibGUqPihjdXJyZW50KTsKICAgICAgICAgSlNWYWx1
ZSB2ID0gY3VycmVudC0+Z2V0KCk7Ci0gICAgICAgIGlmICghdikgeworICAgICAgICAvLyBOT1RF
OiBTaW5jZSB0aGlzIG1heSBiZSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgdiBjb3VsZCBi
ZSBnYXJiYWdlLiBJZiBpdCdzIGdhcmJhZ2UsCisgICAgICAgIC8vIHRoYXQgbWVhbnMgaXQgd2ls
bCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyAgICAgICAgaWYgKCF2LmlzSW50MzIoKSkgewogICAg
ICAgICAgICAgKmN1cnJlbnRBc0RvdWJsZSA9IFBOYU47CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQotICAgICAgICBBU1NFUlQodi5pc0ludDMyKCkpOwogICAgICAgICAqY3VycmVu
dEFzRG91YmxlID0gdi5hc0ludDMyKCk7CiAgICAgfQogICAgIApAQCAtOTY2LDEzICs5MTIsMTEg
QEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcgogICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBB
cnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VX
aXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAg
ICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Cisg
ICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7
CisgICAgICAgIGlmICh2KQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5t
X3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEwMTQsMTMgKzk1OCwxMSBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
ID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSog
bmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5n
RWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZl
Y3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAg
ICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNW
YWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgbmV3U3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpCiAgICAg
ICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1w
dHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24p
OwpAQCAtMTA0MSwxMyArOTgzLDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRD
b250aWd1b3UKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0
Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVu
Z3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKysp
IHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAg
ICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAg
ICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBpZiAodikKICAgICAgICAgICAgIG5ld1N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9
CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0yNzI5LDYg
KzI2NjksNyBAQCB1bnNpZ25lZCBKU09iamVjdDo6Y291bnRFbGVtZW50cygpCiAKIGJvb2wgSlNP
YmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiB2bSwgdW5zaWduZWQgbmV3TGVuZ3RoKQog
eworICAgIExPR0lUKCk7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGlu
IGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1v
dmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKICAgICAvLyB0byB0aGUgdmVjdG9y
LiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBp
dCBtb3JlIGVmZmljaWVudGx5LgogICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKQpAQCAtMjc1NCw2ICsyNjk1LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rv
ckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICAg
ICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytp
KQorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Y2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9y
TGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0yNzY4LDYgKzI3MTEsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChW
TSYgCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5l
d1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9y
TGVuZ3RoOyArK2kpCisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVj
dG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0aG91
dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwpAQCAtMjc3Niw2ICsyNzIxLDcg
QEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogCiBib29sIEpTT2Jq
ZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIExP
R0lUKCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAg
ICAKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKQEAgLTI3OTksOCArMjc0
NSwxMiBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAKICAgICBp
ZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47CisgICAgICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVj
dG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5j
bGVhcigpOwogICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yODIxLDYgKzI3NzEs
NyBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAKIEJ1dHRlcmZs
eSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKQogeworICAgIExPR0lUKCk7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBv
bGRTaXplKTsKIAogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3Qg
cmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MSArMjYsMTEgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQXJyYXlDb252ZW50
aW9ucy5oIgogI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJh
cnJpZXIuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
ICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgot
I2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgi
CiAjaW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTEwMyw3ICsxMDMs
NiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGlt
YXRlZFNpemUoSlNDZWxsKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5
VG9rZW4pOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGhlYXBTbmFwc2hvdChK
U0NlbGwqLCBIZWFwU25hcHNob3RCdWlsZGVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtNzk3LDcgKzc5Niw2
IEBAIHByb3RlY3RlZDoKICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSog
PSAwKTsKICAgICAgICAgCiAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1
dHRlcmZseSosIFN0cnVjdHVyZSopOwotICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRv
ciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBDYWxsIHRoaXMg
aWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJy
YXkKICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTk0OSw3
ICs5NDcsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSog
ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29weUJhcnJp
ZXI8QnV0dGVyZmx5PiBtX2J1dHRlcmZseTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPEJ1dHRlcmZs
eSo+IG1fYnV0dGVyZmx5OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVp
bnQzMl90IG1fcGFkZGluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOCwgMjAwOSwgMjAxMi0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAwNiwgMjAwOCwgMjAwOSwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9y
ZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBKU09iamVjdElubGlu
ZXNfaAogI2RlZmluZSBKU09iamVjdElubGluZXNfaAogCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFy
cmllcklubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTG9va3VwLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCw5
IEBACiAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgotI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5
LDExIEBACiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNp
bmNsdWRlICJKU0NCdWlsdGlucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJNaWNyb3Rhc2suaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMyArMjYsOSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKIAot
I2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRp
b25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1
ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lv
biAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNTdHJpbmdJdGVyYXRvci5oIgog
CiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJl
Z2lzdHJ5S2V5LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDkg
KzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0
cnlLZXkuaCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlND
ZWxsSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRl
ICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJKU0Nl
bGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9u
cy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAz
OTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTAgQEAKICNpbmNsdWRlICJFcnJvci5oIgog
I2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5o
IgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiTWFwUHJvdG90eXBlLmgiCi0jaW5jbHVk
ZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTEgQEAKICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JP
cGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJK
U0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U01hcC5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMb29rdXAuaCIK
ICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKIAogI2luY2x1ZGUgIk1hcFByb3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNsdWRlICJFcnJv
ci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiUHJveHlPYmplY3QuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRl
ICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAyMDM5
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkq
IHRyeUNyZWF0ZVVuaW5pdGlhCiAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdm9pZCogdGVtcDsKLSAgICBp
ZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgdm9p
ZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYgKCF0ZW1wKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAg
ICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2Zp
bGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNQb2ludGVyR0NPYmpl
Y3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgZXhlY3V0YWJsZSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoSGVhcDo6aXNQb2ludGVyR0NPYmplY3RKU0NlbGwoZmlsdGVyLCBtYXJrZWRC
bG9ja1NldCwgZXhlY3V0YWJsZSkpOwogICAgICAgICAgICAgc3RhY2tGcmFtZS5mcmFtZVR5cGUg
PSBGcmFtZVR5cGU6OkV4ZWN1dGFibGU7CiAgICAgICAgICAgICBzdGFja0ZyYW1lLmV4ZWN1dGFi
bGUgPSBleGVjdXRhYmxlOwogICAgICAgICAgICAgbV9saXZlQ2VsbFBvaW50ZXJzLmFkZChleGVj
dXRhYmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5
LDExIEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNp
bmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1
ZGUgIk1hcERhdGEuaCIKICNpbmNsdWRlICJTZXRQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDEzICszMSwxMSBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMu
aCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlv
bnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTRnVuY3Rp
b25JbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2V0Lmgi
CiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1
ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiAj
aW5jbHVkZSAiU2V0UHJvdG90eXBlLmx1dC5oIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTEgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkVycm9y
LmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFw
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBQcm90
b3R5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzky
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCwxMSArMjgsOSBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIK
ICNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldFByb3RvdHlw
ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvYXJyYXktc3RvcmFnZS1hcnJheS11bnNoaWZ0LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktc3RvcmFnZS1hcnJheS11bnNo
aWZ0LmpzCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvYXJyYXktc3RvcmFnZS1hcnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOCBAQAorLy9AIHJ1bkRlZmF1bHQKK3ZhciB4ID0gWzIuNSwgMS41XTsKK3gubGVuZ3RoID0g
MTAwMDAwMDAwMDsKK3gubGVuZ3RoID0gMjsKK0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwo
eCwgMy41KTsKK2lmICh4LnRvU3RyaW5nKCkgIT0gIjMuNSwyLjUsMS41IikKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNjcmliZSh4KTsKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFy
cmF5LXVuc2hpZnQuanMJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2IEBACisvL0AgcnVuRGVmYXVsdAordmFyIHggPSBbJ2InLCAnYSddOworQXJyYXku
cHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAnYycpOworaWYgKHgudG9TdHJpbmcoKSAhPSAiYyxi
LGEiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIGRlc2NyaWJlKHgpOworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1hcnJheS11bnNo
aWZ0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
ZG91YmxlLWFycmF5LXVuc2hpZnQuanMJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYgQEAKKy8vQCBydW5EZWZhdWx0Cit2YXIgeCA9IFsyLjUsIDEuNV07CitB
cnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKHgsIDMuNSk7CitpZiAoeC50b1N0cmluZygpICE9
ICIzLjUsMi41LDEuNSIpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZGVzY3Jp
YmUoeCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW50MzIt
YXJyYXktdW5zaGlmdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanMJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbnQzMi1hcnJheS11bnNoaWZ0LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorLy9AIHJ1bkRlZmF1bHQKK3ZhciB4ID0gWzIsIDFd
OworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAzKTsKK2lmICh4LnRvU3RyaW5nKCkg
IT0gIjMsMiwxIikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNjcmliZSh4
KTsKKwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDctMjkgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxsb2Nh
dGVkIGluIEF1eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoZSBK
U0MgR0MgbmVlZHMgYSB0cnlGYXN0QWxpZ25lZE1hbGxvYygpLCBhbmQgdGhpcyBleHBvc2VzIHN1
Y2ggYSBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAgICAgICAg
KFdURjo6ZmFzdEFsaWduZWRNYWxsb2MpOgorICAgICAgICAoV1RGOjp0cnlGYXN0QWxpZ25lZE1h
bGxvYyk6CisgICAgICAgIChXVEY6OmZhc3RBbGlnbmVkRnJlZSk6CisgICAgICAgICogd3RmL0Zh
c3RNYWxsb2MuaDoKKwogMjAxNi0wNy0yOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgTWFrZSBTdHJpbmdWaWV3IGNhcGFibGUgb2YgYmVpbmcgcGFzc2VkIG9yIHJl
dHVybmVkIGluIG9ubHkgMiByZWdpc3RlcnMuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFs
bG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkocmV2
aXNpb24gMjAzOTIwKQorKysgU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw2IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUt
MjAwOSwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0
OgpAQCAtOTcsNiArOTYsMTEgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdu
bWVudAogICAgIHJldHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKIH0KIAor
dm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
IAoreworICAgIHJldHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKK30KKwog
dm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgX2FsaWduZWRfZnJlZShwKTsK
QEAgLTExMSw2ICsxMTUsMTMgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdu
bWVudAogICAgIHJldHVybiBwOwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgdm9pZCogcCA9IG51bGxwdHI7Cisg
ICAgcG9zaXhfbWVtYWxpZ24oJnAsIGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7Cit9
CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIGZyZWUocCk7CkBAIC0y
MzEsNiArMjQyLDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQK
ICAgICByZXR1cm4gYm1hbGxvYzo6YXBpOjptZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOwogfQog
Cit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkgCit7CisgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBz
aXplKTsKK30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgYm1hbGxv
Yzo6YXBpOjpmcmVlKHApOwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjAzOTIwKQor
KysgU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNTMsNiArNTMsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0RnJlZSh2b2lkKik7
CiAKIC8vIEFsbG9jYXRpb25zIGZyb20gZmFzdEFsaWduZWRNYWxsb2MoKSBtdXN0IGJlIGZyZWVk
IHVzaW5nIGZhc3RBbGlnbmVkRnJlZSgpLgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIGZhc3RB
bGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsK
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKik7CiAKIFdURl9F
WFBPUlRfUFJJVkFURSBzaXplX3QgZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCopOwpAQCAtMTA3
LDYgKzEwOCw3IEBAIHVzaW5nIFdURjo6ZmFzdE1hbGxvY1NpemU7CiB1c2luZyBXVEY6OmZhc3RS
ZWFsbG9jOwogdXNpbmcgV1RGOjpmYXN0U3RyRHVwOwogdXNpbmcgV1RGOjpmYXN0WmVyb2VkTWFs
bG9jOwordXNpbmcgV1RGOjp0cnlGYXN0QWxpZ25lZE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFz
dENhbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdFpl
cm9lZE1hbGxvYzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzkyNykKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA3
LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQnV0dGVyZmxp
ZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBpbiBBdXhpbGlhcnkgTWFya2VkU3BhY2UgaW5zdGVhZCBv
ZiBDb3BpZWRTcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYwMTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBOZWVkIHRvICNpbmNsdWRlIG1vcmUgdGhpbmdzIG5vdy4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKwogMjAxNi0w
Ny0yOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCB3
aXRoIGFuIEludmFsaWQgV2ViIFByb2Nlc3MgSVBDIE1lc3NhZ2UgSUQ6IFdlYlBhZ2VQcm94eS5B
dHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjawpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiTlBKU09iamVjdC5oIgogI2luY2x1ZGUgIk5QUnVudGltZU9iamVjdE1h
cC5oIgogI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvRXJyb3IuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVySW5saW5lcy5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0Lmg+CkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQg
aW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhlIEpTQyBH
QyBuZWVkcyB0byBiZSBhYmxlIHRvIHRyeU1lbWFsaWduLCBhbmQgdGhpcyByZWZhY3RvcnMgdGhl
IGNvZGUgdG8gZXhwb3NlIHN1Y2ggYQorICAgICAgICBmdW5jdGlvbi4KKworICAgICAgICAqIGJt
YWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2Nh
dGUpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAgICAg
IChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbCk6CisgICAgICAgIChibWFsbG9jOjpB
bGxvY2F0b3I6OnJlYWxsb2NhdGUpOgorICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmg6Cisg
ICAgICAgICogYm1hbGxvYy9DYWNoZS5oOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OmFsbG9j
YXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgICog
Ym1hbGxvYy9ibWFsbG9jLmg6CisgICAgICAgIChibWFsbG9jOjphcGk6Om1hbGxvYyk6CisgICAg
ICAgIChibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKToKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6
bWVtYWxpZ24pOgorCiAyMDE2LTA3LTEzICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5j
b20+CiAKICAgICAgICAgVXBkYXRlIHN1cHBvcnRlZCBwbGF0Zm9ybXMgaW4geGNjb25maWcgZmls
ZXMgdG8gbWF0Y2ggdGhlIHNkayBuYW1lcy4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9j
YXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxs
b2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw2ICs2NCwxOCBAQCB2b2lkKiBBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBzaXplCiAKIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2Nh
dGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CisgICAgYm9vbCBjcmFzaE9uRmFp
bHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbChhbGlnbm1lbnQsIHNpemUsIGNy
YXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFs
c2U7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbChhbGlnbm1lbnQsIHNpemUsIGNyYXNoT25GYWls
dXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUltcGwoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit7CiAgICAgQkFTU0VSVChpc1Bv
d2VyT2ZUd28oYWxpZ25tZW50KSk7CiAKICAgICBpZiAoIW1faXNCbWFsbG9jRW5hYmxlZCkgewpA
QCAtODAsNyArOTIsMTAgQEAgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxpZ25t
ZQogICAgICAgICByZXR1cm4gYWxsb2NhdGUocm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQs
IHNpemUpKTsKIAogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9j
ZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFz
dENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgIEhlYXAq
IGhlYXAgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlmIChjcmFzaE9u
RmFpbHVyZSkKKyAgICAgICAgcmV0dXJuIGhlYXAtPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25t
ZW50LCBzaXplKTsKKyAgICByZXR1cm4gaGVhcC0+dHJ5QWxsb2NhdGVMYXJnZShsb2NrLCBhbGln
bm1lbnQsIHNpemUpOwogfQogCiB2b2lkKiBBbGxvY2F0b3I6OnJlYWxsb2NhdGUodm9pZCogb2Jq
ZWN0LCBzaXplX3QgbmV3U2l6ZSkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAko
cmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQqIHRyeUFs
bG9jYXRlKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkKiB0
cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRl
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiwg
c2l6ZV90KTsKIAogICAgIHZvaWQgc2NhdmVuZ2UoKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkKiBh
bGxvY2F0ZUltcGwoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJl
KTsKKyAgICAKICAgICBib29sIGFsbG9jYXRlRmFzdENhc2Uoc2l6ZV90LCB2b2lkKiYpOwogICAg
IHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKICAgICAKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0NhY2hlLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2Fj
aGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6
ZV90KTsKKyAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6
ZV90KTsKICAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
KTsKICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCog
cmVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90KTsKQEAgLTc5LDYgKzgwLDE0IEBAIGlubGluZSB2b2lk
KiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUKICAgICByZXR1cm4gY2FjaGUtPmFsbG9jYXRv
cigpLmFsbG9jYXRlKHNpemUpOwogfQogCitpbmxpbmUgdm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRl
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIENhY2hlKiBjYWNoZSA9IFBl
clRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAg
cmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoYWxpZ25tZW50LCBzaXplKTsKKyAgICBy
ZXR1cm4gY2FjaGUtPmFsbG9jYXRvcigpLnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Cit9
CisKIGlubGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpCiB7CiAgICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hlPjo6Z2V0RmFzdENh
c2UoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCShyZXZpc2lvbiAyMDM5MjApCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
Myw2ICs0MywxMiBAQCBpbmxpbmUgdm9pZCogbWFsbG9jKHNpemVfdCBzaXplKQogICAgIHJldHVy
biBDYWNoZTo6YWxsb2NhdGUoc2l6ZSk7CiB9CiAKKy8vIFJldHVybnMgbnVsbCBvbiBmYWlsdXJl
LgoraW5saW5lIHZvaWQqIHRyeU1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQoreworICAgIHJldHVybiBDYWNoZTo6dHJ5QWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKK30K
KwogLy8gQ3Jhc2hlcyBvbiBmYWlsdXJlLgogaW5saW5lIHZvaWQqIG1lbWFsaWduKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284951</attachid>
            <date>2016-07-30 12:27:19 -0700</date>
            <delta_ts>2016-07-30 17:53:14 -0700</delta_ts>
            <desc>fixed the deltablue bug</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>161465</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNl
IGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFrZSB0aGUgR0MgY29uY3VycmVu
dCAoYnVnIDE0OTQzMiksIHdlIHdvdWxkIGVpdGhlciBuZWVkIHRvIGVuYWJsZSBjb25jdXJyZW50
CisgICAgICAgIGNvcHlpbmcgb3Igd2Ugd291bGQgbmVlZCB0byBub3QgY29weS4gQ29uY3VycmVu
dCBjb3B5aW5nIGNhcnJpZXMgYSAxLTIlIHRocm91Z2hwdXQgb3ZlcmhlYWQKKyAgICAgICAgZnJv
bSB0aGUgYmFycmllcnMgYWxvbmUuIENvbnNpZGVyaW5nIHRoYXQgTWFya2VkU3BhY2UgZG9lcyBh
IGRlY2VudCBqb2Igb2YgYXZvaWRpbmcKKyAgICAgICAgZnJhZ21lbnRhdGlvbiwgaXQncyB1bmxp
a2VseSB0aGF0IGl0J3Mgd29ydGggcGF5aW5nIDEtMiUgdGhyb3VnaHB1dCBmb3IgY29weWluZy4g
U28sIHdlIHdhbnQKKyAgICAgICAgdG8gZ2V0IHJpZCBvZiBjb3BpZWQgc3BhY2UuIFRoaXMgY2hh
bmdlIG1vdmVzIGNvcGllZCBzcGFjZSdzIGJpZ2dlc3QgY2xpZW50IG92ZXIgdG8gbWFya2VkCisg
ICAgICAgIHNwYWNlLgorICAgICAgICAKKyAgICAgICAgTW92aW5nIGJ1dHRlcmZsaWVzIHRvIG1h
cmtlZCBzcGFjZSBtZWFucyBoYXZpbmcgdGhlbSB1c2UgdGhlIG5ldyBBdXhpbGlhcnkgSGVhcENl
bGwKKyAgICAgICAgYWxsb2NhdGlvbiBwYXRoLiBUaGlzIGlzIGEgZmFpcmx5IG1lY2hhbmljYWwg
Y2hhbmdlLiBBdCBhIGhpZ2ggbGV2ZWwgdGhpcyBkb2VzIHRoZXNlIHRoaW5nczoKKyAgICAgICAg
CisgICAgICAgIC0gV2UgdXNlIEF1eGlsaWFyeUJhcnJpZXIgaW5zdGVhZCBvZiBDb3B5QmFycmll
ci4KKyAgICAgICAgCisgICAgICAgIC0gV2UgdXNlIHRyeUFsbG9jYXRlQXV4aWxpYXJ5IGluc3Rl
YWQgb2YgdHJ5QWxsb2NhdGVTdG9yYWdlLiBJIGdvdCByaWQgb2YgdGhlIHNpbGx5CisgICAgICAg
ICAgQ2hlY2tlZEJvb2xlYW4gc3R1ZmYsIHNpbmNlIGl0J3Mgc28gbXVjaCBtb3JlIHRyb3VibGUg
dGhhbiBpdCdzIHdvcnRoLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgSklUcyBoYXZlIHRvIGVt
aXQgaW5saW5lZCBtYXJrZWQgc3BhY2UgYWxsb2NhdGlvbnMgaW5zdGVhZCBvZiBpbmxpbmUgY29w
eSBzcGFjZQorICAgICAgICAgIGFsbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgLSBFdmVy
eW9uZSBoYXMgdG8gZ2V0IHVzZWQgdG8gemVyb2luZyB0aGVpciBidXR0ZXJmbGllcyBhZnRlciBh
bGxvY2F0aW9uIGluc3RlYWQgb2YgcmVseWluZworICAgICAgICAgIG9uIHRoZW0gYmVpbmcgcHJl
LXplcm9lZCBieSB0aGUgR0MuIENvcGllZCBzcGFjZSB3b3VsZCB6ZXJvIHRoaW5ncyBmb3IgeW91
LCB3aGlsZSBtYXJrZWQKKyAgICAgICAgICBzcGFjZSBkb2Vzbid0LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIEl0IHN0aWxsIGZhaWxzIHNvbWUg
aW50ZXJuYWwgZnV6emluZyB0ZXN0cyBhbmQgSSBoYXZlbid0CisgICAgICAgIG1lYXN1cmVkIHBl
cmZvcm1hbmNlIHlldC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5l
d09iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmluaXRpYWxp
emVBcnJheUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0UmlnaHRTaGlmdFNuaXBwZXQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZUhlYXBDZWxsKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVPYmplY3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0b3JGb3JTaXplKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVKU0FycmF5KToKKyAg
ICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkNvbnNlcnZh
dGl2ZVJvb3RzOjpncm93KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAg
ICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6OnJvb3RzKToKKyAgICAgICAgKiBoZWFwL0NvcHlUb2tlbi5oOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0
b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9yYWdlQWxsb2NhdG9y
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Omlz
Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxs
b2NhdGVPYmplY3RPZlR5cGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdWJzcGFjZUZvck9iamVj
dE9mVHlwZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZSk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkRnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZmluZEdDT2JqZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNWYWx1ZUdDT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNQb2ludGVyR0NPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
OjpyZXRpcmUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlQ
b3BGcmVlTGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZUltcGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2sp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxLaW5kKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpoZWFwKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0YWtlTGFzdEFjdGl2ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6dHJ5
Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNBdG9tQWxpZ25lZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjZWxsQWxpZ24pOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tGb3IpOgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0
c1dpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9y
T2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnRyeUFsbG9jYXRl
QXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhp
bGlhcnkpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeSk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwpOgorICAgICAgICAoSlNDOjpTZXRD
dXJyZW50Q2VsbFNjb3BlOjpTZXRDdXJyZW50Q2VsbFNjb3BlKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KiBsbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0F1eGls
aWFyeUJhcnJpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OkF1
eGlsaWFyeUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkF1
eGlsaWFyeUJhcnJpZXI6OnNsb3QpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6c2V0V2l0aG91
dEJhcnJpZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQpOgorICAgICAgICAq
IHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJp
Z2h0KToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6
CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmNyZWF0
ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVu
dGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NhbGxlZS5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRp
Z3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29weUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFj
a2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
bWlzZS5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanM6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorCiAyMDE2LTA3LTI5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIEJ5VmFsSW5mbyBpcyBvbmx5IHVzZWQgaW4gSklUIGVuYWJs
ZWQgZW52aXJvbm1lbnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsOCBAQAog
CQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE0MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9OwogCQkwRjM4QjAxOTE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwICovOyB9OwogCQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYz
OEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5
MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmNwcCAqLzsgfTsKIAkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM5MkM4ODFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCAq
LzsgfTsKIAkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi87
IH07CkBAIC01NzIsNiArNTc0LDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJl
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3
QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTND
ODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUy
MzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQURFNjczMUQ0RDIzQkUwMDc2
ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi87IH07CiAJ
CTBGQUY3RUZEMTY1QkE5MUIwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVCQTkxOTAw
MEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZF
IC8qIEV4aXRLaW5kLmNwcCAqLzsgfTsKQEAgLTI1MTgsNiArMjUyMSw4IEBACiAJCTBGMzhCMDE0
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5oOyBwYXRoID0gZGZnL0RGR0NvbXBp
bGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDE1MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdD
b21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAx
NjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5oOyBwYXRoID0gZGZnL0RGR0Nv
bXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM4RDJBMDFE
NDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVySW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM5MkM4NzFCNDYxODg0MDA4
NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRGdXp6LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOTJDODgxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEZ1enouaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzY1LDYgKzI3NzAsNyBA
QAogCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdB
OEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBREU2NzIxRDREMjNCQzAwNzY4
NDU3IC8qIEhlYXBVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBV
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQUY3RUZBMTY1QkE5MTkwMDBD
ODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4aXRLaW5kLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNDYsNiArNTI1Miw3IEBACiAJCQkJQzI0RDMx
RTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi8sCiAJCQkJQzJFNTI2QkIx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCiAJCQkJQzJFNTI2QkMxNTkwRUYw
MDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAorCQkJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFw
VmVyaWZpZXIuY3BwICovLAogCQkJCUZFN0JBNjBFMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVy
aWZpZXIuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxT
d2VlcGVyLmNwcCAqLywKQEAgLTU2MDcsNiArNTYxNCw4IEBACiAJCQkJRjY5MkE4NEQwMjU1NTk3
RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg0RTAyNTU1OTdE
MDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuaCAqLywKIAkJCQkwRkI3RjM4QTE1RUQ4RTM4MDBG
MTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8sCisJCQkJMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5
IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCAqLywKKwkJCQkwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkg
LyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLywKIAkJCQk1MjY3OEY4QzFBMDMxMDA5MDA2
QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmNwcCAqLywKIAkJCQk1MjY3OEY4RDFBMDMxMDA5
MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggKi8sCiAJCQkJMTQ3QjgzQUEwRTZEQjhD
OTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi8sCkBAIC01NzcyLDcg
KzU3ODEsNiBAQAogCQkJCTcwREMzRTA4MUIyREYyQzcwMDA1NDI5OSAvKiBJdGVyYXRvclByb3Rv
dHlwZS5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAq
LywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAotCQkJCTUz
OUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovLAogCQkJCTBGMkI2
NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKIAkJCQkwRjJCNjZC
NTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAogCQkJCTBGMkI2NkI2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLApAQCAtNTc4
Miw2ICs1NzkwLDcgQEAKIAkJCQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwICovLAogCQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oICovLAogCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlld0lubGluZXMuaCAqLywKKwkJCQk1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyog
SlNBcnJheUlubGluZXMuaCAqLywKIAkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2Fs
bGVlLmNwcCAqLywKQEAgLTcyNjEsNiArNzI3MCw3IEBACiAJCQkJMEYzMzhFMUMxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5
NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJCMUJEMTdGQTQwMDFB
QTQxMyAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKIAkJCQkyQTExMTI0NjE5MkZDRTc5MDA1
RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTc2OTMsNiAr
NzcwMyw3IEBACiAJCQkJQTE1ODdENkUxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZv
cm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMEYxQzAzMEQ2QzAwMzhCQkNBIC8qIFNu
aXBwZXRPcGVyYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3MDFCNERDMTQxMDBENjk4
NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE1ODdENzUxQjREQzFDNjAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzOThGQUIxQzc1MERBNDAwNjBBOTYzIC8q
IEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzIxQjREQzE0MTAwRDY5
ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03
ODE1LDYgKzc4MjYsNyBAQAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdD
QkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0
MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjA2LDM0ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAg
Q29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2Nh
dG9yKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
LSAgICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yID0gdm0uaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5l
bWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0
aCk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcg
KGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5i
cmFuY2hTdWJQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpT
aWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVn
UHRyKHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1Zh
bHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0g
b2xkIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxh
YmxlCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8
IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1Miw3ICs4NTIsNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
V2l0CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkFycmF5
IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpKSk7CiAKICAg
ICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVyZSwg
c2l6ZSk7Ci0gICAgcmVzdWx0LT5idXR0ZXJmbHkoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIGJhY2tp
bmcgc3RvcmUgaXMgaW4gdG8tc3BhY2UuCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4o
cmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTA3LDI3ICszOTA3LDMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIp
OwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BS
LCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3Rv
cmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAor
ICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgbmFuID0gSlNWYWx1
ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMucGF5bG9hZCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBK
U1ZhbHVlIGhvbGU7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSkKKyAgICAgICAgICAgICAgICBob2xlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgUE5hTik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaG9sZSA9IEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMudGFnKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMucGF5
bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKKyAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhW
YXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODY5LDI3ICszODY5LDMxIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0
Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihU
cnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBt
X2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5l
bWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1f
aml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwKKyAgICAgICAgICAgICAgICBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2Rl
LT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBz
dG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkp
KSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRf
dD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVH
UFIsIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoMkdQ
Uik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5s
YWJlbCgpOwotICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5saW5rVG8obG9vcCwgJm1faml0
KTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1f
aml0LmxhYmVsKCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxs
b2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRH
UFIsCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIHNpemUgKz0gb3V0T2ZMaW5lQ2FwYWNpdHkgKiBz
aXplb2YoSlNWYWx1ZSk7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKAotICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0ZWRJbW0zMihz
aXplKSwgc3RvcmFnZUdQUikpOwotICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCi0gICAg
ICAgICAgICBtX2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKHZlY3Rvckxlbmd0aCAqIHNpemVvZihK
U1ZhbHVlKSksIHN0b3JhZ2VHUFIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlR1BSKTsK
KyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9j
YXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2Fz
ZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKAorICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKG91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSksCisgICAgICAgICAgICBzdG9yYWdlR1BSKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdlR1BSKTsKIApAQCAtMTI3LDE0
ICsxMjcsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1Jhd09iamVjdCwgcmVzdWx0R1BSLCBz
dG9yYWdlR1BSLAogICAgICAgICBzdHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aCkpOwogCi0gICAgaWYg
KGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSAmJiBudW1FbGVtZW50cyA8IHZl
Y3Rvckxlbmd0aCkgeworICAgIGlmIChudW1FbGVtZW50cyA8IHZlY3Rvckxlbmd0aCkgewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaGFzRG91Ymxl
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNp
emVvZihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciB2YWx1ZTsKLSAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CisgICAgICAgIGlmIChoYXNEb3VibGUo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1FbGVtZW50czsgaSA8
IHZlY3Rvckxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJ
bW0zMih2YWx1ZS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
Uiwgc2l6ZW9mKGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKHZhbHVlLmFz
Qml0cy5wYXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9m
KGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSk7CkBAIC02NzI2LDE4ICs2NzMyLDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3AKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlz
KTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9
IHNjcmF0Y2gyLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigp
OwogICAgICAgICAKICAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPm91
dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
PT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJh
c2ljU3RvcmFnZSgKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0KLSAgICBtX2ppdC5hZGRQ
dHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2Ny
YXRjaEdQUjEpOworICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICog
c2l6ZW9mKEpTVmFsdWUpOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEo
c2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IHNsb3dQYXRoOworICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BS
MSk7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKQEAgLTY3NzIsMTYgKzY3ODQsMjEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIFN0b3JhZ2VPcGVy
YW5kIG9sZFN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIG9sZFN0b3JhZ2VHUFIgPSBvbGRTdG9yYWdlLmdwcigp
OwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOwogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwotICAgICAgICAKLSAgICBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShUcnVzdGVk
SW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFkZFB0cihKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7CisgICAgCisgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEobmV3U2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQ
YXRoKTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihu
ZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAg
CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBu
ZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3NjYsNyArMzc2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc2l6ZSwgbV9vdXQu
Y29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKG1pbkNhcGFjaXR5KSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVWYXJpYWJs
ZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCi0gICAgICAgICAgICAgICAgc2l6ZSwgc3Ry
dWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgbV9v
dXQuemVyb0V4dFB0cihzaXplKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0
aCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLnZh
bHVlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOwpAQCAtNDA2
Miw5ICs0MDYyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6
ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJ
bnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0
dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFs
bG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4
aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFs
dWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFpbENhc2Up
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuc3Vi
KGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZs
eSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgb2JqZWN0
ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZhaWxDYXNl
KTsKICAgICAgICAgICAgIApAQCAtNjkxOSwxMSArNjkyMSwxMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIExWYWx1ZSBz
dGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAgICAgICAgICAgICAgICAgIGFs
bG9jYXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0
ZXJmbHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKIAog
ICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6ZSkpOworICAgICAgICAgICAg
ICAgICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsgc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGZh
c3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgICAgICAgICAKQEAgLTc3MTcsMTAgKzc3MjEsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
aW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgTFZhbHVl
IHZlY3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAgICAgIGlmICghaGFz
RG91YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBhbHJlYWR5IGlu
aXRpYWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhhc0Rv
dWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQo
Yml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOwogCiAg
ICAgICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFOLgogICAgICAgICBM
QmFzaWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03NzM1LDkgKzc3NDAs
NyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkoSW50MzIsIG9y
aWdpbmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LnBoaShwb2ludGVy
VHlwZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmU2
NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBO
YU4pKSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9w
ZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291dC5zdG9yZTY0KGhv
bGUsIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5k
ZXgoKSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5leHRJbmRleCA9IG1f
b3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291dC5hZGRJbmNvbWlu
Z1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03Nzk4LDEyICs3ODAx
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkp
LCBzbG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVz
ICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9
IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdElu
dFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmFk
ZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdl
KSk7CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgCiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC04MzczLDcgKzgz
NzcsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0K
IAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sg
c2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9jYXRvciwg
TEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNz
ID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAKQEAgLTgzOTQsNyArODM5OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKAogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihyZXN1
bHQsIG1faGVhcHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAgICAgICAgICBhbGxvY2F0b3Is
IG1faGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7Ci0KKyAgICAgICAgCiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtODQwOCw3ICs4NDEyLDcgQEAgcHJp
dmF0ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAg
ICAgICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CkBAIC04NDM2LDQ2ICs4NDQwLDU0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwg
c2xvd1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+
Ci0gICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVl
IHNpemUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2Us
IExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNp
c2VTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBv
ZiB0d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNl
U3RlcCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpp
bXByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVl
IHN1YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVj
dE9mVHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21h
bGxDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJn
ZU9yT3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNC
bG9jayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBM
VmFsdWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1h
cmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBt
X291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpw
cmVjaXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRk
KHNpemUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsK
KyAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291
dC5jb25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291
dC5icmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JP
dmVyc2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJs
b2NrKTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAg
ICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3Jz
LCBzdWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJv
dW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lz
ZVN0ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQu
Y29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52
YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VC
bG9jayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVw
cm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9m
ZikpLAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJ
bnRQdHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxs
eShsYXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFk
ZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNl
X1N1YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9v
dXQuemVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIo
Z2V0TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBt
X291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtl
ZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VB
bGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5w
aGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAg
ICAgCisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0
b3IsIGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZv
clNpemUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUo
bV9vdXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRl
VmFyaWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAg
dm0oKS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xv
d1BhdGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1NjIsMjYgKzg1NzQs
MjQgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAot
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVu
Z3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7Cisg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZv
ckF1eGlsaWFyeURhdGEoCisgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5n
dGggKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9y
YWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xv
d1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigK
LSAgICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFs
dWUpICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5h
ZGQoc3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxK
U0FycmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7Cisg
ICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMiht
X291dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpOwogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIo
dmVjdG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2
ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBO
YU4pKSwKLSAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExW
YWx1ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGlu
dDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NChob2xlLCBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3Bl
cnRpZXNbaV0pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwg
YnV0dGVyZmx5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcFV0
aWwuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTUxLDE2ICs1MiwxNiBAQCBDb25zZXJ2YXRpdmVSb290czo6
Q29uc2VydmF0aXZlUm9vdHMoTWFyCiBDb25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJv
b3RzKCkKIHsKICAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0Fs
bG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2Yo
SlNDZWxsKikpOworICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9v
dHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSGVhcENlbGwqKSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0
aXZlUm9vdHM6Omdyb3coKQogewogICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkg
PT0gaW5saW5lQ2FwYWNpdHkgPyBub25JbmxpbmVDYXBhY2l0eSA6IG1fY2FwYWNpdHkgKiAyOwot
ICAgIEpTQ2VsbCoqIG5ld1Jvb3RzID0gc3RhdGljX2Nhc3Q8SlNDZWxsKio+KE9TQWxsb2NhdG9y
OjpyZXNlcnZlQW5kQ29tbWl0KG5ld0NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKSk7Ci0gICAg
bWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBtX3NpemUgKiBzaXplb2YoSlNDZWxsKikpOworICAg
IEhlYXBDZWxsKiogbmV3Um9vdHMgPSBzdGF0aWNfY2FzdDxIZWFwQ2VsbCoqPihPU0FsbG9jYXRv
cjo6cmVzZXJ2ZUFuZENvbW1pdChuZXdDYXBhY2l0eSAqIHNpemVvZihIZWFwQ2VsbCopKSk7Cisg
ICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBtX3NpemUgKiBzaXplb2YoSGVhcENlbGwqKSk7
CiAgICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6
OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCop
KTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2Nh
cGFjaXR5ICogc2l6ZW9mKEhlYXBDZWxsKikpOwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0
eTsKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7CiB9CkBAIC03MiwxMyArNzMsMTQgQEAgaW5saW5l
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZAogCiAgICAgbV9jb3BpZWRTcGFjZS0+
cGluSWZOZWNlc3NhcnkocCk7CiAKLSAgICBpZiAoIUhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZp
bHRlciwgKm1fYmxvY2tzLCBwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2l6ZSA9
PSBtX2NhcGFjaXR5KQotICAgICAgICBncm93KCk7Ci0KLSAgICBtX3Jvb3RzW21fc2l6ZSsrXSA9
IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHApOworICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2lu
dGVycygKKyAgICAgICAgZmlsdGVyLCAqbV9ibG9ja3MsIHAsCisgICAgICAgIFsmXSAodm9pZCog
cCkgeworICAgICAgICAgICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQorICAgICAgICAgICAg
ICAgIGdyb3coKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9yb290c1ttX3NpemUrK10g
PSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihwKTsKKyAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcmtIb29rPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICsz
MSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSGVh
cENlbGw7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKLWNsYXNzIEpTQ2VsbDsKIAogY2xhc3Mg
Q29uc2VydmF0aXZlUm9vdHMgewogcHVibGljOgpAQCAtNDQsMTEgKzQ0LDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYs
IENvZGVCbG9ja1NldCYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7Ci0gICAgSlNDZWxsKiog
cm9vdHMoKTsKKyAgICBIZWFwQ2VsbCoqIHJvb3RzKCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDEyODsKLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IG5vbklubGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKKyAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihIZWFwQ2Vs
bCopOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgogICAgIHZvaWQgZ2Vu
ZXJpY0FkZFBvaW50ZXIodm9pZCosIFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKQEAgLTU4
LDEyICs1OCwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZ3JvdygpOwogCi0gICAgSlND
ZWxsKiogbV9yb290czsKKyAgICBIZWFwQ2VsbCoqIG1fcm9vdHM7CiAgICAgc2l6ZV90IG1fc2l6
ZTsKICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBNYXJrZWRCbG9ja1NldCogbV9ibG9ja3M7
CiAgICAgQ29waWVkU3BhY2UqIG1fY29waWVkU3BhY2U7Ci0gICAgSlNDZWxsKiBtX2lubGluZVJv
b3RzW2lubGluZUNhcGFjaXR5XTsKKyAgICBIZWFwQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVD
YXBhY2l0eV07CiB9OwogCiBpbmxpbmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkK
QEAgLTcxLDcgKzcxLDcgQEAgaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgp
CiAgICAgcmV0dXJuIG1fc2l6ZTsKIH0KIAotaW5saW5lIEpTQ2VsbCoqIENvbnNlcnZhdGl2ZVJv
b3RzOjpyb290cygpCitpbmxpbmUgSGVhcENlbGwqKiBDb25zZXJ2YXRpdmVSb290czo6cm9vdHMo
KQogewogICAgIHJldHVybiBtX3Jvb3RzOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDYg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgQnV0dGVyZmx5Q29w
eVRva2VuLAogICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0
b3JlQ29weVRva2VuLAogICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgs
MTIgKzU5OCw2IEBAIHZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5V29ya0xpc3QmIHdvcmtM
aXN0ID0gYmxvY2stPndvcmtMaXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENv
cHlXb3JrbGlzdEl0ZW0gaXRlbSA6IHdvcmtMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZW0udG9rZW4oKSA9PSBCdXR0ZXJmbHlDb3B5VG9rZW4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3Is
IEJ1dHRlcmZseUNvcHlUb2tlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKS0+bWV0
aG9kVGFibGUoKS0+Y29weUJhY2tpbmdTdG9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbS5jZWxsKCksIGNvcHlWaXNpdG9yLCBpdGVtLnRva2VuKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MywxMyArODMsMTUgQEAgdHlwZWRlZiBIYXNoQ291bnRlZFNldDxjb25zdCBj
aGFyKj4gVHlwZQogCiBlbnVtIEhlYXBUeXBlIHsgU21hbGxIZWFwLCBMYXJnZUhlYXAgfTsKIAor
Y2xhc3MgSGVhcFV0aWw7CisKIGNsYXNzIEhlYXAgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEhlYXApOwogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNz
IERGRzo6U3BlY3VsYXRpdmVKSVQ7CiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNWYWx1
ZSk7IC8vIDAgZm9yIGltbWVkaWF0ZSB2YWx1ZXMKLSAgICBzdGF0aWMgSGVhcCogaGVhcChjb25z
dCBKU0NlbGwqKTsKKyAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBIZWFwQ2VsbCopOwogCiAg
ICAgLy8gVGhpcyBjb25zdGFudCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRl
IGJldHdlZW4gY2hlY2tzIG9mIG91ciAKICAgICAvLyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVh
cDo6aXNQYWdlZE91dC4gRGVjcmVhc2luZyBpdCB3aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKQEAg
LTEwMiwxMSArMTA0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJr
ZWQoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7
CiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcnVuIGFmdGVyIHN0b3BBbGxvY2F0aW9u
KCkgaXMgY2FsbGVkIGFuZCAKLSAgICAvLyBiZWZvcmUgbGl2ZW5lc3MgZGF0YSBpcyBjbGVhcmVk
IHRvIGJlIGFjY3VyYXRlLgotICAgIHN0YXRpYyBib29sIGlzUG9pbnRlckdDT2JqZWN0KFRpbnlC
bG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQmLCB2b2lkKiBwb2ludGVyKTsKLSAgICBzdGF0aWMg
Ym9vbCBpc1ZhbHVlR0NPYmplY3QoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIEpT
VmFsdWUpOwotCiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7CiAgICAgdm9p
ZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7CiAgICAgdm9pZCB3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CkBAIC0xNTAsNyArMTQ3LDExIEBAIHB1Ymxp
YzoKICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVj
dG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0
ZXMpOyB9CiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1
Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFsbG9j
YXRvckZvcihieXRlcyk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IE1hcmtl
ZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcyk7CisgICAg
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRlcykg
eyByZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAg
ICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdl
U3BhY2UuYWxsb2NhdG9yKCk7IH0KKyAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwq
IGludGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnko
SlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVB
dXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU3Rv
cmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVja2Vk
Qm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQq
Kiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50ZW5k
ZWRPd25lciwgdm9pZCopOwpAQCAtMjY3LDYgKzI2OCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEdDTG9nZ2luZzsKICAgICBmcmllbmQgY2xhc3MgR0NUaHJlYWQ7CiAgICAgZnJpZW5k
IGNsYXNzIEhhbmRsZVNldDsKKyAgICBmcmllbmQgY2xhc3MgSGVhcFV0aWw7CiAgICAgZnJpZW5k
IGNsYXNzIEhlYXBWZXJpZmllcjsKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRlICJIZWFwLmgi
CisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KQEAgLTU5LDcgKzYwLDcg
QEAgaW5saW5lIGJvb2wgSGVhcDo6aXNDb2xsZWN0aW5nKCkKICAgICByZXR1cm4gbV9vcGVyYXRp
b25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9
PSBFZGVuQ29sbGVjdGlvbjsKIH0KIAotaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlND
ZWxsKiBjZWxsKQoraW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSGVhcENlbGwqIGNlbGwp
CiB7CiAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aGVhcCgpOwogfQpA
QCAtMTk5LDcgKzIwMCw3IEBAIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0
cnUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotdm9pZCogSGVhcDo6YWxsb2Nh
dGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRl
T2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKIHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygp
IGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJp
dmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KICAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5l
ZWRzRGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJ
c0ltbW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGli
bGVPYmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjEwLDcgKzIxMSw3IEBAIHZvaWQqIEhlYXA6OmFsbG9j
YXRlT2JqZWN0T2ZUeXBlKHNpemVfdCAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBl
PgotTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvck9iamVjdE9mVHlwZSgp
CitpbmxpbmUgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvck9iamVjdE9m
VHlwZSgpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxs
b2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGli
bGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8IChD
bGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjpp
c19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsK
QEAgLTIyMSw3ICsyMjIsNyBAQCBNYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNl
Rm9yCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLU1hcmtlZEFsbG9jYXRvciYg
SGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKK2lubGluZSBNYXJr
ZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMp
CiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVk
IHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmpl
Y3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5
cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252
ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIz
MSw2ICsyMzIsMzcgQEAgTWFya2VkQWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0b3JGb3JPYmplYwog
ICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9
CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVk
T3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNwYWNl
LmFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5H
KQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5
IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9IG1fb2Jq
ZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoYnl0ZXMpOworI2lmIEVOQUJMRShBTExPQ0FU
SU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBieXRlcyBv
ZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCByZXN1bHQp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5kaWYKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCogSGVhcDo6dHJ5UmVhbGxvY2F0ZUF1eGls
aWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXpl
LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICB2b2lkKiBuZXdCYXNlID0gdHJ5QWxsb2NhdGVBdXhp
bGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7CisgICAgaWYgKCFuZXdCYXNlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBtZW1jcHkobmV3QmFzZSwgb2xkQmFzZSwgb2xkU2l6ZSk7
CisgICAgcmV0dXJuIG5ld0Jhc2U7Cit9CisKIGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0
cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZv
aWQqKiBvdXRQdHIpCiB7CiAgICAgQ2hlY2tlZEJvb2xlYW4gcmVzdWx0ID0gbV9zdG9yYWdlU3Bh
Y2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CkBAIC0zNTQsMzMgKzM4Niw2IEBAIGlubGlu
ZSB2b2lkIEhlYXA6OmRpZEZyZWVCbG9jayhzaXplX3QgY2EKICNlbmRpZgogfQogCi1pbmxpbmUg
Ym9vbCBIZWFwOjppc1BvaW50ZXJHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJr
ZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIHZvaWQqIHBvaW50ZXIpCi17Ci0gICAgTWFya2Vk
QmxvY2sqIGNhbmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihwb2ludGVyKTsKLSAgICBp
ZiAoZmlsdGVyLnJ1bGVPdXQoYml0d2lzZV9jYXN0PEJpdHM+KGNhbmRpZGF0ZSkpKSB7Ci0gICAg
ICAgIEFTU0VSVCghY2FuZGlkYXRlIHx8ICFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhj
YW5kaWRhdGUpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghTWFy
a2VkQmxvY2s6OmlzQXRvbUFsaWduZWQocG9pbnRlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjYW5kaWRhdGUtPmlzTGl2ZUNlbGwocG9p
bnRlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1p
bmxpbmUgYm9vbCBIZWFwOjppc1ZhbHVlR0NPYmplY3QoVGlueUJsb29tRmlsdGVyIGZpbHRlciwg
TWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlm
ICghdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNQ
b2ludGVyR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9pZCo+
KHZhbHVlLmFzQ2VsbCgpKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
SGVhcElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEFyZSB5b3UgdGlyZWQgb2Ygd2FpdGluZyBmb3IgYWxs
IG9mIFdlYktpdCB0byBidWlsZCBiZWNhdXNlIHlvdSBjaGFuZ2VkIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiBhCisvLyBmdW5jdGlvbiBpbiBIZWFwSW5saW5lcy5oPyAgRG9lcyBpdCBib3RoZXIgeW91
IHRoYXQgeW91J3JlIHdhaXRpbmcgb24gcmVidWlsZGluZyB0aGUgSlMgRE9NCisvLyBiaW5kaW5n
cyBldmVuIHRob3VnaCB5b3VyIGNoYW5nZSBpcyBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIG9u
bHkgMiAuY3BwIGZpbGVzPyAgVGhlbiBIZWFwVXRpbC5oCisvLyBpcyBmb3IgeW91ISAgRXZlcnl0
aGluZyBpbiB0aGlzIGNsYXNzIHNob3VsZCBiZSBhIHN0YXRpYyBtZXRob2QgdGhhdCB0YWtlcyBh
IEhlYXAmIGlmIG5lZWRlZC4KKy8vIFRoaXMgaXMgYSBmcmllbmQgb2YgSGVhcCwgc28geW91IGNh
biBhY2Nlc3MgYWxsIG9mIEhlYXAncyBwcml2YXRlcy4KKy8vCisvLyBUaGlzIGVuZHMgdXAgYmVp
bmcgYW4gaXNzdWUgYmVjYXVzZSBIZWFwIGV4cG9zZXMgYSBsb3Qgb2YgbWV0aG9kcyB0aGF0IG91
Z2h0IHRvIGJlIGlubGluZSBmb3IKKy8vIHBlcmZvcm1hbmNlIG9yIHRoYXQgbXVzdCBiZSBpbmxp
bmUgYmVjYXVzZSB0aGV5IGFyZSB0ZW1wbGF0ZXMuICBUaGlzIGNsYXNzIG91Z2h0IHRvIGNvbnRh
aW4KKy8vIG1ldGhvZHMgdGhhdCBhcmUgdXNlZCBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBjb2xsZWN0b3IsIG9yIGZvciB1bnVzdWFsIGNsaWVudHMgdGhhdCBuZWVkCisvLyB0byByZWFj
aCBkZWVwIGludG8gdGhlIGNvbGxlY3RvciBmb3Igc29tZSByZWFzb24uICBEb24ndCBwdXQgdGhp
bmdzIGluIGhlcmUgdGhhdCB3b3VsZCBjYXVzZSB5b3UKKy8vIHRvIGhhdmUgdG8gaW5jbHVkZSBp
dCBmcm9tIG1vcmUgdGhhbiBhIGhhbmRmdWwgb2YgcGxhY2VzLCBzaW5jZSB0aGF0IHdvdWxkIGRl
ZmVhdCB0aGUgcHVycG9zZS4KKy8vIFRoaXMgY2xhc3MgaXNuJ3QgaGVyZSB0byBsb29rIHByZXR0
eS4gIEl0J3MgdG8gbGV0IHVzIGhhY2sgdGhlIEdDIG1vcmUgZWFzaWx5IQorCitjbGFzcyBIZWFw
VXRpbCB7CitwdWJsaWM6CisgICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJ1biBhZnRlciBz
dG9wQWxsb2NhdGlvbigpIGlzIGNhbGxlZCBhbmQgCisgICAgLy8gYmVmb3JlIGxpdmVuZXNzIGRh
dGEgaXMgY2xlYXJlZCB0byBiZSBhY2N1cmF0ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgorICAgIHN0YXRpYyB2b2lkIGZpbmRHQ09iamVjdFBvaW50ZXJzKAorICAgICAgICBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIHZvaWQqIHBh
c3NlZFBvaW50ZXIsCisgICAgICAgIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBj
aGFyKiBwb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHBhc3NlZFBvaW50ZXIpOworICAgIAor
ICAgICAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKHBv
aW50ZXIpOworICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBhIGJ1dHRlcmZseSBwb2ludGVy
IHRvIHBvaW50IHBhc3QgdGhlIGVuZCBvZiBhIGJ1dHRlcmZseS4gQ2hlY2sgdGhpcyBub3cuCisg
ICAgICAgIGlmIChwb2ludGVyIDw9IGJpdHdpc2VfY2FzdDxjaGFyKj4oY2FuZGlkYXRlKSArIHNp
emVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgICAgIC8vIFdlIG1heSBiZSBpbnRlcmVz
dGVkIGluIHRoZSBsYXN0IGNlbGwgb2YgdGhlIHByZXZpb3VzIE1hcmtlZEJsb2NrLgorICAgICAg
ICAgICAgY2hhciogcHJldmlvdXNQb2ludGVyID0gcG9pbnRlciAtIHNpemVvZihJbmRleGluZ0hl
YWRlcikgLSAxOworICAgICAgICAgICAgTWFya2VkQmxvY2sqIHByZXZpb3VzQ2FuZGlkYXRlID0g
TWFya2VkQmxvY2s6OmJsb2NrRm9yKHByZXZpb3VzUG9pbnRlcik7CisgICAgICAgICAgICBpZiAo
IWZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRzPihwcmV2aW91c0NhbmRpZGF0ZSkpCisg
ICAgICAgICAgICAgICAgJiYgbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMocHJldmlvdXND
YW5kaWRhdGUpCisgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNDYW5kaWRhdGUtPmNlbGxLaW5k
KCkgPT0gSGVhcENlbGw6OkF1eGlsaWFyeSkgeworICAgICAgICAgICAgICAgIHByZXZpb3VzUG9p
bnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihwcmV2aW91c0NhbmRpZGF0ZS0+Y2VsbEFsaWduKHBy
ZXZpb3VzUG9pbnRlcikpOworICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0NhbmRpZGF0ZS0+
aXNMaXZlQ2VsbChwcmV2aW91c1BvaW50ZXIpKQorICAgICAgICAgICAgICAgICAgICBmdW5jKHBy
ZXZpb3VzUG9pbnRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAg
aWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRzPihjYW5kaWRhdGUpKSkgeworICAg
ICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRh
aW5zKGNhbmRpZGF0ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisg
ICAgICAgIGlmICghbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHRyeVBvaW50ZXIgPSBbJl0gKHZvaWQq
IHBvaW50ZXIpIHsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmlzTGl2ZUNlbGwocG9pbnRl
cikpCisgICAgICAgICAgICAgICAgZnVuYyhwb2ludGVyKTsKKyAgICAgICAgfTsKKyAgICAKKyAg
ICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2VsbEtpbmQoKSA9PSBIZWFwQ2VsbDo6SlNDZWxsKSB7Cisg
ICAgICAgICAgICBpZiAoIU1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKHBvaW50ZXIpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICB0cnlQb2ludGVyKHBv
aW50ZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIC8v
IEEgYnV0dGVyZmx5IGNvdWxkIHBvaW50IGludG8gdGhlIG1pZGRsZSBvZiBhbiBvYmplY3QuCisg
ICAgICAgIGNoYXIqIGFsaWduZWRQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNhbmRpZGF0
ZS0+Y2VsbEFsaWduKHBvaW50ZXIpKTsKKyAgICAgICAgdHJ5UG9pbnRlcihhbGlnbmVkUG9pbnRl
cik7CisgICAgCisgICAgICAgIC8vIEFsc28sIGEgYnV0dGVyZmx5IGNvdWxkIHBvaW50IGF0IHRo
ZSBlbmQgb2YgYW4gb2JqZWN0IHBsdXMgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKS4gSW4gdGhhdAor
ICAgICAgICAvLyBjYXNlLCB0aGlzIGlzIHBvaW50aW5nIHRvIHRoZSBvYmplY3QgdG8gdGhlIHJp
Z2h0IG9mIHRoZSBvbmUgd2Ugc2hvdWxkIGJlIG1hcmtpbmcuCisgICAgICAgIGlmIChjYW5kaWRh
dGUtPmF0b21OdW1iZXIoYWxpZ25lZFBvaW50ZXIpID4gTWFya2VkQmxvY2s6OmZpcnN0QXRvbSgp
CisgICAgICAgICAgICAmJiBwb2ludGVyIDw9IGFsaWduZWRQb2ludGVyICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSkKKyAgICAgICAgICAgIHRyeVBvaW50ZXIoYWxpZ25lZFBvaW50ZXIgLSBjYW5k
aWRhdGUtPmNlbGxTaXplKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1BvaW50
ZXJHQ09iamVjdEpTQ2VsbCgKKyAgICAgICAgVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2Vk
QmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCBjb25zdCB2b2lkKiBwb2ludGVyKQorICAgIHsKKyAg
ICAgICAgTWFya2VkQmxvY2sqIGNhbmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihwb2lu
dGVyKTsKKyAgICAgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRzPihjYW5k
aWRhdGUpKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1hcmtlZEJsb2Nr
U2V0LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIU1hcmtlZEJsb2NrOjppc0F0b21B
bGlnbmVkKHBvaW50ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbmRpZGF0ZS0+
Y2VsbEtpbmQoKSAhPSBIZWFwQ2VsbDo6SlNDZWxsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmlzTGl2ZUNlbGwocG9pbnRlcikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNWYWx1ZUdDT2JqZWN0KAorICAgICAg
ICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQs
IEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gaXNQb2ludGVyR0NPYmplY3RK
U0NlbGwoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHZhbHVlLmFz
Q2VsbCgpKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
cmV0aXJlKE1hcmtlZEJsb2NrCiAgICAgYmxvY2stPmRpZFJldGlyZUJsb2NrKGZyZWVMaXN0KTsK
IH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIoc2l6
ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRo
b3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90IGJ5dGVzKQogewogICAgIGlmIChtX2N1cnJlbnRCbG9j
aykgewogICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2sgPT0gbV9uZXh0QmxvY2tUb1N3ZWVw
KTsKQEAgLTEyMCwxMSArMTIwLDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eVBvcEZyZWUKICAgICByZXR1cm4gaGVhZDsKIH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhzaXplX3QgYnl0ZXMpCiB7CiAgICAg
QVNTRVJUKCFtX2hlYXAtPmlzQnVzeSgpKTsKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9IEFsbG9jYXRpb247Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVIZWxwZXIo
Ynl0ZXMpOworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJ
bXBsKGJ5dGVzKTsKIAogICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVy
YXRpb247CiAgICAgQVNTRVJUKHJlc3VsdCB8fCAhbV9jdXJyZW50QmxvY2spOwpAQCAtMTQ4LDYg
KzE0OCwxOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAKIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCiB7Cisg
ICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nh
c2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCit7CisgICAgYm9vbCBjcmFzaE9u
RmFpbHVyZSA9IGZhbHNlOworICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChieXRlcywg
Y3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2VJbXBsKHNpemVfdCBieXRlcywgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBBU1NF
UlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBk
b1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKCk7CiAKQEAgLTE1NSwyOSArMTY3LDM0IEBAIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgKICAgICBBU1NFUlQoIW1fZnJlZUxp
c3QuaGVhZCk7CiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0LmJ5dGVzKTsKICAg
ICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgdm9pZCogcmVz
dWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgCiAgICAgaWYg
KExJS0VMWShyZXN1bHQgIT0gMCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCiAgICAg
aWYgKG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRo
b3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIEFTU0VSVCghbV9oZWFwLT5zaG91bGRDb2xsZWN0
KCkpOwogICAgIAotICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGFsbG9jYXRlQmxvY2soYnl0ZXMp
OwotICAgIEFTU0VSVChibG9jayk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gdHJ5QWxsb2Nh
dGVCbG9jayhieXRlcyk7CisgICAgaWYgKCFibG9jaykgeworICAgICAgICBpZiAoY3Jhc2hPbkZh
aWx1cmUpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAgICAgYWRkQmxvY2so
YmxvY2spOwogICAgICAgICAKLSAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAg
cmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgQVNTRVJU
KHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTWFya2VkQmxvY2sqIE1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGVCbG9jayhzaXplX3QgYnl0ZXMpCitNYXJrZWRCbG9jayogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUJsb2NrKHNpemVfdCBieXRlcykKIHsKICAgICBzaXplX3Qg
bWluQmxvY2tTaXplID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKICAgICBzaXplX3QgbWluQWxs
b2NhdGlvblNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21T
aXplPihzaXplb2YoTWFya2VkQmxvY2spKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJr
ZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKQEAgLTE4Niw3ICsyMDMsNyBAQCBNYXJrZWRCbG9j
ayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsCiAKICAgICBzaXplX3QgY2VsbFNpemUgPSBt
X2NlbGxTaXplID8gbV9jZWxsU2l6ZSA6IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRC
bG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKIAotICAgIHJldHVybiBNYXJrZWRCbG9jazo6Y3JlYXRl
KCptX2hlYXAsIHRoaXMsIGJsb2NrU2l6ZSwgY2VsbFNpemUsIG1fYXR0cmlidXRlcyk7CisgICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBj
ZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJs
b2NrKE1hcmtlZEJsb2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiAr
NTMsNyBAQCBwdWJsaWM6CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQg
Y2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KICAgICB2
b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAg
ICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE1hcmtlZEJsb2NrKiB0YWtl
TGFzdEFjdGl2ZUJsb2NrKCkKICAgICB7CkBAIC03MSwxMCArNzIsMTIgQEAgcHVibGljOgogICAg
CiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uo
c2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFs
bG9jYXRlSGVscGVyKHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxs
b2NhdGVTbG93Q2FzZShzaXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKHNp
emVfdCwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0
Q29sbGVjdGluZyhzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rp
bmdJbXBsKHNpemVfdCk7CiAgICAgdm9pZCogdHJ5UG9wRnJlZUxpc3Qoc2l6ZV90KTsKLSAgICBN
YXJrZWRCbG9jayogYWxsb2NhdGVCbG9jayhzaXplX3QpOworICAgIE1hcmtlZEJsb2NrKiB0cnlB
bGxvY2F0ZUJsb2NrKHNpemVfdCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxl
Y3Rpb25zSWZOZWVkZWQoKTsKICAgICB2b2lkIHJldGlyZShNYXJrZWRCbG9jayosIE1hcmtlZEJs
b2NrOjpGcmVlTGlzdCYpOwogICAgIApAQCAtMTEzLDIxICsxMTYsMzUgQEAgaW5saW5lIHZvaWQg
TWFya2VkQWxsb2NhdG9yOjppbml0KEhlYXAqIAogICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVf
dCBieXRlcykKK3sKKyAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0
LmhlYWQ7CisgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgeworICAgICAgICB2b2lkKiByZXN1bHQg
PSB0cnlBbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiAhQVNT
RVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgbWVtc2V0KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBtX2ZyZWVMaXN0LmhlYWQg
PSBoZWFkLT5uZXh0OworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQo
aGVhZCwgMHhDRCwgYnl0ZXMpOworICAgIHJldHVybiBoZWFkOworfQorCiBpbmxpbmUgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgTWFya2VkQmxv
Y2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwogICAgIGlmIChVTkxJS0VMWSgh
aGVhZCkpIHsKICAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdGVTbG93Q2FzZShieXRlcyk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7Ci0j
ZW5kaWYKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1zZXQo
cmVzdWx0LCAweENELCBieXRlcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0jaWZuZGVmIE5ERUJVRwotICAg
IG1lbXNldChoZWFkLCAweENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKKyAgICAgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKICAgICByZXR1cm4gaGVh
ZDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNw
cAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMjcgQEAgbmFtZXNwYWNlIEpT
QyB7CiBzdGF0aWMgY29uc3QgYm9vbCBjb21wdXRlQmFsYW5jZSA9IGZhbHNlOwogc3RhdGljIHNp
emVfdCBiYWxhbmNlOwogCi1NYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwJiBo
ZWFwLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3Qg
Y2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCitzdGF0aWMg
dm9pZCByZXNldEJhZGx5KHZvaWQqIGJhc2UsIHNpemVfdCBzaXplKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSBzaXplIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsgaS0tOykgeworICAgICAgICBz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2UpW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKAor
ICAgICAgICAgICAgYml0d2lzZV9jYXN0PEpTQ2VsbCo+KHN0YXRpY19jYXN0PGludHB0cl90Pig2
NjYgKiA4KSkpOworICAgIH0KK30KKworTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjp0cnlDcmVh
dGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVz
KQogewogICAgIGlmIChjb21wdXRlQmFsYW5jZSkgewogICAgICAgICBiYWxhbmNlKys7CiAgICAg
ICAgIGlmICghKGJhbGFuY2UgJSAxMCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJNYXJrZWRCbG9j
ayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsKICAgICB9Ci0gICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gbmV3IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1hbGxvYyhibG9ja1NpemUsIGNhcGFjaXR5
KSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMp
OworICAgIHZvaWQqIGJsb2NrU3BhY2UgPSB0cnlGYXN0QWxpZ25lZE1hbGxvYyhibG9ja1NpemUs
IGNhcGFjaXR5KTsKKyAgICBpZiAoIWJsb2NrU3BhY2UpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGlmIChPcHRpb25zOjpyZXNldEZyZWVDZWxsc0JhZGx5KCkpCisgICAgICAgIHJlc2V0
QmFkbHkoYmxvY2tTcGFjZSwgY2FwYWNpdHkpOworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IG5l
dyAoTm90TnVsbCwgYmxvY2tTcGFjZSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwg
Y2VsbFNpemUsIGF0dHJpYnV0ZXMpOwogICAgIGhlYXAuZGlkQWxsb2NhdGVCbG9jayhjYXBhY2l0
eSk7CiAgICAgcmV0dXJuIGJsb2NrOwogfQpAQCAtOTIsMTEgKzEwNSwxMSBAQCBpbmxpbmUgdm9p
ZCBNYXJrZWRCbG9jazo6Y2FsbERlc3RydWN0b3IoCiAgICAgY2VsbC0+emFwKCk7CiB9CiAKLXRl
bXBsYXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtlZEJsb2NrOjpT
d2VlcE1vZGUgc3dlZXBNb2RlLCBib29sIGNhbGxEZXN0cnVjdG9ycz4KK3RlbXBsYXRlPE1hcmtl
ZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtlZEJsb2NrOjpTd2VlcE1vZGUgc3dl
ZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6UmVz
ZXRNb2RlIHJlc2V0TW9kZT4KIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3Bl
Y2lhbGl6ZWRTd2VlcCgpCiB7CiAgICAgQVNTRVJUKGJsb2NrU3RhdGUgIT0gQWxsb2NhdGVkICYm
IGJsb2NrU3RhdGUgIT0gRnJlZUxpc3RlZCk7Ci0gICAgQVNTRVJUKCEoIWNhbGxEZXN0cnVjdG9y
cyAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CisgICAgQVNTRVJUKCEoZGVzdHJ1Y3Rpb25N
b2RlID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09IFN3ZWVwT25seSkp
OwogCiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4g
cmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRo
ZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCkBAIC0xMDks
MTEgKzEyMiwxMyBAQCBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnNwZWNpCiAK
ICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+
KCZhdG9tcygpW2ldKTsKIAotICAgICAgICBpZiAoY2FsbERlc3RydWN0b3JzICYmIGJsb2NrU3Rh
dGUgIT0gTmV3KQorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IE5lZWRzRGVzdHJ1Y3Rp
b24gJiYgYmxvY2tTdGF0ZSAhPSBOZXcpCiAgICAgICAgICAgICBjYWxsRGVzdHJ1Y3RvcihjZWxs
KTsKIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgewogICAgICAg
ICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxGcmVlQ2VsbCo+KGNl
bGwpOworICAgICAgICAgICAgaWYgKHJlc2V0TW9kZSA9PSBSZXNldEJhZGx5KQorICAgICAgICAg
ICAgICAgIHJlc2V0QmFkbHkoZnJlZUNlbGwsIGNlbGxTaXplKCkpOwogICAgICAgICAgICAgZnJl
ZUNlbGwtPm5leHQgPSBoZWFkOwogICAgICAgICAgICAgaGVhZCA9IGZyZWVDZWxsOwogICAgICAg
ICAgICAgKytjb3VudDsKQEAgLTEzOSwxNyArMTU0LDI1IEBAIE1hcmtlZEJsb2NrOjpGcmVlTGlz
dCBNYXJrZWRCbG9jazo6c3dlZXAKICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAKICAgICBp
ZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCi0gICAgICAg
IHJldHVybiBzd2VlcEhlbHBlcjx0cnVlPihzd2VlcE1vZGUpOwotICAgIHJldHVybiBzd2VlcEhl
bHBlcjxmYWxzZT4oc3dlZXBNb2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0
UmVzZXRNb2RlPE5lZWRzRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7CisgICAgcmV0dXJuIHN3ZWVw
SGVscGVyU2VsZWN0UmVzZXRNb2RlPERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7
Cit9CisKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+CitNYXJrZWRC
bG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnN3ZWVwSGVscGVyU2VsZWN0UmVzZXRNb2RlKFN3
ZWVwTW9kZSBzd2VlcE1vZGUpCit7CisgICAgaWYgKE9wdGlvbnM6OnJlc2V0RnJlZUNlbGxzQmFk
bHkoKSkKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U3RhdGVBbmRTd2VlcE1vZGU8
ZGVzdHJ1Y3Rpb25Nb2RlLCBSZXNldEJhZGx5Pihzd2VlcE1vZGUpOworICAgIHJldHVybiBzd2Vl
cEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlPGRlc3RydWN0aW9uTW9kZSwgRG9udFJlc2V0
Pihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxib29sIGNhbGxEZXN0cnVjdG9ycz4KLU1hcmtl
ZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXBIZWxwZXIoU3dlZXBNb2RlIHN3ZWVw
TW9kZSkKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJs
b2NrOjpSZXNldE1vZGUgcmVzZXRNb2RlPgorTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpzd2VlcEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlKFN3ZWVwTW9kZSBzd2VlcE1v
ZGUpCiB7CiAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgY2FzZSBOZXc6CiAgICAgICAgIEFT
U0VSVChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAgcmV0dXJuIHNwZWNp
YWxpemVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGNhbGxEZXN0cnVjdG9ycz4oKTsKKyAg
ICAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGRlc3Ry
dWN0aW9uTW9kZSwgcmVzZXRNb2RlPigpOwogICAgIGNhc2UgRnJlZUxpc3RlZDoKICAgICAgICAg
Ly8gSGFwcGVucyB3aGVuIGEgYmxvY2sgdHJhbnNpdGlvbnMgdG8gZnVsbHkgYWxsb2NhdGVkLgog
ICAgICAgICBBU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7CkBAIC0xNjAsOCAr
MTgzLDggQEAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJsb2NrOjpzd2VlcAogICAgICAg
ICByZXR1cm4gRnJlZUxpc3QoKTsKICAgICBjYXNlIE1hcmtlZDoKICAgICAgICAgcmV0dXJuIHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QKLSAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2Vl
cDxNYXJrZWQsIFN3ZWVwVG9GcmVlTGlzdCwgY2FsbERlc3RydWN0b3JzPigpCi0gICAgICAgICAg
ICA6IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcE9ubHksIGNhbGxEZXN0cnVjdG9ycz4o
KTsKKyAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwVG9GcmVlTGlz
dCwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+KCkKKyAgICAgICAgICAgIDogc3BlY2lhbGl6
ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwT25seSwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+KCk7
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjAzOTIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMTA5LDEyICsxMDksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtdXRhYmxl
IFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgTWFya2Vk
QmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBz
aXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAgICAgc3Rh
dGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvciosIHNpemVf
dCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7CiAKICAg
ICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CisgICAgICAgIHZv
aWQqIGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogYmxvY2tG
b3IoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZpcnN0QXRvbSgpOworICAg
ICAgICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAgICAgIAogICAgICAgICB2
b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKQEAgLTE4NCwxNSArMTg2LDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNr
ID0gYXRvbVNpemUgLSAxOwogCiAgICAgICAgIGVudW0gQmxvY2tTdGF0ZSB7IE5ldywgRnJlZUxp
c3RlZCwgQWxsb2NhdGVkLCBNYXJrZWQsIFJldGlyZWQgfTsKLSAgICAgICAgdGVtcGxhdGU8Ym9v
bCBjYWxsRGVzdHJ1Y3RvcnM+IEZyZWVMaXN0IHN3ZWVwSGVscGVyKFN3ZWVwTW9kZSA9IFN3ZWVw
T25seSk7CisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZT4gRnJlZUxpc3Qgc3dlZXBI
ZWxwZXJTZWxlY3RSZXNldE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKKyAgICAgICAgZW51
bSBSZXNldE1vZGUgeyBEb250UmVzZXQsIFJlc2V0QmFkbHkgfTsKKyAgICAgICAgdGVtcGxhdGU8
RGVzdHJ1Y3Rpb25Nb2RlLCBSZXNldE1vZGU+IEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0U3Rh
dGVBbmRTd2VlcE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKIAogICAgICAgICB0eXBlZGVm
IGNoYXIgQXRvbVthdG9tU2l6ZV07CiAKICAgICAgICAgTWFya2VkQmxvY2soTWFya2VkQWxsb2Nh
dG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0
dHJpYnV0ZXMmKTsKICAgICAgICAgQXRvbSogYXRvbXMoKTsKLSAgICAgICAgc2l6ZV90IGF0b21O
dW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIGNhbGxEZXN0cnVjdG9yKEhlYXBDZWxs
Kik7Ci0gICAgICAgIHRlbXBsYXRlPEJsb2NrU3RhdGUsIFN3ZWVwTW9kZSwgYm9vbCBjYWxsRGVz
dHJ1Y3RvcnM+IEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAoKTsKKyAgICAgICAgdGVtcGxhdGU8
QmxvY2tTdGF0ZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFJlc2V0TW9kZT4gRnJlZUxp
c3Qgc3BlY2lhbGl6ZWRTd2VlcCgpOwogICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2sqIG1f
cHJldjsKICAgICAgICAgTWFya2VkQmxvY2sqIG1fbmV4dDsKQEAgLTIzNiw2ICsyMzksMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4o
cCkgJiBhdG9tQWxpZ25tZW50TWFzayk7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQqIE1hcmtl
ZEJsb2NrOjpjZWxsQWxpZ24odm9pZCogcCkKKyAgICB7CisgICAgICAgIEJpdHMgYmFzZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYXRvbXMoKSArIGZpcnN0QXRvbSgpKTsKKyAgICAgICAgQml0
cyBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPihwKTsKKyAgICAgICAgYml0cyAtPSBiYXNl
OworICAgICAgICBiaXRzIC09IGJpdHMgJSBjZWxsU2l6ZSgpOworICAgICAgICBiaXRzICs9IGJh
c2U7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihiaXRzKTsKKyAgICB9
CisKICAgICBpbmxpbmUgTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2
b2lkKiBwKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxv
Y2sqPihyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYmxvY2tNYXNrKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjAzOTIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3Rv
cihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsK
ICAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9j
YXRlQXV4aWxpYXJ5KHNpemVfdCk7CiAKICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3Rz
V2l0aERlc3RydWN0b3IoKSB7IHJldHVybiBtX2Rlc3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNw
YWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRob3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9y
bWFsU3BhY2U7IH0KQEAgLTE4Miw2ICsxODMsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNl
OjphbGxvY2F0ZUF1eGlsaQogICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMp
LmFsbG9jYXRlKGJ5dGVzKTsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxv
Y2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9j
YXRvckZvcihieXRlcykudHJ5QWxsb2NhdGUoYnl0ZXMpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogewogICAgIGZvckVhY2hTdWJzcGFjZSgKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMTgsMTAgKzExOCw0MiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1h
cmtTdGFjaygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYg
Y29uc2VydmF0aXZlUm9vdHMpCiB7Ci0gICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVS
b290cy5yb290cygpOworICAgIEhlYXBDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5y
b290cygpOwogICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBhcHBlbmQocm9vdHNb
aV0pOworICAgICAgICBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShyb290c1tpXSk7Cit9CisKK3Zv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KEhlYXBDZWxsKiBoZWFwQ2Vs
bCkKK3sKKyAgICBpZiAoIWhlYXBDZWxsKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNT
RVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7CisgICAgCisgICAgaWYg
KEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoaGVhcENlbGwpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGhlYXBDZWxs
KTsKKyAgICBzd2l0Y2ggKGJsb2NrLT5jZWxsS2luZCgpKSB7CisgICAgY2FzZSBIZWFwQ2VsbDo6
SlNDZWxsOiB7CisgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
aGVhcENlbGwpOworICAgICAgICAKKyAgICAgICAgaWYgKCFqc0NlbGwtPnN0cnVjdHVyZSgpKSB7
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0
YXRlOjpOZXdHcmV5KTsKKworICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhibG9jaywganNDZWxs
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBIZWFwQ2VsbDo6
QXV4aWxpYXJ5OiB7CisgICAgICAgIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChibG9jayk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9IH0KIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFs
dWUgdmFsdWUpCkBAIC0xNjgsMTcgKzIwMCwzNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJr
ZWRBbmRBcHBlbmRUb01hCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpT
Q2VsbCogY2VsbCkKIHsKKyAgICBhcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jazo6YmxvY2tG
b3IoY2VsbCksIGNlbGwpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFj
ayhNYXJrZWRCbG9jayogYmxvY2ssIEpTQ2VsbCogY2VsbCkKK3sKICAgICBBU1NFUlQoSGVhcDo6
aXNNYXJrZWQoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Ci0KKyAgICAK
ICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6
YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7CisgICAgbV9ieXRlc1Zpc2l0ZWQgKz0gYmxvY2st
PmNlbGxTaXplKCk7CiAgICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7CiAKICAgICBpZiAoVU5MSUtF
TFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVy
LT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5
KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFz
ZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFy
a2VkQmxvY2s6OmJsb2NrRm9yKGJhc2UpKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6bm90ZUxp
dmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJsb2NrKiBibG9jaykKK3sKKyAgICBtX3Zpc2l0Q291bnQr
KzsKKyAgICBtX2J5dGVzVmlzaXRlZCArPSBibG9jay0+Y2VsbFNpemUoKTsKK30KKwogY2xhc3Mg
U2V0Q3VycmVudENlbGxTY29wZSB7CiBwdWJsaWM6CiAgICAgU2V0Q3VycmVudENlbGxTY29wZShT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlNDZWxsKiBjZWxsKQpAQCAtMjAyLDkgKzI1Myw5
IEBAIHByaXZhdGU6CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRy
ZW4oY29uc3QgSlNDZWxsKiBjZWxsKQogewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxs
KSk7Ci0KKyAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRo
aXMsIGNlbGwpOwotCisgICAgCiAgICAgbV9jdXJyZW50T2JqZWN0Q2VsbFN0YXRlQmVmb3JlVmlz
aXRpbmcgPSBjZWxsLT5jZWxsU3RhdGUoKTsKICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0
YXRlOjpPbGRCbGFjayk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3
LDggKzM3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBj
bGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7CiBjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CiBj
bGFzcyBIZWFwU25hcHNob3RCdWlsZGVyOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSklU
V3JpdGVCYXJyaWVyOworY2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKIGNsYXNzIFdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXI7CkBAIC0xMDUsNiArMTA3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxG
aW5hbGl6ZXJzKCk7CisgICAgCisgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBhdXhp
bGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBkb24n
dCBkbworICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2Yg
R0MuCisgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOwogCiAgICAgdm9p
ZCBjb3B5TGF0ZXIoSlNDZWxsKiwgQ29weVRva2VuLCB2b2lkKiwgc2l6ZV90KTsKICAgICAKQEAg
LTEyNCwxMCArMTMwLDEzIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9k
ZUVuYWJsZXI7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoSlNWYWx1
ZSk7IC8vIFRoaXMgaXMgcHJpdmF0ZSB0byBlbmNvdXJhZ2UgY2xpZW50cyB0byB1c2UgV3JpdGVC
YXJyaWVyPFQ+LgorICAgIHZvaWQgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkoSGVhcENlbGwqKTsK
ICAgICB2b2lkIGFwcGVuZEhpZGRlbihKU1ZhbHVlKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CiAgICAgdm9pZCBh
cHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKE1h
cmtlZEJsb2NrKiwgSlNDZWxsKik7CisgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFy
a2VkQmxvY2sqKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVl
Um9vdHMoKTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMSArMjksOSBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJF
cnJvci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmgiCiAjaW5jbHVk
ZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDE3ICs0
NzIsNiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgICAg
IHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3Qs
ICpzdHViSW5mbywgRGlyZWN0KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJl
YWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRK
U1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IGJhc2UtPnN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFj
aXR5KCkpOwotICAgIEFTU0VSVCghdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCkuZmFzdFBhdGhT
aG91bGRTdWNjZWVkKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1Zh
bHVlKSkpOwotICAgIGJhc2UtPnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNl
c3Nhcnkodm0sIHN0cnVjdHVyZSk7Ci0gICAgYmFzZS0+cHV0RGlyZWN0KHZtLCBvZmZzZXQsIEpT
VmFsdWU6OmRlY29kZSh2YWx1ZSkpOwotfQotCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlz
U3RyaW5nT3JTeW1ib2woSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUuaXNTdHJp
bmcoKSB8fCB2YWx1ZS5pc1N5bWJvbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDYg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJO
QUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1
aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVT
dG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJv
cGVydHlPZmZzZXQsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5URVJO
QUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCShyZXZpc2lv
biAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiw5ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTW9kdWxlQW5hbHl6ZXIuaCIKIAotI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVz
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5
QmFycmllci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0F1eGlsaWFyeUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7
CitjbGFzcyBWTTsKKworLy8gQW4gQXV4aWxpYXJ5IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQg
ZG9lcyBub3QgdHJ5IHRvIHJlYXNvbiBhYm91dCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8K
Ky8vIGl0LCBvdGhlciB0aGFuIGludGVycHJldGluZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5l
ZWQgYSBiYXJyaWVyLiBJdCdzIE9LIHRvIHVzZSB0aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMg
b3IgYW55IG90aGVyIGtpbmQgb2YgZGF0YSwgc28gbG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVy
YXRvciEoKS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsK
K3B1YmxpYzoKKyAgICBBdXhpbGlhcnlCYXJyaWVyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBBdXhpbGlhcnlCYXJyaWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAg
ICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHNldChWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisg
ICAgY29uc3QgVCYgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQq
IHNsb3QoKSB7IHJldHVybiAmbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFs
dWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOyB9CisgICAgCitwcml2YXRlOgorICAgIFQgbV92
YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFy
cmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorQXV4aWxpYXJ5QmFycmllcjxUPjo6QXV4aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFUmJiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+
OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjAzOTIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNywxMCArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRl
ZE93bmVyLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7
Ci0gICAgdm9pZCogdGVtcDsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFn
ZShpbnRlbmRlZE93bmVyLCBzaXplLCAmdGVtcCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHZvaWQq
IGJhc2UgPSB2bS5oZWFwLmFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIHNpemUpOwor
ICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExOSw3ICsxMTgsOCBA
QCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhl
QmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0
b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
Ci0gICAgaWYgKCF2bS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIsICZ0
aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICB0aGVCYXNlID0gdm0uaGVhcC50cnlSZWFs
bG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIHRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUp
OworICAgIGlmICghdGhlQmFzZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyb21C
YXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTUgQEAgQ2xvbmVkQXJndW1lbnRzKiBD
bG9uZWRBcmd1bWVudHM6OmNyZWF0ZQogICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZvaWQqIHRlbXA7Ci0g
ICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6
ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgdm9pZCogdGVtcCA9IHZtLmhl
YXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwg
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBidXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxl
bmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgdmVjdG9yTGVu
Z3RoOyArK2kpCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAK
ICAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9CiAgICAgICAgIG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPENsb25lZEFyZ3VtZW50cz4odm0uaGVhcCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkg
VmFuV2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAy
MDE1IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDggKzM0LDcgQEAKICNpbmNsdWRlICJJbnRsQ29sbGF0
b3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJKU0Jv
dW5kRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDcgQEAKICNpbmNsdWRlICJJbnRsRGF0ZVRpbWVG
b3JtYXRDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJK
U0JvdW5kRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
T2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjAzOTIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDExICszNCw4IEBACiAjaW5jbHVkZSAiSW50bE51bWJlckZvcm1h
dENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQm91
bmRGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPYmpl
Y3RDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1
ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDM5MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpT
QyB7CiAKKyNpZiAwCisjZGVmaW5lIExPR0lUKCkgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAi
OiAiLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiXG4iKTsKKyNlbHNlCisjZGVmaW5lIExPR0lUKCkg
ZG8geyB9IHdoaWxlKGZhbHNlKQorI2VuZGlmCisKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZ
X0RFU1RSVUNUSUJMRShKU0FycmF5KTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5m
byA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTQXJyYXkpfTsKQEAgLTYxLDYgKzY3LDggQEAgQnV0dGVyZmx5KiBjcmVhdGVBcnJh
eUJ1dHRlcmZseUluRGljdGlvbgogCiB2b2lkIEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4
ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAg
IEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgIXdyaXRhYmxlKTsKICAgICBpZiAoIWlzTGVu
Z3RoV3JpdGFibGUoKSB8fCB3cml0YWJsZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4LDExICsy
NDYsMTMgQEAgdm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZQogLy8gVGhp
cyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9yLCBidXQgbGVhdmVzIHRoZSBuZXcgc3Bh
Y2UgZm9yIGNvdW50IHNsb3RzIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UoVk0mIHZtLCBib29sIGFkZFRvRnJvbnQsIHVuc2lnbmVkIGNvdW50KQogeworICAg
IExPR0lUKCk7CisgICAgCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlT
dG9yYWdlKHZtKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUodm0pLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSh2
bSktPm91dE9mTGluZVNpemUoKTsKLQorICAgIAogICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhh
dmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCiAgICAgQVNTRVJUKCFhZGRUb0Zyb250
IHx8IGNvdW50ID4gc3RvcmFnZS0+bV9pbmRleEJpYXMpOwogCkBAIC0yNTQsNyArMjY0LDggQEAg
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIC8vICAqIGRlc2ly
ZWRDYXBhY2l0eSAtIGhvdyBsYXJnZSBzaG91bGQgd2UgbGlrZSB0byBncm93IHRoZSB2ZWN0b3Ig
dG8gLSBiYXNlZCBvbiAyeCByZXF1aXJlZFZlY3Rvckxlbmd0aC4KIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGgg
PSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxlbmd0aCk7CisgICAgdW5zaWduZWQgb2xk
VmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IG1pbihvbGRWZWN0b3JMZW5ndGgsIGxlbmd0aCk7CiAgICAgQVNTRVJU
KHVzZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8g
Q2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVy
Zmxvdy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0yNzMsMTUgKzI4NCwxOSBAQCBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7CiAgICAgdW5zaWduZWQgbmV3U3RvcmFn
ZUNhcGFjaXR5OworICAgIGJvb2wgYWxsb2NhdGVkTmV3U3RvcmFnZTsKICAgICAvLyBJZiB0aGUg
Y3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28g
bGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KICAgICBpZiAoY3VycmVudENhcGFjaXR5
ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFj
aXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKICAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0
dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSh2bSkpOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkg
PSBjdXJyZW50Q2FwYWNpdHk7CisgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsK
ICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNp
cmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0
aGlzLCBuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0u
aGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBuZXdTaXplKTsKKyAgICAgICAgaWYgKCFu
ZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3Jh
Z2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKKyAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFn
ZSA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gU3RlcCAzOgpAQCAtMzExLDEzICszMjYsMTkgQEAg
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgICAgICBBU1NFUlQo
Y291bnQgKyB1c2VkVmVjdG9yTGVuZ3RoIDw9IG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIG1l
bW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IgKyBjb3VudCwgc3Rv
cmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOwogICAg
ICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNp
emUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihK
U1ZhbHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoMCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGFsbG9jYXRlZE5ld1N0
b3JhZ2UpIHsKKyAgICAgICAgICAgIC8vIFdlIHdpbGwgc2V0IHRoZSB2ZWN0b3JMZW5ndGggdG8g
bmV3VmVjdG9yTGVuZ3RoLiBXZSBwb3B1bGF0ZWQgcmVxdWlyZWRWZWN0b3JMZW5ndGgKKyAgICAg
ICAgICAgIC8vICh1c2VkVmVjdG9yTGVuZ3RoICsgY291bnQpLCB3aGljaCBpcyBsZXNzLiBDbGVh
ciB0aGUgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJlcXVpcmVk
VmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAoKG5ld0FsbG9jQmFzZSAhPSBidXR0ZXJmbHktPmJhc2Uoc3Ry
dWN0dXJlKHZtKSkpIHx8IChuZXdJbmRleEJpYXMgIT0gc3RvcmFnZS0+bV9pbmRleEJpYXMpKSB7
CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6
ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoSlNWYWx1
ZSkgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IG5ld1ZlY3RvciA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAg
ICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkg
PCBuZXdWZWN0b3JMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigp
OworICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Y2xlYXIoKTsKICAgICB9CiAKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRW
ZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKQEAgLTMyOSw4ICszNTAsMTAgQEAgYm9vbCBK
U0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogCiBib29sIEpTQXJyYXk6OnNldExl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgs
IGJvb2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKKyAgICBMT0dJ
VCgpOworICAgIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwotCisg
ICAgCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBzcGFy
c2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lmJy4KICAgICBBU1NFUlQo
aXNMZW5ndGhXcml0YWJsZSgpIHx8IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKIApAQCAtMzkzLDYg
KzQxNiw4IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKIAogYm9v
bCBKU0FycmF5OjphcHBlbmRNZW1jcHkoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIEpTQzo6SlNBcnJheSogb3RoZXJBcnJheSkKIHsKKyAgICBMT0dJVCgpOwor
ICAgIAogICAgIGlmICghY2FuRmFzdENvcHkodm0sIG90aGVyQXJyYXkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTQzMyw2ICs0NTgsOCBAQCBib29sIEpTQXJyYXk6OmFwcGVuZE1lbWNw
eShFeGVjU3RhdGUqIGV4CiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQogeworICAgIExPR0lU
KCk7CisgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
ICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAt
NDk3LDYgKzUyNCw4IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywK
IAogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogeworICAgIExPR0lUKCk7
CisgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAg
ICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CkBAIC01OTQsNiArNjIzLDggQEAgSlNW
YWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogLy8gIC0gcHVzaGluZyB0byBhbiBh
cnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSBy
YW5nZSBlcnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsK
QEAgLTczMCw2ICs3NjEsOCBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBK
U1ZhCiAKIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGV4ZWMsIHVuc2ln
bmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogeworICAgIExPR0lUKCk7CisgICAgCiAg
ICAgYXV0byBhcnJheVR5cGUgPSBpbmRleGluZ1R5cGUoKTsKICAgICBzd2l0Y2ggKGFycmF5VHlw
ZSkgewogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOgpAQCAtNzYwLDYgKzc5Myw4IEBAIEpTQXJy
YXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGUKIAogYm9vbCBKU0FycmF5OjpzaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZShWTSYgdm0sIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9HSVQoKTsKKyAgICAK
ICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICBSRUxFQVNF
X0FTU0VSVChjb3VudCA8PSBvbGRMZW5ndGgpOwogICAgIApAQCAtODY1LDYgKzkwMCw4IEBAIGJv
b2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKIAogYm9vbCBKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkJiBz
dGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgPiAwKTsKIApAQCAt
OTYzLDYgKzEwMDAsOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdU
CiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRv
IGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFn
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0
SW5kZXggPD0gbGVuZ3RoKTsKQEAgLTExMDAsNiArMTEzOSw4IEBAIGJvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50V2l0aEFueUluZGV4aW4KIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVj
U3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogeworICAgIExPR0lUKCk7
CisgICAgCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwogICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOwpAQCAtMTE2Niw2ICsxMjA3LDggQEAgdm9p
ZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogCiB2b2lkIEpTQXJyYXk6OmNv
cHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1l
bnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBMT0dJVCgp
OworICAgIAogICAgIHVuc2lnbmVkIGkgPSBvZmZzZXQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3I7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTkxLDggKzE5MSw4IEBA
IGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KFYKICAgICAgICAgdm0sIGlu
dGVuZGVkT3duZXIsIDAsIDAsIHRydWUsIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRp
YWxMZW5ndGgpLAogICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IoQkFTRV9WRUNUT1JfTEVO
KSk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKLSAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9zcGFyc2VN
YXAuY2xlYXIoKTsKKyAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KQEAgLTIx
NSwxMiArMjE1LDE3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCAK
ICAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAg
ICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0
b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKAogICAg
ICAgICAgICAgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlCiAgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFy
cmF5V2l0aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0
dGVyZmx5KHZtLCAwLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEJBU0VfVkVDVE9SX0xFTjsgKytpKQorICAgICAgICAgICAgYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gY3Jl
YXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwpAQCAtMjM1LDMzICsy
NDAsMzkgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdAogICAgIHVu
c2lnbmVkIG91dE9mTGluZVN0b3JhZ2UgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7
CiAKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseTsKLSAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJh
eVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKSB7CisgICAgSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgaWYgKExJS0VM
WSghaGFzQW55QXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpKSB7CiAgICAgICAgIEFTU0VSVCgK
LSAgICAgICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAg
ICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAg
ICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAg
fHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0KLSAgICAgICAg
dm9pZCogdGVtcDsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBC
dXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5n
dGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAg
fHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzRG91YmxlKGluZGV4
aW5nVHlwZSkKKyAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CisK
KyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0
ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9y
TGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICBpZiAoIXRlbXApCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5
Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKICAgICAgICAgYnV0dGVyZmx5
LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgYnV0dGVyZmx5LT5zZXRQ
dWJsaWNMZW5ndGgoaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5
cGUpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwg
dmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0
b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXAp
KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRy
eUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9m
TGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSk7
CisgICAgICAgIGlmICghdGVtcCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3Jh
Z2UpOwogICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFk
ZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9y
YWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFy
KCk7CiAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3Ro
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAg
IH0KIAogICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRl
cmZseSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5o
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTMgKzI3LDkgQEAKICNp
bmNsdWRlICJKU0NhbGxlZS5oIgogCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJK
U0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
U3RhY2tWaXNpdG9yLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsMjUgKzUxMCwxNSBAQCBBcnJh
eUJ1ZmZlciogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgLy8gdXAuIEJ1dCBpZiB5
b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxs
IGtub3cKICAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBp
dCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCiAgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhp
c09iamVjdCk7CisgICAgVk0mIHZtID0gKmhlYXAtPnZtKCk7CiAgICAgRGVmZXJHQ0ZvckFXaGls
ZSBkZWZlckdDKCpoZWFwKTsKICAgICAKICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4
aW5nSGVhZGVyKCkpOwogCi0gICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgp
OwotICAgIAotICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKLSAg
ICAgICAgJiYgIXRoaXNPYmplY3QtPmJ1dHRlcmZseSgpICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSkgewotICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwotICAg
ICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxl
LgotICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcigKLSAg
ICAgICAgICAgIGJpdHdpc2VfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPnZlY3Rv
cigpKS0+YnV0dGVyZmx5KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKLSAgICAgICAgVk0mIHZtID0gKmhl
YXAtPnZtKCk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwgdGhpc09i
amVjdCwgQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAotICAgICAgICAgICAgdGhp
c09iamVjdC0+YnV0dGVyZmx5KCksIHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKSwKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBmYWxzZSwgMCwgMCkpOwotICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09i
amVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7CisgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHku
c2V0KHZtLCB0aGlzT2JqZWN0LCBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisg
ICAgICAgIHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpLCB2bSwgdGhpc09iamVjdCwgdGhpc09iamVj
dC0+c3RydWN0dXJlKCksCisgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCkpOwogCiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXI7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTIgKzI2
LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRl
ICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywx
NCArMjcsMTAgQEAKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgogCiAjaW5j
bHVkZSAiRXJyb3IuaCIKLSNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5j
bHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjAzOTIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDE0ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRl
ICJFeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01vZHVs
ZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKLSNp
bmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEy
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisjaWYgMAorI2RlZmluZSBMT0dJVCgpIGRhdGFMb2co
UmF3UG9pbnRlcih0aGlzKSwgIjogIiwgV1RGX1BSRVRUWV9GVU5DVElPTiwgIlxuIik7CisjZWxz
ZQorI2RlZmluZSBMT0dJVCgpIGRvIHsgfSB3aGlsZShmYWxzZSkKKyNlbmRpZgorCiAvLyBXZSBr
ZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93
bi4gV2UgdXNlIHRoaXMKIC8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVl
IHRvIGdyb3cgdGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCiAvLyBUaGlzIHZhbHVlIGlzIGNh
cHBlZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBpbgpAQCAtODgs
NzcgKzk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAg
IH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KENvcHlW
aXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXpl
KQotewotICAgIEFTU0VSVChidXR0ZXJmbHkpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAgCi0gICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFj
aXR5OwotICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKLSAgICBib29sIGhh
c0luZGV4aW5nSGVhZGVyID0gdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKLSAgICBpZiAoVU5M
SUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOwotICAgICAgICBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBwcmVDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
ID0gMDsKLSAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90
YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91
bGRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpKSB7
Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmlu
aXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
LQotICAgICAgICAvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzLgotICAgICAgICBQcm9wZXJ0eVN0b3Jh
Z2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKTsKLSAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQt
LTspCi0gICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmll
cigoLS1jdXJyZW50U291cmNlKS0+Z2V0KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKFVOTElL
RUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewotICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIENvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7Ci0gICAg
ICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAo
dGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAg
IGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEo
KTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAg
IGNvdW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAg
ICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJn
ZXQgPSAwOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSAwOwotICAgICAgICAgICAg
ICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbWVtY3B5KGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1f
YnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKG5ld0J1dHRlcmZseSk7Ci0gICAgICAgIHZpc2l0
b3IuZGlkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkp
LCBjYXBhY2l0eUluQnl0ZXMpOwotICAgIH0gCi19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKU09i
amVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0
dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsK
QEAgLTE3NSwxMyArMTEwLDE2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRC
dXR0ZXIKICAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyA9IDA7CiAgICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBIZWFwQ2Vs
bCogYmFzZSA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpOwogCisgICAgQVNTRVJUKEhlYXA6OmhlYXAoYmFzZSkg
PT0gdmlzaXRvci5oZWFwKCkpOworCisgICAgLy8gS2VlcCB0aGUgYnV0dGVyZmx5IGFsaXZlLgor
ICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShiYXNlKTsKKyAgICAKICAgICAvLyBNYXJrIHRoZSBw
cm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIHZpc2l0b3Iu
Y29weUxhdGVyKAotICAgICAgICB0aGlzLCBCdXR0ZXJmbHlDb3B5VG9rZW4sCi0gICAgICAgIGJ1
dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5C
eXRlcyk7CiAgICAgCiAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAg
c3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgewpAQCAtMjI1LDE5ICsxNjMsNiBAQCB2b2lk
IEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYKIH0KIAotdm9pZCBK
U09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNp
dG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0KLSAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlz
T2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7Ci19Ci0KIHZvaWQgSlNPYmplY3Q6OmhlYXBTbmFw
c2hvdChKU0NlbGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxkZXIpCiB7CiAgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTc4MCw2
ICs3MDUsNyBAQCB2b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjCiAKIEJ1
dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZShWTSYgdm0sIHVu
c2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVsZW1lbnRTaXplKQogeworICAgIExPR0lUKCk7CiAgICAg
QVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5
cGUgPSBpbmRleGluZ1R5cGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRl
eGVkUHJvcGVydGllcyhvbGRUeXBlKSk7CkBAIC04MDcsNiArNzMzLDggQEAgQ29udGlndW91c0pT
VmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVk
U3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBu
ZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
SlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OkFsbG9jYXRlSW50MzIpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3
U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXNJbnQzMigpOwpAQCAtODI3LDYgKzc1NSw4IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09i
amVjdDo6Y3JlYXRlSW5pdGkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0s
IGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgbmV3QnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250
aWd1b3VzKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwg
bmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CkBA
IC04MzQsNiArNzY0LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0
aQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoVk0mIHZtLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKKyAgICBMT0dJVCgpOwog
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGlu
Z1R5cGUoKTsKQEAgLTg0OSw2ICs3ODAsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVh
dGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3Vs
dC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7
CisgICAgZm9yIChzaXplX3QgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0
LT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24o
KSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1
dHRlcmZseSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg2Miw2ICs3OTUsMTEgQEAgQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycgogQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhh
c1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigp
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVy
ZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSks
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVybiBtX2J1
dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiB9CkBAIC04ODEsNiArODE5LDExIEBA
IENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWMKIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAg
ICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRT
dHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwogICAg
IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOwogfQpAQCAtOTE3LDcgKzg2
MCw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKIAogICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsK
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3Jh
Z2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIC8vIE5vIG5l
ZWQgdG8gY29weSBlbGVtZW50cy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JM
ZW5ndGg7IGktLTspCisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFu
c2l0aW9uKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwg
c3RvcmFnZS0+YnV0dGVyZmx5KCkpOwpAQCAtOTM4LDExICs4ODMsMTIgQEAgQ29udGlndW91c0Rv
dWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAg
ZG91YmxlKiBjdXJyZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7
CiAgICAgICAgIEpTVmFsdWUgdiA9IGN1cnJlbnQtPmdldCgpOwotICAgICAgICBpZiAoIXYpIHsK
KyAgICAgICAgLy8gTk9URTogU2luY2UgdGhpcyBtYXkgYmUgdXNlZCBkdXJpbmcgaW5pdGlhbGl6
YXRpb24sIHYgY291bGQgYmUgZ2FyYmFnZS4gSWYgaXQncyBnYXJiYWdlLAorICAgICAgICAvLyB0
aGF0IG1lYW5zIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAgICAgIGlmICghdi5p
c0ludDMyKCkpIHsKICAgICAgICAgICAgICpjdXJyZW50QXNEb3VibGUgPSBQTmFOOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHYuaXNJbnQzMigpKTsK
ICAgICAgICAgKmN1cnJlbnRBc0RvdWJsZSA9IHYuYXNJbnQzMigpOwogICAgIH0KICAgICAKQEAg
LTk2NiwxMyArOTEyLDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRv
QXIKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9y
TGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVy
dGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsK
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAg
SlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlm
ICh2KSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBpZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NF
UlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAg
CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0xMDE0LDEzICs5NTgs
MTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAg
ICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3Jh
Z2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUg
PSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgaWYgKHZhbHVlID09
IHZhbHVlKSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7Cisg
ICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNW
YWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVl
ID09IHZhbHVlKQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcisr
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3Rv
cltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUo
dm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEwNDEsMTMgKzk4MywxMSBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9i
dXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3Rv
cmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVu
dHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxl
bmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAg
ICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlz
RW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRp
b24pOwpAQCAtMjcyOSw2ICsyNjY5LDcgQEAgdW5zaWduZWQgSlNPYmplY3Q6OmNvdW50RWxlbWVu
dHMoKQogCiBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgdm0sIHVuc2ln
bmVkIG5ld0xlbmd0aCkKIHsKKyAgICBMT0dJVCgpOwogICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVh
dmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVz
ZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCiAgICAg
Ly8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1
c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2llbnRseS4KICAgICBpZiAobmV3TGVuZ3RoID4g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKQEAgLTI3NTQsNiArMjY5NSw4IEBAIGJvb2wgSlNP
YmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgICAgIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9y
TGVuZ3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdW
ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgICAgICBzZXRCdXR0
ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMjc2OCw2ICsyNzExLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVh
c2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0
aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNl
dEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKQEAg
LTI3NzYsNiArMjcyMSw3IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZN
JiAKIAogYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIHVuc2lnbmVkIGxl
bmd0aCkKIHsKKyAgICBMT0dJVCgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7CiAgICAgCiAgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7
CkBAIC0yNzk5LDggKzI3NDUsMTIgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhW
TSYgdm0sIAogCiAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKClbaV0g
PSBQTmFOOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQ
TmFOOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxl
bmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMjgyMSw2ICsyNzcxLDcgQEAgdm9pZCBKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1
dHRlcgogCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0s
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKKyAgICBMT0dJVCgpOwogICAgIEFT
U0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAKICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRo
aXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0aGUgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjAz
OTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1
ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNs
dWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29tbW9u
SWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1ZGUgIkN1c3Rv
bUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIKICNpbmNsdWRlICJIZWFwLmgi
CkBAIC0xMDMsNyArMTAzLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENv
cHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBoZWFwU25hcHNob3QoSlNDZWxsKiwgSGVhcFNuYXBzaG90QnVpbGRlciYpOwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsK
QEAgLTY4Niw4ICs2ODUsNiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIHZvaWQgc2V0U3RydWN0
dXJlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
Vk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKLSAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJl
YWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3Ry
dWN0dXJlKik7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVj
ZXNzYXJ5KFZNJiwgU3RydWN0dXJlKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNv
bnZlcnRUb0RpY3Rpb25hcnkoVk0mKTsKIApAQCAtNzk3LDcgKzc5NCw2IEBAIHByb3RlY3RlZDoK
ICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKICAgICAgICAg
CiAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVj
dHVyZSopOwotICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSos
IHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhh
dCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKICAgICAvLyBzdG9y
YWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTk0OSw3ICs5NDUsNyBAQCBwcml2
YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9y
YWdlU2xvdyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29weUJhcnJpZXI8QnV0dGVyZmx5PiBt
X2J1dHRlcmZseTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPEJ1dHRlcmZseSo+IG1fYnV0dGVyZmx5
OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fcGFkZGlu
ZzsKQEAgLTE0ODcsOCArMTQ4MywxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEluCiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQo
bmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIHNldFN0cnVjdHVyZUFu
ZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIG5ld1N0cnVjdHVyZSk7Ci0KKyAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG5ld1N0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0g
bmV3Q2FwYWNpdHkpOworICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdDYXBhY2l0eSkKKyAgICAg
ICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOworICAgIGVsc2UgeworICAgICAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRDYXBh
Y2l0eSwgbmV3Q2FwYWNpdHkpOworICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICB9CiAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKQEAgLTE0OTYsMjcgKzE1MDAsNiBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KFZNJiB2bSwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlKQotewotICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIAotICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBu
ZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOyAKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxp
bmVTdG9yYWdlKAotICAgICAgICB2bSwgb2xkQ2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1
Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci19Ci0KLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUpCi17Ci0gICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5l
Y2Vzc2FyeSgKLSAgICAgICAgdm0sIHN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCks
IG5ld1N0cnVjdHVyZSk7Ci19Ci0KIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRPd25EYXRhUHJv
cGVydHkoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lv
biAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAwNiwgMjAwOCwgMjAwOSwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOCwgMjAwOSwgMjAxMi0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
RXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsNiArMjQs
NyBAQAogI2lmbmRlZiBKU09iamVjdElubGluZXNfaAogI2RlZmluZSBKU09iamVjdElubGluZXNf
aAogCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKICNpbmNsdWRlICJFcnJv
ci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCw5IEBACiAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMu
aCIKICNpbmNsdWRlICJFcnJvci5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgotI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjAzOTIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDExIEBACiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVz
LmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU0NCdWlsdGlucy5oIgotI2luY2x1
ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJNaWNy
b3Rhc2suaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiwxMyArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
UHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgotI2luY2x1ZGUgIlNs
b3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMiAr
MjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIK
IAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1
ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5j
bHVkZSAiSlNTdHJpbmdJdGVyYXRvci5oIgogCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0j
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAkocmV2aXNpb24gMjAzOTIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFw
dG9ycy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjks
MTAgQEAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2lu
Y2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVk
ZSAiTWFwUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEs
MTEgQEAKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0
dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0
b3IuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIk1hcFByb3RvdHlwZS5s
dXQuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2
aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBv
cHRpb25TdHJpbmc7CiAgICAgdihib29sLCB0ZXN0VGhlRlRMLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAorICAgIHYoYm9vbCwgcmVzZXRGcmVlQ2VsbHNCYWRseSwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZWFnZXJseVVwZGF0ZVRvcENhbGxGcmFtZSwgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZU9TUkVudHJ5VG9E
RkcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2lu
Y2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiUHJveHlPYmplY3QuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJZGVudGlm
aWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPYmpl
Y3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0
ZVVuaW5pdGlhCiAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksICZ0ZW1wKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgdm9pZCogdGVtcCA9
IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYgKCF0ZW1wKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJh
c2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBidXR0ZXJm
bHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1dHRlcmZseS0+c2V0UHVi
bGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2lu
Y2x1ZGUgIkhlYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNjb3BlLmgiCisj
aW5jbHVkZSAiSGVhcFV0aWwuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCkBAIC0z
OTIsNyArMzkzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAog
ICAgICAgICAgICAgSlNWYWx1ZSBjYWxsZWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZENhbGxl
ZSk7CiAgICAgICAgICAgICBTdGFja0ZyYW1lJiBzdGFja0ZyYW1lID0gc3RhY2tUcmFjZS5mcmFt
ZXMubGFzdCgpOwogICAgICAgICAgICAgYm9vbCBhbHJlYWR5SGFzRXhlY3V0YWJsZSA9ICEhc3Rh
Y2tGcmFtZS5leGVjdXRhYmxlOwotICAgICAgICAgICAgaWYgKCFIZWFwOjppc1ZhbHVlR0NPYmpl
Y3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgY2FsbGVlKSkgeworICAgICAgICAgICAgaWYgKCFI
ZWFwVXRpbDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGNhbGxlZSkp
IHsKICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIYXNFeGVjdXRhYmxlKQogICAgICAgICAg
ICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VW5rbm93bjsKICAg
ICAgICAgICAgICAgICByZXR1cm47CkBAIC00MzcsNyArNDM4LDcgQEAgdm9pZCBTYW1wbGluZ1By
b2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNQb2ludGVyR0NP
YmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgZXhlY3V0YWJsZSkpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoSGVhcFV0aWw6OmlzUG9pbnRlckdDT2JqZWN0SlNDZWxsKGZpbHRlciwg
bWFya2VkQmxvY2tTZXQsIGV4ZWN1dGFibGUpKTsKICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJh
bWVUeXBlID0gRnJhbWVUeXBlOjpFeGVjdXRhYmxlOwogICAgICAgICAgICAgc3RhY2tGcmFtZS5l
eGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICAgICAgICAgIG1fbGl2ZUNlbGxQb2ludGVycy5h
ZGQoZXhlY3V0YWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEzICsyOSwxMSBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVy
LmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIK
ICNpbmNsdWRlICJNYXBEYXRhLmgiCiAjaW5jbHVkZSAiU2V0UHJvdG90eXBlLmgiCi0jaW5jbHVk
ZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTEgQEAKICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JP
cGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJK
U0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMb29rdXAuaCIK
ICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKIAogI2luY2x1ZGUgIlNldFByb3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsyOCw5IEBACiAKICNpbmNsdWRl
ICJFcnJvci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpT
V2Vha01hcC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWFr
TWFwUHJvdG90eXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTEgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNXZWFr
U2V0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRQ
cm90b3R5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2FycmF5LXN0b3JhZ2UtYXJyYXktdW5zaGlmdC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LXN0b3JhZ2UtYXJy
YXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2FycmF5LXN0b3JhZ2UtYXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDggQEAKKy8vQCBydW5EZWZhdWx0Cit2YXIgeCA9IFsyLjUsIDEuNV07Cit4Lmxl
bmd0aCA9IDEwMDAwMDAwMDA7Cit4Lmxlbmd0aCA9IDI7CitBcnJheS5wcm90b3R5cGUudW5zaGlm
dC5jYWxsKHgsIDMuNSk7CitpZiAoeC50b1N0cmluZygpICE9ICIzLjUsMi41LDEuNSIpCisgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29udGlndW91cy1hcnJheS11bnNoaWZ0Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29udGln
dW91cy1hcnJheS11bnNoaWZ0LmpzCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvY29udGlndW91cy1hcnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNiBAQAorLy9AIHJ1bkRlZmF1bHQKK3ZhciB4ID0gWydiJywgJ2EnXTsK
K0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoeCwgJ2MnKTsKK2lmICh4LnRvU3RyaW5nKCkg
IT0gImMsYixhIikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNjcmliZSh4
KTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtYXJy
YXktdW5zaGlmdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2RvdWJsZS1hcnJheS11bnNoaWZ0LmpzCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZG91YmxlLWFycmF5LXVuc2hpZnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2IEBACisvL0AgcnVuRGVmYXVsdAordmFyIHggPSBbMi41LCAx
LjVdOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAzLjUpOworaWYgKHgudG9TdHJp
bmcoKSAhPSAiMy41LDIuNSwxLjUiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiAr
IGRlc2NyaWJlKHgpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2ludDMyLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9pbnQzMi1hcnJheS11bnNoaWZ0LmpzCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW50MzItYXJyYXktdW5zaGlmdC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKy8vQCBydW5EZWZhdWx0Cit2YXIgeCA9
IFsyLCAxXTsKK0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoeCwgMyk7CitpZiAoeC50b1N0
cmluZygpICE9ICIzLDIsMSIpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZGVz
Y3JpYmUoeCk7CisKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE2LTA3LTI5ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQnV0dGVyZmxpZXMgc2hvdWxkIGJl
IGFsbG9jYXRlZCBpbiBBdXhpbGlhcnkgTWFya2VkU3BhY2UgaW5zdGVhZCBvZiBDb3BpZWRTcGFj
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTI1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBUaGUgSlNDIEdDIG5lZWRzIGEgdHJ5RmFzdEFsaWduZWRNYWxsb2MoKSwgYW5kIHRoaXMgZXhw
b3NlcyBzdWNoIGEgZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6Cisg
ICAgICAgIChXVEY6OmZhc3RBbGlnbmVkTWFsbG9jKToKKyAgICAgICAgKFdURjo6dHJ5RmFzdEFs
aWduZWRNYWxsb2MpOgorICAgICAgICAoV1RGOjpmYXN0QWxpZ25lZEZyZWUpOgorICAgICAgICAq
IHd0Zi9GYXN0TWFsbG9jLmg6CisKIDIwMTYtMDctMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIE1ha2UgU3RyaW5nVmlldyBjYXBhYmxlIG9mIGJlaW5nIHBhc3Nl
ZCBvciByZXR1cm5lZCBpbiBvbmx5IDIgcmVnaXN0ZXJzLgpJbmRleDogU291cmNlL1dURi93dGYv
RmFzdE1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA1LTIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTEsIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICog
YXJlIG1ldDoKQEAgLTk3LDYgKzk2LDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVf
dCBhbGlnbm1lbnQKICAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7
CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKSAKK3sKKyAgICByZXR1cm4gX2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7
Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIF9hbGlnbmVkX2Zy
ZWUocCk7CkBAIC0xMTEsNiArMTE1LDEzIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVf
dCBhbGlnbm1lbnQKICAgICByZXR1cm4gcDsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxs
b2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHZvaWQqIHAgPSBudWxs
cHRyOworICAgIHBvc2l4X21lbWFsaWduKCZwLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVy
biBwOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBmcmVlKHAp
OwpAQCAtMjMxLDYgKzI0MiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxp
Z25tZW50CiAgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6bWVtYWxpZ24oYWxpZ25tZW50LCBzaXpl
KTsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6
ZV90IHNpemUpIAoreworICAgIHJldHVybiBibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKGFsaWdu
bWVudCwgc2l6ZSk7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAg
IGJtYWxsb2M6OmFwaTo6ZnJlZShwKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTUzLDYgKzUzLDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEZyZWUo
dm9pZCopOwogCiAvLyBBbGxvY2F0aW9ucyBmcm9tIGZhc3RBbGlnbmVkTWFsbG9jKCkgbXVzdCBi
ZSBmcmVlZCB1c2luZyBmYXN0QWxpZ25lZEZyZWUoKS4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
KiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCopOwog
CiBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqKTsK
QEAgLTEwNyw2ICsxMDgsNyBAQCB1c2luZyBXVEY6OmZhc3RNYWxsb2NTaXplOwogdXNpbmcgV1RG
OjpmYXN0UmVhbGxvYzsKIHVzaW5nIFdURjo6ZmFzdFN0ckR1cDsKIHVzaW5nIFdURjo6ZmFzdFpl
cm9lZE1hbGxvYzsKK3VzaW5nIFdURjo6dHJ5RmFzdEFsaWduZWRNYWxsb2M7CiB1c2luZyBXVEY6
OnRyeUZhc3RDYWxsb2M7CiB1c2luZyBXVEY6OnRyeUZhc3RNYWxsb2M7CiB1c2luZyBXVEY6OnRy
eUZhc3RaZXJvZWRNYWxsb2M7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDM5MjcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEJ1
dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNlIGlu
c3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgTmVlZCB0byAjaW5jbHVkZSBtb3JlIHRoaW5ncyBub3cuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisK
IDIwMTYtMDctMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
Q3Jhc2ggd2l0aCBhbiBJbnZhbGlkIFdlYiBQcm9jZXNzIElQQyBNZXNzYWdlIElEOiBXZWJQYWdl
UHJveHkuQXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2sKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
SlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIk5QSlNPYmplY3QuaCIKICNpbmNsdWRlICJOUFJ1bnRpbWVP
YmplY3RNYXAuaCIKICNpbmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0Vycm9yLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSWRlbnRpZmllcklu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgpJbmRl
eDogU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTYtMDctMjkgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxs
b2NhdGVkIGluIEF1eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRo
ZSBKU0MgR0MgbmVlZHMgdG8gYmUgYWJsZSB0byB0cnlNZW1hbGlnbiwgYW5kIHRoaXMgcmVmYWN0
b3JzIHRoZSBjb2RlIHRvIGV4cG9zZSBzdWNoIGEKKyAgICAgICAgZnVuY3Rpb24uCisKKyAgICAg
ICAgKiBibWFsbG9jL0FsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6
OmFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOgor
ICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZUltcGwpOgorICAgICAgICAoYm1h
bGxvYzo6QWxsb2NhdG9yOjpyZWFsbG9jYXRlKToKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRv
ci5oOgorICAgICAgICAqIGJtYWxsb2MvQ2FjaGUuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hl
OjphbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6dHJ5QWxsb2NhdGUpOgorICAg
ICAgICAqIGJtYWxsb2MvYm1hbGxvYy5oOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjptYWxsb2Mp
OgorICAgICAgICAoYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbik6CisgICAgICAgIChibWFsbG9j
OjphcGk6Om1lbWFsaWduKToKKwogMjAxNi0wNy0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGluIHhjY29u
ZmlnIGZpbGVzIHRvIG1hdGNoIHRoZSBzZGsgbmFtZXMuCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsMTggQEAgdm9p
ZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZQogCiB2b2lkKiBBbGxvY2F0b3I6
OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogeworICAgIGJvb2wgY3Jh
c2hPbkZhaWx1cmUgPSB0cnVlOworICAgIHJldHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBz
aXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVy
ZSA9IGZhbHNlOworICAgIHJldHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFz
aE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplLCBib29sIGNyYXNoT25GYWlsdXJlKQorewogICAgIEJBU1NF
UlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJs
ZWQpIHsKQEAgLTgwLDcgKzkyLDEwIEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90
IGFsaWdubWUKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKHJvdW5kVXBUb011bHRpcGxlT2YoYWxp
Z25tZW50LCBzaXplKSk7CiAKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2so
UGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46
OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAg
ICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAo
Y3Jhc2hPbkZhaWx1cmUpCisgICAgICAgIHJldHVybiBoZWFwLT5hbGxvY2F0ZUxhcmdlKGxvY2ss
IGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGhlYXAtPnRyeUFsbG9jYXRlTGFyZ2UobG9j
aywgYWxpZ25tZW50LCBzaXplKTsKIH0KIAogdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZv
aWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDEyICs0MywxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
KiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAg
dm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIHJlYWxsb2NhdGUo
dm9pZCosIHNpemVfdCk7CiAKICAgICB2b2lkIHNjYXZlbmdlKCk7CiAKIHByaXZhdGU6CisgICAg
dm9pZCogYWxsb2NhdGVJbXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgYm9vbCBjcmFzaE9u
RmFpbHVyZSk7CisgICAgCiAgICAgYm9vbCBhbGxvY2F0ZUZhc3RDYXNlKHNpemVfdCwgdm9pZCom
KTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9DYWNoZS5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKik7CiAgICAgc3RhdGlj
IHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7CkBAIC03OSw2ICs4MCwxNCBAQCBpbmxp
bmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBzaXplCiAgICAgcmV0dXJuIGNhY2hlLT5h
bGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKIH0KIAoraW5saW5lIHZvaWQqIENhY2hlOjp0cnlB
bGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBDYWNoZSogY2Fj
aGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlmICghY2FjaGUpCisg
ICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKGFsaWdubWVudCwgc2l6ZSk7
CisgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNp
emUpOworfQorCiBpbmxpbmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCBzaXplKQogewogICAgIENhY2hlKiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46Omdl
dEZhc3RDYXNlKCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkocmV2aXNpb24gMjAz
OTIwKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDMsNiArNDMsMTIgQEAgaW5saW5lIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkKICAg
ICByZXR1cm4gQ2FjaGU6OmFsbG9jYXRlKHNpemUpOwogfQogCisvLyBSZXR1cm5zIG51bGwgb24g
ZmFpbHVyZS4KK2lubGluZSB2b2lkKiB0cnlNZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gQ2FjaGU6OnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6
ZSk7Cit9CisKIC8vIENyYXNoZXMgb24gZmFpbHVyZS4KIGlubGluZSB2b2lkKiBtZW1hbGlnbihz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwkocmV2aXNpb24gMjAzOTIwKQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNDIwLDcgKzQyMCw3IEBAICRudW1QYXNzZXMg
PSAwCiAjIFdlIGZvcmNlIGFsbCB0ZXN0cyB0byB1c2UgYSBzbWFsbGVyICgxLjVNKSBzdGFjayBz
byB0aGF0IHN0YWNrIG92ZXJmbG93IHRlc3RzIGNhbiBydW4gZmFzdGVyLgogQkFTRV9PUFRJT05T
ID0gWyItLXVzZUZUTEpJVD1mYWxzZSIsICItLXVzZUZ1bmN0aW9uRG90QXJndW1lbnRzPXRydWUi
LCAiLS1tYXhQZXJUaHJlYWRTdGFja1VzYWdlPTE1NzI4NjQiXQogRUFHRVJfT1BUSU9OUyA9IFsi
LS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvckpJVFNvb249
MTAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwPTIwIiwgIi0tdGhyZXNob2xk
Rm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA9MjAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNv
b249MjAiLCAiLS10aHJlc2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwPTIwIiwgIi0tdGhy
ZXNob2xkRm9yRlRMT3B0aW1pemVTb29uPTIwIiwgIi0tbWF4aW11bUV2YWxDYWNoZWFibGVTb3Vy
Y2VMZW5ndGg9MTUwMDAwIl0KLU5PX0NKSVRfT1BUSU9OUyA9IFsiLS11c2VDb25jdXJyZW50SklU
PWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAwIl0KK05PX0NKSVRfT1BU
SU9OUyA9IFsiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0
ZXJXYXJtVXA9MTAwIiwgIi0tcmVzZXRGcmVlQ2VsbHNCYWRseT10cnVlIl0KIEZUTF9PUFRJT05T
ID0gWyItLXVzZUZUTEpJVD10cnVlIl0KIAogJHJ1bmxpc3QgPSBbXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284959</attachid>
            <date>2016-07-30 17:53:14 -0700</date>
            <delta_ts>2016-07-31 20:00:24 -0700</delta_ts>
            <desc>fixed a lot of bugs</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>169147</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNl
IGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFrZSB0aGUgR0MgY29uY3VycmVu
dCAoYnVnIDE0OTQzMiksIHdlIHdvdWxkIGVpdGhlciBuZWVkIHRvIGVuYWJsZSBjb25jdXJyZW50
CisgICAgICAgIGNvcHlpbmcgb3Igd2Ugd291bGQgbmVlZCB0byBub3QgY29weS4gQ29uY3VycmVu
dCBjb3B5aW5nIGNhcnJpZXMgYSAxLTIlIHRocm91Z2hwdXQgb3ZlcmhlYWQKKyAgICAgICAgZnJv
bSB0aGUgYmFycmllcnMgYWxvbmUuIENvbnNpZGVyaW5nIHRoYXQgTWFya2VkU3BhY2UgZG9lcyBh
IGRlY2VudCBqb2Igb2YgYXZvaWRpbmcKKyAgICAgICAgZnJhZ21lbnRhdGlvbiwgaXQncyB1bmxp
a2VseSB0aGF0IGl0J3Mgd29ydGggcGF5aW5nIDEtMiUgdGhyb3VnaHB1dCBmb3IgY29weWluZy4g
U28sIHdlIHdhbnQKKyAgICAgICAgdG8gZ2V0IHJpZCBvZiBjb3BpZWQgc3BhY2UuIFRoaXMgY2hh
bmdlIG1vdmVzIGNvcGllZCBzcGFjZSdzIGJpZ2dlc3QgY2xpZW50IG92ZXIgdG8gbWFya2VkCisg
ICAgICAgIHNwYWNlLgorICAgICAgICAKKyAgICAgICAgTW92aW5nIGJ1dHRlcmZsaWVzIHRvIG1h
cmtlZCBzcGFjZSBtZWFucyBoYXZpbmcgdGhlbSB1c2UgdGhlIG5ldyBBdXhpbGlhcnkgSGVhcENl
bGwKKyAgICAgICAgYWxsb2NhdGlvbiBwYXRoLiBUaGlzIGlzIGEgZmFpcmx5IG1lY2hhbmljYWwg
Y2hhbmdlLiBBdCBhIGhpZ2ggbGV2ZWwgdGhpcyBkb2VzIHRoZXNlIHRoaW5nczoKKyAgICAgICAg
CisgICAgICAgIC0gV2UgdXNlIEF1eGlsaWFyeUJhcnJpZXIgaW5zdGVhZCBvZiBDb3B5QmFycmll
ci4KKyAgICAgICAgCisgICAgICAgIC0gV2UgdXNlIHRyeUFsbG9jYXRlQXV4aWxpYXJ5IGluc3Rl
YWQgb2YgdHJ5QWxsb2NhdGVTdG9yYWdlLiBJIGdvdCByaWQgb2YgdGhlIHNpbGx5CisgICAgICAg
ICAgQ2hlY2tlZEJvb2xlYW4gc3R1ZmYsIHNpbmNlIGl0J3Mgc28gbXVjaCBtb3JlIHRyb3VibGUg
dGhhbiBpdCdzIHdvcnRoLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgSklUcyBoYXZlIHRvIGVt
aXQgaW5saW5lZCBtYXJrZWQgc3BhY2UgYWxsb2NhdGlvbnMgaW5zdGVhZCBvZiBpbmxpbmUgY29w
eSBzcGFjZQorICAgICAgICAgIGFsbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgLSBFdmVy
eW9uZSBoYXMgdG8gZ2V0IHVzZWQgdG8gemVyb2luZyB0aGVpciBidXR0ZXJmbGllcyBhZnRlciBh
bGxvY2F0aW9uIGluc3RlYWQgb2YgcmVseWluZworICAgICAgICAgIG9uIHRoZW0gYmVpbmcgcHJl
LXplcm9lZCBieSB0aGUgR0MuIENvcGllZCBzcGFjZSB3b3VsZCB6ZXJvIHRoaW5ncyBmb3IgeW91
LCB3aGlsZSBtYXJrZWQKKyAgICAgICAgICBzcGFjZSBkb2Vzbid0LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIEl0IHN0aWxsIGZhaWxzIHNvbWUg
aW50ZXJuYWwgZnV6emluZyB0ZXN0cyBhbmQgSSBoYXZlbid0CisgICAgICAgIG1lYXN1cmVkIHBl
cmZvcm1hbmNlIHlldC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5l
d09iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmluaXRpYWxp
emVBcnJheUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0UmlnaHRTaGlmdFNuaXBwZXQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZUhlYXBDZWxsKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVPYmplY3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0b3JGb3JTaXplKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVKU0FycmF5KToKKyAg
ICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkNvbnNlcnZh
dGl2ZVJvb3RzOjpncm93KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAg
ICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6OnJvb3RzKToKKyAgICAgICAgKiBoZWFwL0NvcHlUb2tlbi5oOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0
b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9yYWdlQWxsb2NhdG9y
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Omlz
Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxs
b2NhdGVPYmplY3RPZlR5cGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdWJzcGFjZUZvck9iamVj
dE9mVHlwZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZSk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkRnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZmluZEdDT2JqZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNWYWx1ZUdDT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNQb2ludGVyR0NPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
OjpyZXRpcmUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlQ
b3BGcmVlTGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZUltcGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2sp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxLaW5kKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpoZWFwKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0YWtlTGFzdEFjdGl2ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6dHJ5
Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNBdG9tQWxpZ25lZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjZWxsQWxpZ24pOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tGb3IpOgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0
c1dpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9y
T2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnRyeUFsbG9jYXRl
QXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhp
bGlhcnkpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeSk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwpOgorICAgICAgICAoSlNDOjpTZXRD
dXJyZW50Q2VsbFNjb3BlOjpTZXRDdXJyZW50Q2VsbFNjb3BlKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KiBsbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0F1eGls
aWFyeUJhcnJpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OkF1
eGlsaWFyeUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkF1
eGlsaWFyeUJhcnJpZXI6OnNsb3QpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6c2V0V2l0aG91
dEJhcnJpZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQpOgorICAgICAgICAq
IHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJp
Z2h0KToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6
CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmNyZWF0
ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVu
dGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NhbGxlZS5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRp
Z3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29weUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFj
a2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
bWlzZS5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanM6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorCiAyMDE2LTA3LTI5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIEJ5VmFsSW5mbyBpcyBvbmx5IHVzZWQgaW4gSklUIGVuYWJs
ZWQgZW52aXJvbm1lbnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsOCBAQAog
CQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE0MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9OwogCQkwRjM4QjAxOTE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwICovOyB9OwogCQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYz
OEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5
MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmNwcCAqLzsgfTsKIAkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM5MkM4ODFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCAq
LzsgfTsKIAkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi87
IH07CkBAIC01NzIsNiArNTc0LDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJl
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3
QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTND
ODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUy
MzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQURFNjczMUQ0RDIzQkUwMDc2
ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi87IH07CiAJ
CTBGQUY3RUZEMTY1QkE5MUIwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVCQTkxOTAw
MEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZF
IC8qIEV4aXRLaW5kLmNwcCAqLzsgfTsKQEAgLTI1MTgsNiArMjUyMSw4IEBACiAJCTBGMzhCMDE0
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5oOyBwYXRoID0gZGZnL0RGR0NvbXBp
bGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDE1MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdD
b21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAx
NjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5oOyBwYXRoID0gZGZnL0RGR0Nv
bXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM4RDJBMDFE
NDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVySW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM5MkM4NzFCNDYxODg0MDA4
NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRGdXp6LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOTJDODgxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEZ1enouaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzY1LDYgKzI3NzAsNyBA
QAogCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdB
OEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBREU2NzIxRDREMjNCQzAwNzY4
NDU3IC8qIEhlYXBVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBV
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQUY3RUZBMTY1QkE5MTkwMDBD
ODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4aXRLaW5kLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNDYsNiArNTI1Miw3IEBACiAJCQkJQzI0RDMx
RTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi8sCiAJCQkJQzJFNTI2QkIx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCiAJCQkJQzJFNTI2QkMxNTkwRUYw
MDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAorCQkJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFw
VmVyaWZpZXIuY3BwICovLAogCQkJCUZFN0JBNjBFMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVy
aWZpZXIuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxT
d2VlcGVyLmNwcCAqLywKQEAgLTU2MDcsNiArNTYxNCw4IEBACiAJCQkJRjY5MkE4NEQwMjU1NTk3
RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg0RTAyNTU1OTdE
MDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuaCAqLywKIAkJCQkwRkI3RjM4QTE1RUQ4RTM4MDBG
MTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8sCisJCQkJMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5
IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCAqLywKKwkJCQkwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkg
LyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLywKIAkJCQk1MjY3OEY4QzFBMDMxMDA5MDA2
QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmNwcCAqLywKIAkJCQk1MjY3OEY4RDFBMDMxMDA5
MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggKi8sCiAJCQkJMTQ3QjgzQUEwRTZEQjhD
OTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi8sCkBAIC01NzcyLDcg
KzU3ODEsNiBAQAogCQkJCTcwREMzRTA4MUIyREYyQzcwMDA1NDI5OSAvKiBJdGVyYXRvclByb3Rv
dHlwZS5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAq
LywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAotCQkJCTUz
OUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovLAogCQkJCTBGMkI2
NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKIAkJCQkwRjJCNjZC
NTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAogCQkJCTBGMkI2NkI2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLApAQCAtNTc4
Miw2ICs1NzkwLDcgQEAKIAkJCQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwICovLAogCQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oICovLAogCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlld0lubGluZXMuaCAqLywKKwkJCQk1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyog
SlNBcnJheUlubGluZXMuaCAqLywKIAkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2Fs
bGVlLmNwcCAqLywKQEAgLTcyNjEsNiArNzI3MCw3IEBACiAJCQkJMEYzMzhFMUMxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5
NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJCMUJEMTdGQTQwMDFB
QTQxMyAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKIAkJCQkyQTExMTI0NjE5MkZDRTc5MDA1
RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTc2OTMsNiAr
NzcwMyw3IEBACiAJCQkJQTE1ODdENkUxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZv
cm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMEYxQzAzMEQ2QzAwMzhCQkNBIC8qIFNu
aXBwZXRPcGVyYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3MDFCNERDMTQxMDBENjk4
NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE1ODdENzUxQjREQzFDNjAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzOThGQUIxQzc1MERBNDAwNjBBOTYzIC8q
IEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzIxQjREQzE0MTAwRDY5
ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03
ODE1LDYgKzc4MjYsNyBAQAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdD
QkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0
MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjA2LDM0ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAg
Q29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2Nh
dG9yKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
LSAgICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yID0gdm0uaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5l
bWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0
aCk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcg
KGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5i
cmFuY2hTdWJQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpT
aWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVn
UHRyKHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1Zh
bHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0g
b2xkIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxh
YmxlCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8
IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1Miw3ICs4NTIsNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
V2l0CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkFycmF5
IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpKSk7CiAKICAg
ICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVyZSwg
c2l6ZSk7Ci0gICAgcmVzdWx0LT5idXR0ZXJmbHkoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIGJhY2tp
bmcgc3RvcmUgaXMgaW4gdG8tc3BhY2UuCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4o
cmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTA3LDI3ICszOTA3LDMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIp
OwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BS
LCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3Rv
cmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAor
ICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgbmFuID0gSlNWYWx1
ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMucGF5bG9hZCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBK
U1ZhbHVlIGhvbGU7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSkKKyAgICAgICAgICAgICAgICBob2xlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgUE5hTik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaG9sZSA9IEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMudGFnKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMucGF5
bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKKyAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhW
YXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODY5LDI3ICszODY5LDMxIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0
Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihU
cnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBt
X2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5l
bWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1f
aml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwKKyAgICAgICAgICAgICAgICBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2Rl
LT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBz
dG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkp
KSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRf
dD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVH
UFIsIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoMkdQ
Uik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5s
YWJlbCgpOwotICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5saW5rVG8obG9vcCwgJm1faml0
KTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1f
aml0LmxhYmVsKCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxs
b2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRH
UFIsCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIHNpemUgKz0gb3V0T2ZMaW5lQ2FwYWNpdHkgKiBz
aXplb2YoSlNWYWx1ZSk7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKAotICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0ZWRJbW0zMihz
aXplKSwgc3RvcmFnZUdQUikpOwotICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCi0gICAg
ICAgICAgICBtX2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKHZlY3Rvckxlbmd0aCAqIHNpemVvZihK
U1ZhbHVlKSksIHN0b3JhZ2VHUFIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlR1BSKTsK
KyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9j
YXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2Fz
ZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKAorICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKG91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSksCisgICAgICAgICAgICBzdG9yYWdlR1BSKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdlR1BSKTsKIApAQCAtMTI3LDE0
ICsxMjcsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1Jhd09iamVjdCwgcmVzdWx0R1BSLCBz
dG9yYWdlR1BSLAogICAgICAgICBzdHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aCkpOwogCi0gICAgaWYg
KGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSAmJiBudW1FbGVtZW50cyA8IHZl
Y3Rvckxlbmd0aCkgeworICAgIGlmIChudW1FbGVtZW50cyA8IHZlY3Rvckxlbmd0aCkgewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaGFzRG91Ymxl
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNp
emVvZihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciB2YWx1ZTsKLSAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CisgICAgICAgIGlmIChoYXNEb3VibGUo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1FbGVtZW50czsgaSA8
IHZlY3Rvckxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJ
bW0zMih2YWx1ZS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
Uiwgc2l6ZW9mKGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKHZhbHVlLmFz
Qml0cy5wYXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9m
KGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSk7CkBAIC02NzI2LDE4ICs2NzMyLDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3AKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlz
KTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9
IHNjcmF0Y2gyLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigp
OwogICAgICAgICAKICAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPm91
dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
PT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJh
c2ljU3RvcmFnZSgKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0KLSAgICBtX2ppdC5hZGRQ
dHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2Ny
YXRjaEdQUjEpOworICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICog
c2l6ZW9mKEpTVmFsdWUpOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEo
c2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IHNsb3dQYXRoOworICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BS
MSk7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKQEAgLTY3NzIsMTYgKzY3ODQsMjEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIFN0b3JhZ2VPcGVy
YW5kIG9sZFN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIG9sZFN0b3JhZ2VHUFIgPSBvbGRTdG9yYWdlLmdwcigp
OwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOwogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwotICAgICAgICAKLSAgICBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShUcnVzdGVk
SW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFkZFB0cihKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7CisgICAgCisgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEobmV3U2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQ
YXRoKTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihu
ZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAg
CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBu
ZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3NjYsNyArMzc2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc2l6ZSwgbV9vdXQu
Y29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKG1pbkNhcGFjaXR5KSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVWYXJpYWJs
ZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCi0gICAgICAgICAgICAgICAgc2l6ZSwgc3Ry
dWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgbV9v
dXQuemVyb0V4dFB0cihzaXplKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0
aCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLnZh
bHVlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOwpAQCAtNDA2
Miw5ICs0MDYyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6
ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJ
bnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0
dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFs
bG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4
aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFs
dWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFpbENhc2Up
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuc3Vi
KGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZs
eSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgb2JqZWN0
ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZhaWxDYXNl
KTsKICAgICAgICAgICAgIApAQCAtNjkxOSwxMSArNjkyMSwxMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIExWYWx1ZSBz
dGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAgICAgICAgICAgICAgICAgIGFs
bG9jYXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0
ZXJmbHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKIAog
ICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6ZSkpOworICAgICAgICAgICAg
ICAgICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsgc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGZh
c3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgICAgICAgICAKQEAgLTc3MTcsMTAgKzc3MjEsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
aW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgTFZhbHVl
IHZlY3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAgICAgIGlmICghaGFz
RG91YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBhbHJlYWR5IGlu
aXRpYWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhhc0Rv
dWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQo
Yml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOwogCiAg
ICAgICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFOLgogICAgICAgICBM
QmFzaWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03NzM1LDkgKzc3NDAs
NyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkoSW50MzIsIG9y
aWdpbmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LnBoaShwb2ludGVy
VHlwZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmU2
NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBO
YU4pKSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9w
ZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291dC5zdG9yZTY0KGhv
bGUsIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5k
ZXgoKSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5leHRJbmRleCA9IG1f
b3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291dC5hZGRJbmNvbWlu
Z1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03Nzk4LDEyICs3ODAx
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkp
LCBzbG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVz
ICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9
IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdElu
dFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmFk
ZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdl
KSk7CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgCiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC04MzczLDcgKzgz
NzcsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0K
IAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sg
c2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9jYXRvciwg
TEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNz
ID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAKQEAgLTgzOTQsNyArODM5OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKAogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihyZXN1
bHQsIG1faGVhcHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAgICAgICAgICBhbGxvY2F0b3Is
IG1faGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7Ci0KKyAgICAgICAgCiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtODQwOCw3ICs4NDEyLDcgQEAgcHJp
dmF0ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAg
ICAgICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CkBAIC04NDM2LDQ2ICs4NDQwLDU0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwg
c2xvd1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+
Ci0gICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVl
IHNpemUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2Us
IExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNp
c2VTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBv
ZiB0d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNl
U3RlcCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpp
bXByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVl
IHN1YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVj
dE9mVHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21h
bGxDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJn
ZU9yT3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNC
bG9jayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBM
VmFsdWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1h
cmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBt
X291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpw
cmVjaXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRk
KHNpemUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsK
KyAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291
dC5jb25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291
dC5icmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JP
dmVyc2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJs
b2NrKTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAg
ICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3Jz
LCBzdWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJv
dW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lz
ZVN0ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQu
Y29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52
YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VC
bG9jayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVw
cm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9m
ZikpLAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJ
bnRQdHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxs
eShsYXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFk
ZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNl
X1N1YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9v
dXQuemVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIo
Z2V0TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBt
X291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtl
ZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VB
bGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5w
aGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAg
ICAgCisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0
b3IsIGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZv
clNpemUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUo
bV9vdXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRl
VmFyaWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAg
dm0oKS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xv
d1BhdGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1NjIsMjYgKzg1NzQs
MjQgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAot
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVu
Z3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7Cisg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZv
ckF1eGlsaWFyeURhdGEoCisgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5n
dGggKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9y
YWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xv
d1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigK
LSAgICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFs
dWUpICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5h
ZGQoc3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxK
U0FycmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7Cisg
ICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMiht
X291dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpOwogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIo
dmVjdG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2
ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBO
YU4pKSwKLSAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExW
YWx1ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGlu
dDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NChob2xlLCBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3Bl
cnRpZXNbaV0pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwg
YnV0dGVyZmx5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcFV0
aWwuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTUxLDE2ICs1MiwxNiBAQCBDb25zZXJ2YXRpdmVSb290czo6
Q29uc2VydmF0aXZlUm9vdHMoTWFyCiBDb25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJv
b3RzKCkKIHsKICAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0Fs
bG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2Yo
SlNDZWxsKikpOworICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9v
dHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSGVhcENlbGwqKSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0
aXZlUm9vdHM6Omdyb3coKQogewogICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkg
PT0gaW5saW5lQ2FwYWNpdHkgPyBub25JbmxpbmVDYXBhY2l0eSA6IG1fY2FwYWNpdHkgKiAyOwot
ICAgIEpTQ2VsbCoqIG5ld1Jvb3RzID0gc3RhdGljX2Nhc3Q8SlNDZWxsKio+KE9TQWxsb2NhdG9y
OjpyZXNlcnZlQW5kQ29tbWl0KG5ld0NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKSk7Ci0gICAg
bWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBtX3NpemUgKiBzaXplb2YoSlNDZWxsKikpOworICAg
IEhlYXBDZWxsKiogbmV3Um9vdHMgPSBzdGF0aWNfY2FzdDxIZWFwQ2VsbCoqPihPU0FsbG9jYXRv
cjo6cmVzZXJ2ZUFuZENvbW1pdChuZXdDYXBhY2l0eSAqIHNpemVvZihIZWFwQ2VsbCopKSk7Cisg
ICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBtX3NpemUgKiBzaXplb2YoSGVhcENlbGwqKSk7
CiAgICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6
OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCop
KTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2Nh
cGFjaXR5ICogc2l6ZW9mKEhlYXBDZWxsKikpOwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0
eTsKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7CiB9CkBAIC03MiwxMyArNzMsMTQgQEAgaW5saW5l
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZAogCiAgICAgbV9jb3BpZWRTcGFjZS0+
cGluSWZOZWNlc3NhcnkocCk7CiAKLSAgICBpZiAoIUhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZp
bHRlciwgKm1fYmxvY2tzLCBwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2l6ZSA9
PSBtX2NhcGFjaXR5KQotICAgICAgICBncm93KCk7Ci0KLSAgICBtX3Jvb3RzW21fc2l6ZSsrXSA9
IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHApOworICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2lu
dGVycygKKyAgICAgICAgZmlsdGVyLCAqbV9ibG9ja3MsIHAsCisgICAgICAgIFsmXSAodm9pZCog
cCkgeworICAgICAgICAgICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQorICAgICAgICAgICAg
ICAgIGdyb3coKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9yb290c1ttX3NpemUrK10g
PSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihwKTsKKyAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcmtIb29rPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICsz
MSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSGVh
cENlbGw7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKLWNsYXNzIEpTQ2VsbDsKIAogY2xhc3Mg
Q29uc2VydmF0aXZlUm9vdHMgewogcHVibGljOgpAQCAtNDQsMTEgKzQ0LDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYs
IENvZGVCbG9ja1NldCYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7Ci0gICAgSlNDZWxsKiog
cm9vdHMoKTsKKyAgICBIZWFwQ2VsbCoqIHJvb3RzKCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDEyODsKLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IG5vbklubGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKKyAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihIZWFwQ2Vs
bCopOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgogICAgIHZvaWQgZ2Vu
ZXJpY0FkZFBvaW50ZXIodm9pZCosIFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKQEAgLTU4
LDEyICs1OCwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZ3JvdygpOwogCi0gICAgSlND
ZWxsKiogbV9yb290czsKKyAgICBIZWFwQ2VsbCoqIG1fcm9vdHM7CiAgICAgc2l6ZV90IG1fc2l6
ZTsKICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBNYXJrZWRCbG9ja1NldCogbV9ibG9ja3M7
CiAgICAgQ29waWVkU3BhY2UqIG1fY29waWVkU3BhY2U7Ci0gICAgSlNDZWxsKiBtX2lubGluZVJv
b3RzW2lubGluZUNhcGFjaXR5XTsKKyAgICBIZWFwQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVD
YXBhY2l0eV07CiB9OwogCiBpbmxpbmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkK
QEAgLTcxLDcgKzcxLDcgQEAgaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgp
CiAgICAgcmV0dXJuIG1fc2l6ZTsKIH0KIAotaW5saW5lIEpTQ2VsbCoqIENvbnNlcnZhdGl2ZVJv
b3RzOjpyb290cygpCitpbmxpbmUgSGVhcENlbGwqKiBDb25zZXJ2YXRpdmVSb290czo6cm9vdHMo
KQogewogICAgIHJldHVybiBtX3Jvb3RzOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDYg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgQnV0dGVyZmx5Q29w
eVRva2VuLAogICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0
b3JlQ29weVRva2VuLAogICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgs
MTIgKzU5OCw2IEBAIHZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5V29ya0xpc3QmIHdvcmtM
aXN0ID0gYmxvY2stPndvcmtMaXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENv
cHlXb3JrbGlzdEl0ZW0gaXRlbSA6IHdvcmtMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZW0udG9rZW4oKSA9PSBCdXR0ZXJmbHlDb3B5VG9rZW4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3Is
IEJ1dHRlcmZseUNvcHlUb2tlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKS0+bWV0
aG9kVGFibGUoKS0+Y29weUJhY2tpbmdTdG9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbS5jZWxsKCksIGNvcHlWaXNpdG9yLCBpdGVtLnRva2VuKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MywxMyArODMsMTUgQEAgdHlwZWRlZiBIYXNoQ291bnRlZFNldDxjb25zdCBj
aGFyKj4gVHlwZQogCiBlbnVtIEhlYXBUeXBlIHsgU21hbGxIZWFwLCBMYXJnZUhlYXAgfTsKIAor
Y2xhc3MgSGVhcFV0aWw7CisKIGNsYXNzIEhlYXAgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEhlYXApOwogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNz
IERGRzo6U3BlY3VsYXRpdmVKSVQ7CiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNWYWx1
ZSk7IC8vIDAgZm9yIGltbWVkaWF0ZSB2YWx1ZXMKLSAgICBzdGF0aWMgSGVhcCogaGVhcChjb25z
dCBKU0NlbGwqKTsKKyAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBIZWFwQ2VsbCopOwogCiAg
ICAgLy8gVGhpcyBjb25zdGFudCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRl
IGJldHdlZW4gY2hlY2tzIG9mIG91ciAKICAgICAvLyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVh
cDo6aXNQYWdlZE91dC4gRGVjcmVhc2luZyBpdCB3aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKQEAg
LTEwMiwxMSArMTA0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJr
ZWQoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7
CiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcnVuIGFmdGVyIHN0b3BBbGxvY2F0aW9u
KCkgaXMgY2FsbGVkIGFuZCAKLSAgICAvLyBiZWZvcmUgbGl2ZW5lc3MgZGF0YSBpcyBjbGVhcmVk
IHRvIGJlIGFjY3VyYXRlLgotICAgIHN0YXRpYyBib29sIGlzUG9pbnRlckdDT2JqZWN0KFRpbnlC
bG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQmLCB2b2lkKiBwb2ludGVyKTsKLSAgICBzdGF0aWMg
Ym9vbCBpc1ZhbHVlR0NPYmplY3QoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIEpT
VmFsdWUpOwotCiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7CiAgICAgdm9p
ZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7CiAgICAgdm9pZCB3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CkBAIC0xNTAsNyArMTQ3LDExIEBAIHB1Ymxp
YzoKICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVj
dG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0
ZXMpOyB9CiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1
Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFsbG9j
YXRvckZvcihieXRlcyk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IE1hcmtl
ZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcyk7CisgICAg
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRlcykg
eyByZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAg
ICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdl
U3BhY2UuYWxsb2NhdG9yKCk7IH0KKyAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwq
IGludGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnko
SlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVB
dXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU3Rv
cmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVja2Vk
Qm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQq
Kiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50ZW5k
ZWRPd25lciwgdm9pZCopOwpAQCAtMjY3LDYgKzI2OCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEdDTG9nZ2luZzsKICAgICBmcmllbmQgY2xhc3MgR0NUaHJlYWQ7CiAgICAgZnJpZW5k
IGNsYXNzIEhhbmRsZVNldDsKKyAgICBmcmllbmQgY2xhc3MgSGVhcFV0aWw7CiAgICAgZnJpZW5k
IGNsYXNzIEhlYXBWZXJpZmllcjsKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRlICJIZWFwLmgi
CisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KQEAgLTU5LDcgKzYwLDcg
QEAgaW5saW5lIGJvb2wgSGVhcDo6aXNDb2xsZWN0aW5nKCkKICAgICByZXR1cm4gbV9vcGVyYXRp
b25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9
PSBFZGVuQ29sbGVjdGlvbjsKIH0KIAotaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlND
ZWxsKiBjZWxsKQoraW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSGVhcENlbGwqIGNlbGwp
CiB7CiAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aGVhcCgpOwogfQpA
QCAtMTk5LDcgKzIwMCw3IEBAIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0
cnUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotdm9pZCogSGVhcDo6YWxsb2Nh
dGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRl
T2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKIHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygp
IGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJp
dmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KICAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5l
ZWRzRGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJ
c0ltbW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGli
bGVPYmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjEwLDcgKzIxMSw3IEBAIHZvaWQqIEhlYXA6OmFsbG9j
YXRlT2JqZWN0T2ZUeXBlKHNpemVfdCAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBl
PgotTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvck9iamVjdE9mVHlwZSgp
CitpbmxpbmUgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvck9iamVjdE9m
VHlwZSgpCiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxs
b2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGli
bGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8IChD
bGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjpp
c19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsK
QEAgLTIyMSw3ICsyMjIsNyBAQCBNYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNl
Rm9yCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLU1hcmtlZEFsbG9jYXRvciYg
SGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKK2lubGluZSBNYXJr
ZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMp
CiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVk
IHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmpl
Y3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5
cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252
ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIz
MSw2ICsyMzIsMzcgQEAgTWFya2VkQWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0b3JGb3JPYmplYwog
ICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9
CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVk
T3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNwYWNl
LmFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5H
KQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5
IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9IG1fb2Jq
ZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoYnl0ZXMpOworI2lmIEVOQUJMRShBTExPQ0FU
SU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBieXRlcyBv
ZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCByZXN1bHQp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5kaWYKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCogSGVhcDo6dHJ5UmVhbGxvY2F0ZUF1eGls
aWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXpl
LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICB2b2lkKiBuZXdCYXNlID0gdHJ5QWxsb2NhdGVBdXhp
bGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7CisgICAgaWYgKCFuZXdCYXNlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBtZW1jcHkobmV3QmFzZSwgb2xkQmFzZSwgb2xkU2l6ZSk7
CisgICAgcmV0dXJuIG5ld0Jhc2U7Cit9CisKIGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0
cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZv
aWQqKiBvdXRQdHIpCiB7CiAgICAgQ2hlY2tlZEJvb2xlYW4gcmVzdWx0ID0gbV9zdG9yYWdlU3Bh
Y2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CkBAIC0zNTQsMzMgKzM4Niw2IEBAIGlubGlu
ZSB2b2lkIEhlYXA6OmRpZEZyZWVCbG9jayhzaXplX3QgY2EKICNlbmRpZgogfQogCi1pbmxpbmUg
Ym9vbCBIZWFwOjppc1BvaW50ZXJHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJr
ZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIHZvaWQqIHBvaW50ZXIpCi17Ci0gICAgTWFya2Vk
QmxvY2sqIGNhbmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihwb2ludGVyKTsKLSAgICBp
ZiAoZmlsdGVyLnJ1bGVPdXQoYml0d2lzZV9jYXN0PEJpdHM+KGNhbmRpZGF0ZSkpKSB7Ci0gICAg
ICAgIEFTU0VSVCghY2FuZGlkYXRlIHx8ICFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhj
YW5kaWRhdGUpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghTWFy
a2VkQmxvY2s6OmlzQXRvbUFsaWduZWQocG9pbnRlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjYW5kaWRhdGUtPmlzTGl2ZUNlbGwocG9p
bnRlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1p
bmxpbmUgYm9vbCBIZWFwOjppc1ZhbHVlR0NPYmplY3QoVGlueUJsb29tRmlsdGVyIGZpbHRlciwg
TWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlm
ICghdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNQ
b2ludGVyR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9pZCo+
KHZhbHVlLmFzQ2VsbCgpKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
SGVhcElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEFyZSB5b3UgdGlyZWQgb2Ygd2FpdGluZyBmb3IgYWxs
IG9mIFdlYktpdCB0byBidWlsZCBiZWNhdXNlIHlvdSBjaGFuZ2VkIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiBhCisvLyBmdW5jdGlvbiBpbiBIZWFwSW5saW5lcy5oPyAgRG9lcyBpdCBib3RoZXIgeW91
IHRoYXQgeW91J3JlIHdhaXRpbmcgb24gcmVidWlsZGluZyB0aGUgSlMgRE9NCisvLyBiaW5kaW5n
cyBldmVuIHRob3VnaCB5b3VyIGNoYW5nZSBpcyBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIG9u
bHkgMiAuY3BwIGZpbGVzPyAgVGhlbiBIZWFwVXRpbC5oCisvLyBpcyBmb3IgeW91ISAgRXZlcnl0
aGluZyBpbiB0aGlzIGNsYXNzIHNob3VsZCBiZSBhIHN0YXRpYyBtZXRob2QgdGhhdCB0YWtlcyBh
IEhlYXAmIGlmIG5lZWRlZC4KKy8vIFRoaXMgaXMgYSBmcmllbmQgb2YgSGVhcCwgc28geW91IGNh
biBhY2Nlc3MgYWxsIG9mIEhlYXAncyBwcml2YXRlcy4KKy8vCisvLyBUaGlzIGVuZHMgdXAgYmVp
bmcgYW4gaXNzdWUgYmVjYXVzZSBIZWFwIGV4cG9zZXMgYSBsb3Qgb2YgbWV0aG9kcyB0aGF0IG91
Z2h0IHRvIGJlIGlubGluZSBmb3IKKy8vIHBlcmZvcm1hbmNlIG9yIHRoYXQgbXVzdCBiZSBpbmxp
bmUgYmVjYXVzZSB0aGV5IGFyZSB0ZW1wbGF0ZXMuICBUaGlzIGNsYXNzIG91Z2h0IHRvIGNvbnRh
aW4KKy8vIG1ldGhvZHMgdGhhdCBhcmUgdXNlZCBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBjb2xsZWN0b3IsIG9yIGZvciB1bnVzdWFsIGNsaWVudHMgdGhhdCBuZWVkCisvLyB0byByZWFj
aCBkZWVwIGludG8gdGhlIGNvbGxlY3RvciBmb3Igc29tZSByZWFzb24uICBEb24ndCBwdXQgdGhp
bmdzIGluIGhlcmUgdGhhdCB3b3VsZCBjYXVzZSB5b3UKKy8vIHRvIGhhdmUgdG8gaW5jbHVkZSBp
dCBmcm9tIG1vcmUgdGhhbiBhIGhhbmRmdWwgb2YgcGxhY2VzLCBzaW5jZSB0aGF0IHdvdWxkIGRl
ZmVhdCB0aGUgcHVycG9zZS4KKy8vIFRoaXMgY2xhc3MgaXNuJ3QgaGVyZSB0byBsb29rIHByZXR0
eS4gIEl0J3MgdG8gbGV0IHVzIGhhY2sgdGhlIEdDIG1vcmUgZWFzaWx5IQorCitjbGFzcyBIZWFw
VXRpbCB7CitwdWJsaWM6CisgICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJ1biBhZnRlciBz
dG9wQWxsb2NhdGlvbigpIGlzIGNhbGxlZCBhbmQgCisgICAgLy8gYmVmb3JlIGxpdmVuZXNzIGRh
dGEgaXMgY2xlYXJlZCB0byBiZSBhY2N1cmF0ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgorICAgIHN0YXRpYyB2b2lkIGZpbmRHQ09iamVjdFBvaW50ZXJzKAorICAgICAgICBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIHZvaWQqIHBh
c3NlZFBvaW50ZXIsCisgICAgICAgIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBj
aGFyKiBwb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHBhc3NlZFBvaW50ZXIpOworICAgIAor
ICAgICAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKHBv
aW50ZXIpOworICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBhIGJ1dHRlcmZseSBwb2ludGVy
IHRvIHBvaW50IHBhc3QgdGhlIGVuZCBvZiBhIGJ1dHRlcmZseS4gQ2hlY2sgdGhpcyBub3cuCisg
ICAgICAgIGlmIChwb2ludGVyIDw9IGJpdHdpc2VfY2FzdDxjaGFyKj4oY2FuZGlkYXRlKSArIHNp
emVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgICAgIC8vIFdlIG1heSBiZSBpbnRlcmVz
dGVkIGluIHRoZSBsYXN0IGNlbGwgb2YgdGhlIHByZXZpb3VzIE1hcmtlZEJsb2NrLgorICAgICAg
ICAgICAgY2hhciogcHJldmlvdXNQb2ludGVyID0gcG9pbnRlciAtIHNpemVvZihJbmRleGluZ0hl
YWRlcikgLSAxOworICAgICAgICAgICAgTWFya2VkQmxvY2sqIHByZXZpb3VzQ2FuZGlkYXRlID0g
TWFya2VkQmxvY2s6OmJsb2NrRm9yKHByZXZpb3VzUG9pbnRlcik7CisgICAgICAgICAgICBpZiAo
IWZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRzPihwcmV2aW91c0NhbmRpZGF0ZSkpCisg
ICAgICAgICAgICAgICAgJiYgbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMocHJldmlvdXND
YW5kaWRhdGUpCisgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNDYW5kaWRhdGUtPmNlbGxLaW5k
KCkgPT0gSGVhcENlbGw6OkF1eGlsaWFyeSkgeworICAgICAgICAgICAgICAgIHByZXZpb3VzUG9p
bnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihwcmV2aW91c0NhbmRpZGF0ZS0+Y2VsbEFsaWduKHBy
ZXZpb3VzUG9pbnRlcikpOworICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0NhbmRpZGF0ZS0+
aXNMaXZlQ2VsbChwcmV2aW91c1BvaW50ZXIpKQorICAgICAgICAgICAgICAgICAgICBmdW5jKHBy
ZXZpb3VzUG9pbnRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAg
aWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRzPihjYW5kaWRhdGUpKSkgeworICAg
ICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRh
aW5zKGNhbmRpZGF0ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisg
ICAgICAgIGlmICghbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHRyeVBvaW50ZXIgPSBbJl0gKHZvaWQq
IHBvaW50ZXIpIHsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmlzTGl2ZUNlbGwocG9pbnRl
cikpCisgICAgICAgICAgICAgICAgZnVuYyhwb2ludGVyKTsKKyAgICAgICAgfTsKKyAgICAKKyAg
ICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2VsbEtpbmQoKSA9PSBIZWFwQ2VsbDo6SlNDZWxsKSB7Cisg
ICAgICAgICAgICBpZiAoIU1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKHBvaW50ZXIpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICB0cnlQb2ludGVyKHBv
aW50ZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIC8v
IEEgYnV0dGVyZmx5IGNvdWxkIHBvaW50IGludG8gdGhlIG1pZGRsZSBvZiBhbiBvYmplY3QuCisg
ICAgICAgIGNoYXIqIGFsaWduZWRQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNhbmRpZGF0
ZS0+Y2VsbEFsaWduKHBvaW50ZXIpKTsKKyAgICAgICAgdHJ5UG9pbnRlcihhbGlnbmVkUG9pbnRl
cik7CisgICAgCisgICAgICAgIC8vIEFsc28sIGEgYnV0dGVyZmx5IGNvdWxkIHBvaW50IGF0IHRo
ZSBlbmQgb2YgYW4gb2JqZWN0IHBsdXMgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKS4gSW4gdGhhdAor
ICAgICAgICAvLyBjYXNlLCB0aGlzIGlzIHBvaW50aW5nIHRvIHRoZSBvYmplY3QgdG8gdGhlIHJp
Z2h0IG9mIHRoZSBvbmUgd2Ugc2hvdWxkIGJlIG1hcmtpbmcuCisgICAgICAgIGlmIChjYW5kaWRh
dGUtPmF0b21OdW1iZXIoYWxpZ25lZFBvaW50ZXIpID4gTWFya2VkQmxvY2s6OmZpcnN0QXRvbSgp
CisgICAgICAgICAgICAmJiBwb2ludGVyIDw9IGFsaWduZWRQb2ludGVyICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSkKKyAgICAgICAgICAgIHRyeVBvaW50ZXIoYWxpZ25lZFBvaW50ZXIgLSBjYW5k
aWRhdGUtPmNlbGxTaXplKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1BvaW50
ZXJHQ09iamVjdEpTQ2VsbCgKKyAgICAgICAgVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2Vk
QmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCBjb25zdCB2b2lkKiBwb2ludGVyKQorICAgIHsKKyAg
ICAgICAgTWFya2VkQmxvY2sqIGNhbmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihwb2lu
dGVyKTsKKyAgICAgICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRzPihjYW5k
aWRhdGUpKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1hcmtlZEJsb2Nr
U2V0LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIU1hcmtlZEJsb2NrOjppc0F0b21B
bGlnbmVkKHBvaW50ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbmRpZGF0ZS0+
Y2VsbEtpbmQoKSAhPSBIZWFwQ2VsbDo6SlNDZWxsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmlzTGl2ZUNlbGwocG9pbnRlcikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNWYWx1ZUdDT2JqZWN0KAorICAgICAg
ICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQs
IEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gaXNQb2ludGVyR0NPYmplY3RK
U0NlbGwoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHZhbHVlLmFz
Q2VsbCgpKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
cmV0aXJlKE1hcmtlZEJsb2NrCiAgICAgYmxvY2stPmRpZFJldGlyZUJsb2NrKGZyZWVMaXN0KTsK
IH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIoc2l6
ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRo
b3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90IGJ5dGVzKQogewogICAgIGlmIChtX2N1cnJlbnRCbG9j
aykgewogICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2sgPT0gbV9uZXh0QmxvY2tUb1N3ZWVw
KTsKQEAgLTEyMCwxMSArMTIwLDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eVBvcEZyZWUKICAgICByZXR1cm4gaGVhZDsKIH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhzaXplX3QgYnl0ZXMpCiB7CiAgICAg
QVNTRVJUKCFtX2hlYXAtPmlzQnVzeSgpKTsKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9IEFsbG9jYXRpb247Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVIZWxwZXIo
Ynl0ZXMpOworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJ
bXBsKGJ5dGVzKTsKIAogICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVy
YXRpb247CiAgICAgQVNTRVJUKHJlc3VsdCB8fCAhbV9jdXJyZW50QmxvY2spOwpAQCAtMTQ4LDYg
KzE0OCwxOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAKIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCiB7Cisg
ICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nh
c2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCit7CisgICAgYm9vbCBjcmFzaE9u
RmFpbHVyZSA9IGZhbHNlOworICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChieXRlcywg
Y3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2VJbXBsKHNpemVfdCBieXRlcywgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAgICBBU1NF
UlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBk
b1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKCk7CiAKQEAgLTE1NSwyOSArMTY3LDM0IEBAIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgKICAgICBBU1NFUlQoIW1fZnJlZUxp
c3QuaGVhZCk7CiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0LmJ5dGVzKTsKICAg
ICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgdm9pZCogcmVz
dWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgCiAgICAgaWYg
KExJS0VMWShyZXN1bHQgIT0gMCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCiAgICAg
aWYgKG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRo
b3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIEFTU0VSVCghbV9oZWFwLT5zaG91bGRDb2xsZWN0
KCkpOwogICAgIAotICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGFsbG9jYXRlQmxvY2soYnl0ZXMp
OwotICAgIEFTU0VSVChibG9jayk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gdHJ5QWxsb2Nh
dGVCbG9jayhieXRlcyk7CisgICAgaWYgKCFibG9jaykgeworICAgICAgICBpZiAoY3Jhc2hPbkZh
aWx1cmUpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAgICAgYWRkQmxvY2so
YmxvY2spOwogICAgICAgICAKLSAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAg
cmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyhieXRlcyk7CiAgICAgQVNTRVJU
KHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTWFya2VkQmxvY2sqIE1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGVCbG9jayhzaXplX3QgYnl0ZXMpCitNYXJrZWRCbG9jayogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUJsb2NrKHNpemVfdCBieXRlcykKIHsKICAgICBzaXplX3Qg
bWluQmxvY2tTaXplID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKICAgICBzaXplX3QgbWluQWxs
b2NhdGlvblNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21T
aXplPihzaXplb2YoTWFya2VkQmxvY2spKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJr
ZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKQEAgLTE4Niw3ICsyMDMsNyBAQCBNYXJrZWRCbG9j
ayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsCiAKICAgICBzaXplX3QgY2VsbFNpemUgPSBt
X2NlbGxTaXplID8gbV9jZWxsU2l6ZSA6IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRC
bG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKIAotICAgIHJldHVybiBNYXJrZWRCbG9jazo6Y3JlYXRl
KCptX2hlYXAsIHRoaXMsIGJsb2NrU2l6ZSwgY2VsbFNpemUsIG1fYXR0cmlidXRlcyk7CisgICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBj
ZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJs
b2NrKE1hcmtlZEJsb2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiAr
NTMsNyBAQCBwdWJsaWM6CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQg
Y2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KICAgICB2
b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAg
ICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE1hcmtlZEJsb2NrKiB0YWtl
TGFzdEFjdGl2ZUJsb2NrKCkKICAgICB7CkBAIC03MSwxMCArNzIsMTIgQEAgcHVibGljOgogICAg
CiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uo
c2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFs
bG9jYXRlSGVscGVyKHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxs
b2NhdGVTbG93Q2FzZShzaXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKHNp
emVfdCwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0
Q29sbGVjdGluZyhzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rp
bmdJbXBsKHNpemVfdCk7CiAgICAgdm9pZCogdHJ5UG9wRnJlZUxpc3Qoc2l6ZV90KTsKLSAgICBN
YXJrZWRCbG9jayogYWxsb2NhdGVCbG9jayhzaXplX3QpOworICAgIE1hcmtlZEJsb2NrKiB0cnlB
bGxvY2F0ZUJsb2NrKHNpemVfdCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxl
Y3Rpb25zSWZOZWVkZWQoKTsKICAgICB2b2lkIHJldGlyZShNYXJrZWRCbG9jayosIE1hcmtlZEJs
b2NrOjpGcmVlTGlzdCYpOwogICAgIApAQCAtMTEzLDIxICsxMTYsMzUgQEAgaW5saW5lIHZvaWQg
TWFya2VkQWxsb2NhdG9yOjppbml0KEhlYXAqIAogICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVf
dCBieXRlcykKK3sKKyAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0
LmhlYWQ7CisgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgeworICAgICAgICB2b2lkKiByZXN1bHQg
PSB0cnlBbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiAhQVNT
RVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgbWVtc2V0KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBtX2ZyZWVMaXN0LmhlYWQg
PSBoZWFkLT5uZXh0OworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQo
aGVhZCwgMHhDRCwgYnl0ZXMpOworICAgIHJldHVybiBoZWFkOworfQorCiBpbmxpbmUgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgTWFya2VkQmxv
Y2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwogICAgIGlmIChVTkxJS0VMWSgh
aGVhZCkpIHsKICAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdGVTbG93Q2FzZShieXRlcyk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7Ci0j
ZW5kaWYKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1zZXQo
cmVzdWx0LCAweENELCBieXRlcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0jaWZuZGVmIE5ERUJVRwotICAg
IG1lbXNldChoZWFkLCAweENELCBieXRlcyk7Ci0jZW5kaWYKKyAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKKyAgICAgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKICAgICByZXR1cm4gaGVh
ZDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNw
cAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMzIgQEAgbmFtZXNwYWNlIEpT
QyB7CiBzdGF0aWMgY29uc3QgYm9vbCBjb21wdXRlQmFsYW5jZSA9IGZhbHNlOwogc3RhdGljIHNp
emVfdCBiYWxhbmNlOwogCi1NYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwJiBo
ZWFwLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3Qg
Y2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCitzdGF0aWMg
Ym9vbCByZXNldEZyZWVDZWxsc0JhZGx5KCkKK3sKKyAgICByZXR1cm4gIUFTU0VSVF9ESVNBQkxF
RCB8fCBPcHRpb25zOjpyZXNldEZyZWVDZWxsc0JhZGx5KCk7Cit9CisKK3N0YXRpYyB2b2lkIHJl
c2V0QmFkbHkodm9pZCogYmFzZSwgc2l6ZV90IHNpemUpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IHNpemUgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOyBpLS07KSB7CisgICAgICAgIHN0YXRpY19j
YXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSlbaV0gPSBKU1ZhbHVlOjplbmNvZGUoCisgICAgICAg
ICAgICBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDY2NiAqIDgp
KSk7CisgICAgfQorfQorCitNYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OnRyeUNyZWF0ZShIZWFw
JiBoZWFwLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXpl
X3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAg
ICAgaWYgKGNvbXB1dGVCYWxhbmNlKSB7CiAgICAgICAgIGJhbGFuY2UrKzsKICAgICAgICAgaWYg
KCEoYmFsYW5jZSAlIDEwKSkKICAgICAgICAgICAgIGRhdGFMb2coIk1hcmtlZEJsb2NrIEJhbGFu
Y2U6ICIsIGJhbGFuY2UsICJcbiIpOwogICAgIH0KLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBu
ZXcgKE5vdE51bGwsIGZhc3RBbGlnbmVkTWFsbG9jKGJsb2NrU2l6ZSwgY2FwYWNpdHkpKSBNYXJr
ZWRCbG9jayhhbGxvY2F0b3IsIGNhcGFjaXR5LCBjZWxsU2l6ZSwgYXR0cmlidXRlcyk7CisgICAg
dm9pZCogYmxvY2tTcGFjZSA9IHRyeUZhc3RBbGlnbmVkTWFsbG9jKGJsb2NrU2l6ZSwgY2FwYWNp
dHkpOworICAgIGlmICghYmxvY2tTcGFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
aWYgKHJlc2V0RnJlZUNlbGxzQmFkbHkoKSkKKyAgICAgICAgcmVzZXRCYWRseShibG9ja1NwYWNl
LCBjYXBhY2l0eSk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBibG9j
a1NwYWNlKSBNYXJrZWRCbG9jayhhbGxvY2F0b3IsIGNhcGFjaXR5LCBjZWxsU2l6ZSwgYXR0cmli
dXRlcyk7CiAgICAgaGVhcC5kaWRBbGxvY2F0ZUJsb2NrKGNhcGFjaXR5KTsKICAgICByZXR1cm4g
YmxvY2s7CiB9CkBAIC05MiwxMSArMTEwLDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpj
YWxsRGVzdHJ1Y3RvcigKICAgICBjZWxsLT56YXAoKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxv
Y2s6OkJsb2NrU3RhdGUgYmxvY2tTdGF0ZSwgTWFya2VkQmxvY2s6OlN3ZWVwTW9kZSBzd2VlcE1v
ZGUsIGJvb2wgY2FsbERlc3RydWN0b3JzPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkJsb2NrU3Rh
dGUgYmxvY2tTdGF0ZSwgTWFya2VkQmxvY2s6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0
aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpSZXNldE1vZGUgcmVzZXRNb2Rl
PgogTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJsb2NrOjpzcGVjaWFsaXplZFN3ZWVwKCkK
IHsKICAgICBBU1NFUlQoYmxvY2tTdGF0ZSAhPSBBbGxvY2F0ZWQgJiYgYmxvY2tTdGF0ZSAhPSBG
cmVlTGlzdGVkKTsKLSAgICBBU1NFUlQoISghY2FsbERlc3RydWN0b3JzICYmIHN3ZWVwTW9kZSA9
PSBTd2VlcE9ubHkpKTsKKyAgICBBU1NFUlQoIShkZXN0cnVjdGlvbk1vZGUgPT0gRG9lc05vdE5l
ZWREZXN0cnVjdGlvbiAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CiAKICAgICAvLyBUaGlz
IHByb2R1Y2VzIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2gg
dGhlIGJsb2NrLgogICAgIC8vIFRoaXMgaXMgZmluZSwgc2luY2UgdGhlIGFsbG9jYXRpb24gY29k
ZSBtYWtlcyBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUKQEAgLTEwOSwxMSArMTI3LDEzIEBAIE1h
cmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3BlY2kKIAogICAgICAgICBIZWFwQ2Vs
bCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmF0b21zKClbaV0pOwog
Ci0gICAgICAgIGlmIChjYWxsRGVzdHJ1Y3RvcnMgJiYgYmxvY2tTdGF0ZSAhPSBOZXcpCisgICAg
ICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gTmVlZHNEZXN0cnVjdGlvbiAmJiBibG9ja1N0YXRl
ICE9IE5ldykKICAgICAgICAgICAgIGNhbGxEZXN0cnVjdG9yKGNlbGwpOwogCiAgICAgICAgIGlm
IChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CiAgICAgICAgICAgICBGcmVlQ2VsbCog
ZnJlZUNlbGwgPSByZWludGVycHJldF9jYXN0PEZyZWVDZWxsKj4oY2VsbCk7CisgICAgICAgICAg
ICBpZiAocmVzZXRNb2RlID09IFJlc2V0QmFkbHkpCisgICAgICAgICAgICAgICAgcmVzZXRCYWRs
eShmcmVlQ2VsbCwgY2VsbFNpemUoKSk7CiAgICAgICAgICAgICBmcmVlQ2VsbC0+bmV4dCA9IGhl
YWQ7CiAgICAgICAgICAgICBoZWFkID0gZnJlZUNlbGw7CiAgICAgICAgICAgICArK2NvdW50OwpA
QCAtMTM5LDE3ICsxNTksMjUgQEAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJsb2NrOjpz
d2VlcAogICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKIAogICAgIGlmIChtX2F0dHJpYnV0ZXMu
ZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN3ZWVwSGVs
cGVyPHRydWU+KHN3ZWVwTW9kZSk7Ci0gICAgcmV0dXJuIHN3ZWVwSGVscGVyPGZhbHNlPihzd2Vl
cE1vZGUpOworICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RSZXNldE1vZGU8TmVlZHNE
ZXN0cnVjdGlvbj4oc3dlZXBNb2RlKTsKKyAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RSZXNl
dE1vZGU8RG9lc05vdE5lZWREZXN0cnVjdGlvbj4oc3dlZXBNb2RlKTsKK30KKwordGVtcGxhdGU8
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZT4KK01hcmtlZEJsb2NrOjpGcmVlTGlzdCBN
YXJrZWRCbG9jazo6c3dlZXBIZWxwZXJTZWxlY3RSZXNldE1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9k
ZSkKK3sKKyAgICBpZiAocmVzZXRGcmVlQ2VsbHNCYWRseSgpKQorICAgICAgICByZXR1cm4gc3dl
ZXBIZWxwZXJTZWxlY3RTdGF0ZUFuZFN3ZWVwTW9kZTxkZXN0cnVjdGlvbk1vZGUsIFJlc2V0QmFk
bHk+KHN3ZWVwTW9kZSk7CisgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U3RhdGVBbmRTd2Vl
cE1vZGU8ZGVzdHJ1Y3Rpb25Nb2RlLCBEb250UmVzZXQ+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBs
YXRlPGJvb2wgY2FsbERlc3RydWN0b3JzPgotTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpzd2VlcEhlbHBlcihTd2VlcE1vZGUgc3dlZXBNb2RlKQordGVtcGxhdGU8RGVzdHJ1Y3Rp
b25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OlJlc2V0TW9kZSByZXNldE1vZGU+
CitNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnN3ZWVwSGVscGVyU2VsZWN0U3Rh
dGVBbmRTd2VlcE1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKICAgICBjYXNlIE5ldzoKICAgICAgICAgQVNTRVJUKHN3ZWVwTW9kZSA9PSBTd2VlcFRv
RnJlZUxpc3QpOwotICAgICAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxOZXcsIFN3ZWVwVG9G
cmVlTGlzdCwgY2FsbERlc3RydWN0b3JzPigpOworICAgICAgICByZXR1cm4gc3BlY2lhbGl6ZWRT
d2VlcDxOZXcsIFN3ZWVwVG9GcmVlTGlzdCwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+KCk7
CiAgICAgY2FzZSBGcmVlTGlzdGVkOgogICAgICAgICAvLyBIYXBwZW5zIHdoZW4gYSBibG9jayB0
cmFuc2l0aW9ucyB0byBmdWxseSBhbGxvY2F0ZWQuCiAgICAgICAgIEFTU0VSVChzd2VlcE1vZGUg
PT0gU3dlZXBUb0ZyZWVMaXN0KTsKQEAgLTE2MCw4ICsxODgsOCBAQCBNYXJrZWRCbG9jazo6RnJl
ZUxpc3QgTWFya2VkQmxvY2s6OnN3ZWVwCiAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwogICAg
IGNhc2UgTWFya2VkOgogICAgICAgICByZXR1cm4gc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlz
dAotICAgICAgICAgICAgPyBzcGVjaWFsaXplZFN3ZWVwPE1hcmtlZCwgU3dlZXBUb0ZyZWVMaXN0
LCBjYWxsRGVzdHJ1Y3RvcnM+KCkKLSAgICAgICAgICAgIDogc3BlY2lhbGl6ZWRTd2VlcDxNYXJr
ZWQsIFN3ZWVwT25seSwgY2FsbERlc3RydWN0b3JzPigpOworICAgICAgICAgICAgPyBzcGVjaWFs
aXplZFN3ZWVwPE1hcmtlZCwgU3dlZXBUb0ZyZWVMaXN0LCBkZXN0cnVjdGlvbk1vZGUsIHJlc2V0
TW9kZT4oKQorICAgICAgICAgICAgOiBzcGVjaWFsaXplZFN3ZWVwPE1hcmtlZCwgU3dlZXBPbmx5
LCBkZXN0cnVjdGlvbk1vZGUsIHJlc2V0TW9kZT4oKTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTIgKzEwOSwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIG11dGFibGUgUmV0dXJuVHlwZSBtX2NvdW50OwogICAg
ICAgICB9OwogCi0gICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRlKEhlYXAmLCBNYXJr
ZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxs
b2NhdG9yQXR0cmlidXRlcyYpOworICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIHRyeUNyZWF0
ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNp
emUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKICAgICAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShIZWFwJiwgTWFya2VkQmxvY2sqKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0F0b21B
bGlnbmVkKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgdm9pZCogY2VsbEFsaWduKHZvaWQqKTsKICAg
ICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiBibG9ja0Zvcihjb25zdCB2b2lkKik7CiAgICAgICAg
IHN0YXRpYyBzaXplX3QgZmlyc3RBdG9tKCk7CisgICAgICAgIHNpemVfdCBhdG9tTnVtYmVyKGNv
bnN0IHZvaWQqKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUo
KTsKIApAQCAtMTg0LDE1ICsxODYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgYXRvbUFsaWdubWVudE1hc2sgPSBhdG9tU2l6ZSAtIDE7CiAKICAgICAg
ICAgZW51bSBCbG9ja1N0YXRlIHsgTmV3LCBGcmVlTGlzdGVkLCBBbGxvY2F0ZWQsIE1hcmtlZCwg
UmV0aXJlZCB9OwotICAgICAgICB0ZW1wbGF0ZTxib29sIGNhbGxEZXN0cnVjdG9ycz4gRnJlZUxp
c3Qgc3dlZXBIZWxwZXIoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKKyAgICAgICAgdGVtcGxhdGU8
RGVzdHJ1Y3Rpb25Nb2RlPiBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdFJlc2V0TW9kZShTd2Vl
cE1vZGUgPSBTd2VlcE9ubHkpOworICAgICAgICBlbnVtIFJlc2V0TW9kZSB7IERvbnRSZXNldCwg
UmVzZXRCYWRseSB9OworICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGUsIFJlc2V0TW9k
ZT4gRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RTdGF0ZUFuZFN3ZWVwTW9kZShTd2VlcE1vZGUg
PSBTd2VlcE9ubHkpOwogCiAgICAgICAgIHR5cGVkZWYgY2hhciBBdG9tW2F0b21TaXplXTsKIAog
ICAgICAgICBNYXJrZWRCbG9jayhNYXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNp
emVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYpOwogICAgICAgICBBdG9t
KiBhdG9tcygpOwotICAgICAgICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAg
ICAgIHZvaWQgY2FsbERlc3RydWN0b3IoSGVhcENlbGwqKTsKLSAgICAgICAgdGVtcGxhdGU8Qmxv
Y2tTdGF0ZSwgU3dlZXBNb2RlLCBib29sIGNhbGxEZXN0cnVjdG9ycz4gRnJlZUxpc3Qgc3BlY2lh
bGl6ZWRTd2VlcCgpOworICAgICAgICB0ZW1wbGF0ZTxCbG9ja1N0YXRlLCBTd2VlcE1vZGUsIERl
c3RydWN0aW9uTW9kZSwgUmVzZXRNb2RlPiBGcmVlTGlzdCBzcGVjaWFsaXplZFN3ZWVwKCk7CiAg
ICAgICAgIAogICAgICAgICBNYXJrZWRCbG9jayogbV9wcmV2OwogICAgICAgICBNYXJrZWRCbG9j
ayogbV9uZXh0OwpAQCAtMjM2LDYgKzIzOSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
cmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDxCaXRzPihwKSAmIGF0b21BbGlnbm1lbnRNYXNrKTsK
ICAgICB9CiAKKyAgICBpbmxpbmUgdm9pZCogTWFya2VkQmxvY2s6OmNlbGxBbGlnbih2b2lkKiBw
KQorICAgIHsKKyAgICAgICAgQml0cyBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPihhdG9t
cygpICsgZmlyc3RBdG9tKCkpOworICAgICAgICBCaXRzIGJpdHMgPSByZWludGVycHJldF9jYXN0
PEJpdHM+KHApOworICAgICAgICBiaXRzIC09IGJhc2U7CisgICAgICAgIGJpdHMgLT0gYml0cyAl
IGNlbGxTaXplKCk7CisgICAgICAgIGJpdHMgKz0gYmFzZTsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJpdHMpOworICAgIH0KKwogICAgIGlubGluZSBNYXJrZWRCbG9j
ayogTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNvbnN0IHZvaWQqIHApCiAgICAgewogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNYXJrZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0
cz4ocCkgJiBibG9ja01hc2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxs
b2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxp
YXJ5KHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKIAog
ICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsgcmV0dXJu
IG1fZGVzdHJ1Y3RvclNwYWNlOyB9CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dp
dGhvdXREZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpAQCAtMTgyLDYgKzE4
MywxMSBAQCBpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlQXV4aWxpCiAgICAgcmV0
dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcykuYWxsb2NhdGUoYnl0ZXMpOwogfQogCitp
bmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCBieXRl
cykKK3sKKyAgICByZXR1cm4gYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS50cnlBbGxvY2F0
ZShieXRlcyk7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBN
YXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAg
Zm9yRWFjaFN1YnNwYWNlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCwxMCArMTE4
LDQyIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKCkKIAogdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKIHsKLSAg
ICBKU0NlbGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7CisgICAgSGVhcENl
bGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7CiAgICAgc2l6ZV90IHNpemUg
PSBjb25zZXJ2YXRpdmVSb290cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpCi0gICAgICAgIGFwcGVuZChyb290c1tpXSk7CisgICAgICAgIGFwcGVuZEpTQ2Vs
bE9yQXV4aWxpYXJ5KHJvb3RzW2ldKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlND
ZWxsT3JBdXhpbGlhcnkoSGVhcENlbGwqIGhlYXBDZWxsKQoreworICAgIGlmICghaGVhcENlbGwp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NFUlQoIW1faXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uKTsKKyAgICAKKyAgICBpZiAoSGVhcDo6dGVzdEFuZFNldE1hcmtlZCho
ZWFwQ2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBNYXJrZWRCbG9jayogYmxvY2sg
PSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoaGVhcENlbGwpOworICAgIHN3aXRjaCAoYmxvY2stPmNl
bGxLaW5kKCkpIHsKKyAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGw6IHsKKyAgICAgICAgSlNDZWxs
KiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAgIAorICAg
ICAgICBpZiAoIWpzQ2VsbC0+c3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworCisgICAgICAg
IGFwcGVuZFRvTWFya1N0YWNrKGJsb2NrLCBqc0NlbGwpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEhlYXBDZWxsOjpBdXhpbGlhcnk6IHsKKyAgICAgICAgbm90
ZUxpdmVBdXhpbGlhcnlDZWxsKGJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gfQogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNWYWx1ZSB2YWx1ZSkKQEAgLTE2OCwxNyArMjAw
LDM2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWEKIAogdm9pZCBT
bG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQogeworICAgIGFwcGVu
ZFRvTWFya1N0YWNrKE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKSwgY2VsbCk7Cit9CisKK3Zv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKE1hcmtlZEJsb2NrKiBibG9jaywgSlND
ZWxsKiBjZWxsKQorewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgQVNT
RVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKLQorICAgIAogICAgIG1fdmlzaXRDb3VudCsrOwotICAg
IG1fYnl0ZXNWaXNpdGVkICs9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+Y2VsbFNpemUo
KTsKKyAgICBtX2J5dGVzVmlzaXRlZCArPSBibG9jay0+Y2VsbFNpemUoKTsKICAgICBtX3N0YWNr
LmFwcGVuZChjZWxsKTsKIAogICAgIGlmIChVTkxJS0VMWShtX2hlYXBTbmFwc2hvdEJ1aWxkZXIp
KQogICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUoY2VsbCk7CiB9CiAK
K3ZvaWQgU2xvdFZpc2l0b3I6Om1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkKK3sKKyAg
ICBpZiAoSGVhcDo6dGVzdEFuZFNldE1hcmtlZChiYXNlKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChNYXJrZWRCbG9jazo6YmxvY2tGb3IoYmFzZSkp
OworfQorCit2b2lkIFNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxv
Y2sqIGJsb2NrKQoreworICAgIG1fdmlzaXRDb3VudCsrOworICAgIG1fYnl0ZXNWaXNpdGVkICs9
IGJsb2NrLT5jZWxsU2l6ZSgpOworfQorCiBjbGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlIHsKIHB1
YmxpYzoKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBKU0NlbGwqIGNlbGwpCkBAIC0yMDIsOSArMjUzLDkgQEAgcHJpdmF0ZToKIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7
CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKLQorICAgIAogICAgIFNldEN1cnJl
bnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7Ci0KKyAgICAKICAgICBt
X2N1cnJlbnRPYmplY3RDZWxsU3RhdGVCZWZvcmVWaXNpdGluZyA9IGNlbGwtPmNlbGxTdGF0ZSgp
OwogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok9sZEJsYWNrKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjAz
OTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsOCArMzcsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsK
IGNsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIEhlYXBTbmFwc2hvdEJ1aWxkZXI7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBKSVRXcml0ZUJhcnJpZXI7CitjbGFzcyBNYXJr
ZWRCbG9jazsKIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBXZWFrOwogY2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKQEAgLTEwNSw2
ICsxMDcsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsK
ICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICAKKyAgICAv
LyBUaGlzIGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3
ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCisgICAgLy8gdGhpcyB0aGVuIHRo
ZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KKyAgICB2b2lkIG1hcmtBdXhpbGlh
cnkoY29uc3Qgdm9pZCogYmFzZSk7CiAKICAgICB2b2lkIGNvcHlMYXRlcihKU0NlbGwqLCBDb3B5
VG9rZW4sIHZvaWQqLCBzaXplX3QpOwogICAgIApAQCAtMTI0LDEwICsxMzAsMTMgQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChKU1ZhbHVlKTsgLy8gVGhpcyBpcyBwcml2YXRlIHRv
IGVuY291cmFnZSBjbGllbnRzIHRvIHVzZSBXcml0ZUJhcnJpZXI8VD4uCisgICAgdm9pZCBhcHBl
bmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2VsbCopOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpT
VmFsdWUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRU
b01hcmtTdGFjayhKU0NlbGwqKTsKICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCop
OworICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soTWFya2VkQmxvY2sqLCBKU0NlbGwqKTsKKyAg
ICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChNYXJrZWRCbG9jayopOwogICAgIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwogICAgIHZvaWQgbWVyZ2VP
cGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lv
biAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlw
dENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSw5IEBACiAjaW5jbHVk
ZSAiRGVidWdnZXJTY29wZS5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSWRlbnRp
ZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCi0jaW5jbHVkZSAiSlNDZWxs
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0phdmFTY3Jp
cHRDYWxsRnJhbWVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsMTcgKzQ3Miw2IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFz
ZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwogfQog
Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQ
dXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7Ci0KLSAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gYmFz
ZS0+c3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQVNTRVJUKCF2bS5o
ZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKS5mYXN0UGF0aFNob3VsZFN1Y2NlZWQoc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgYmFzZS0+c2V0U3Ry
dWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKLSAg
ICBiYXNlLT5wdXREaXJlY3Qodm0sIG9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7Ci19
Ci0KIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTdHJpbmdPclN5bWJvbChKU1ZhbHVlIHZh
bHVlKQogewogICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygpIHx8IHZhbHVlLmlzU3ltYm9sKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRT
dHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8q
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFs
dWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE9w
dGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5B
TDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJ
bmZvKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9N
b2R1bGVBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDkg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNb2R1bGVBbmFseXplci5o
IgogCi0jaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU01vZHVsZVJl
Y29yZC5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFZNOworCisvLyBBbiBBdXhp
bGlhcnkgYmFycmllciBpcyBhIGJhcnJpZXIgdGhhdCBkb2VzIG5vdCB0cnkgdG8gcmVhc29uIGFi
b3V0IHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQgaW50bworLy8gaXQsIG90aGVyIHRoYW4gaW50ZXJw
cmV0aW5nIGEgZmFsc2lzaCB2YWx1ZSBhcyBub3QgbmVlZCBhIGJhcnJpZXIuIEl0J3MgT0sgdG8g
dXNlIHRoaXMgZm9yIGVpdGhlcgorLy8gSlNDZWxscyBvciBhbnkgb3RoZXIga2luZCBvZiBkYXRh
LCBzbyBsb25nIGFzIGl0IHJlc3BvbmRzIHRvIG9wZXJhdG9yISgpLgordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIEF1eGlsaWFyeUJhcnJpZXIgeworcHVibGljOgorICAgIEF1eGlsaWFyeUJh
cnJpZXIoKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEF1eGlsaWFy
eUJhcnJpZXIoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIHZvaWQgY2xlYXIoKSB7IG1f
dmFsdWUgPSBUKCk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQg
c2V0KFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgCisgICAgVCogc2xvdCgpIHsgcmV0dXJuICZtX3ZhbHVl
OyB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEh
bV92YWx1ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXRX
aXRob3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVCBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFU+CitBdXhpbGlhcnlCYXJyaWVyPFQ+
OjpBdXhpbGlhcnlCYXJyaWVyKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVSYmIHZhbHVlKQorewor
ICAgIG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKG93bmVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVu
YW1lIFU+Cit2b2lkIEF1eGlsaWFyeUJhcnJpZXI8VD46OnNldChWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIFUmJiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsK
KyAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lcy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEwICszNyw5IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoVk0mIHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKLSAgICB2b2lkKiB0ZW1wOwogICAgIHNp
emVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJ
bmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGludGVuZGVkT3duZXIsIHNpemUsICZ0
ZW1wKSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmhlYXAuYWxsb2NhdGVB
dXhpbGlhcnkoaW50ZW5kZWRPd25lciwgc2l6ZSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBm
cm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMTE5LDcgKzExOCw4IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Z3Jvd0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNh
cGFjaXR5KTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFj
aXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwog
ICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUs
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBpZiAoIXZtLmhlYXAudHJ5UmVh
bGxvY2F0ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUp
KQorICAgIHRoZUJhc2UgPSB2bS5oZWFwLnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRP
d25lciwgdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgaWYgKCF0aGVCYXNlKQogICAg
ICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlD
YXBhY2l0eSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDEyICs0OCwxNSBAQCBDbG9uZWRBcmd1bWVudHMqIENsb25lZEFyZ3VtZW50czo6Y3JlYXRlCiAg
ICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgdm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
ICZ0ZW1wKSkKKyAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShu
dWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAg
ICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiAwOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpOwogICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAg
ICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKIAogICAgIENsb25lZEFyZ3VtZW50cyogcmVz
dWx0ID0KICAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8Q2xvbmVkQXJndW1lbnRz
Pih2bS5oZWFwKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRv
clByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsMTAgKzI3LDggQEAKICNpbmNsdWRlICJHZW5lcmF0b3JQcm90b3R5cGUuaCIKIAog
I2luY2x1ZGUgIkpTQ0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIK
LSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
CiAjaW5jbHVkZSAiR2VuZXJhdG9yUHJvdG90eXBlLmx1dC5oIgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDIwMzky
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFu
ZHkgVmFuV2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChD
KSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDggKzM0LDcgQEAKICNpbmNsdWRlICJJbnRsQ29s
bGF0b3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJK
U0JvdW5kRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
T2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDIwMzky
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDcgQEAKICNpbmNsdWRlICJJbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRl
ICJKU0JvdW5kRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDExICszMyw4IEBACiAjaW5jbHVkZSAiSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgotI2luY2x1
ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDggQEAK
ICNpbmNsdWRlICJJbnRsRGF0ZVRpbWVGb3JtYXQuaCIKICNpbmNsdWRlICJJbnRsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxMSArMzQsOCBAQAogI2luY2x1ZGUgIkludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rp
b24uaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3Ry
dWN0b3IuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDYgKzQxLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogCisj
aWYgMAorI2RlZmluZSBMT0dJVCgpIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogIiwgV1RG
X1BSRVRUWV9GVU5DVElPTiwgIlxuIik7CisjZWxzZQorI2RlZmluZSBMT0dJVCgpIGRvIHsgfSB3
aGlsZShmYWxzZSkKKyNlbmRpZgorCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVD
VElCTEUoSlNBcnJheSk7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5OjpzX2luZm8gPSB7IkFy
cmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U0FycmF5KX07CkBAIC02MSw2ICs2Nyw4IEBAIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJm
bHlJbkRpY3Rpb24KIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUq
IGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBBU1NFUlQo
aXNMZW5ndGhXcml0YWJsZSgpIHx8ICF3cml0YWJsZSk7CiAgICAgaWYgKCFpc0xlbmd0aFdyaXRh
YmxlKCkgfHwgd3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKQEAgLTIzOCwxMSArMjQ2LDEzIEBA
IHZvaWQgSlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWUKIC8vIFRoaXMgbWV0aG9k
IG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIGZvciBj
b3VudCBzbG90cyB1bmNsZWFyZWQuCiBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNl
KFZNJiB2bSwgYm9vbCBhZGRUb0Zyb250LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBMT0dJVCgp
OworICAgIAogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZSh2
bSk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUodm0pLT5vdXRP
ZkxpbmVTaXplKCk7Ci0KKyAgICAKICAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRs
ZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgogICAgIEFTU0VSVCghYWRkVG9Gcm9udCB8fCBjb3Vu
dCA+IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKIApAQCAtMjU0LDcgKzI2NCw4IEBAIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNp
dHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFz
ZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxl
bmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JM
ZW5ndGggPSBtaW4ob2xkVmVjdG9yTGVuZ3RoLCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVj
dG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRo
YXQgcmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2Fm
ZSBmYXNoaW9uLgogICAgIGlmIChjb3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1
c2VkVmVjdG9yTGVuZ3RoKQpAQCAtMjczLDE1ICsyODQsMTkgQEAgYm9vbCBKU0FycmF5Ojp1bnNo
aWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwogICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0
eTsKKyAgICBib29sIGFsbG9jYXRlZE5ld1N0b3JhZ2U7CiAgICAgLy8gSWYgdGhlIGN1cnJlbnQg
c3RvcmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKGJ1dCBub3QgdG9vIGxhcmdlISkg
dGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQuCiAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSA+IGRlc2ly
ZWRDYXBhY2l0eSAmJiBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGN1cnJlbnRDYXBhY2l0eSwgcmVx
dWlyZWRWZWN0b3JMZW5ndGgpKSB7CiAgICAgICAgIG5ld0FsbG9jQmFzZSA9IGJ1dHRlcmZseS0+
YmFzZShzdHJ1Y3R1cmUodm0pKTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVu
dENhcGFjaXR5OworICAgICAgICBhbGxvY2F0ZWROZXdTdG9yYWdlID0gZmFsc2U7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBw
cm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFj
aXR5KSk7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgbmV3
U2l6ZSwgJm5ld0FsbG9jQmFzZSkpCisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmhlYXAudHJ5
QWxsb2NhdGVBdXhpbGlhcnkodGhpcywgbmV3U2l6ZSk7CisgICAgICAgIGlmICghbmV3QWxsb2NC
YXNlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNp
dHkgPSBkZXNpcmVkQ2FwYWNpdHk7CisgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSB0cnVl
OwogICAgIH0KIAogICAgIC8vIFN0ZXAgMzoKQEAgLTMxMSwxMyArMzI2LDE5IEBAIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICAgICAgQVNTRVJUKGNvdW50ICsg
dXNlZFZlY3Rvckxlbmd0aCA8PSBuZXdWZWN0b3JMZW5ndGgpOwogICAgICAgICBtZW1tb3ZlKG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1f
dmVjdG9yLCBzaXplb2YoSlNWYWx1ZSkgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKICAgICAgICAgbWVt
bW92ZShuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBidXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBzaXplb2YoSlNWYWx1ZSkg
KiBwcm9wZXJ0eVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKDApKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhbGxvY2F0ZWROZXdTdG9yYWdlKSB7
CisgICAgICAgICAgICAvLyBXZSB3aWxsIHNldCB0aGUgdmVjdG9yTGVuZ3RoIHRvIG5ld1ZlY3Rv
ckxlbmd0aC4gV2UgcG9wdWxhdGVkIHJlcXVpcmVkVmVjdG9yTGVuZ3RoCisgICAgICAgICAgICAv
LyAodXNlZFZlY3Rvckxlbmd0aCArIGNvdW50KSwgd2hpY2ggaXMgbGVzcy4gQ2xlYXIgdGhlIGRp
ZmZlcmVuY2UuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXF1aXJlZFZlY3Rvckxl
bmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CisgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSh2
bSkpKSB8fCAobmV3SW5kZXhCaWFzICE9IHN0b3JhZ2UtPm1faW5kZXhCaWFzKSkgewogICAgICAg
ICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUs
IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1Zh
bHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IoMCkpOwogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yLCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNl
ZFZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBuZXdWZWN0
b3IgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVj
dG9yTGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBuZXdWZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAg
ICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7
CiAgICAgfQogCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVu
Z3RoKG5ld1ZlY3Rvckxlbmd0aCk7CkBAIC0zMjksOCArMzUwLDEwIEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKIAogYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRo
cm93RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9HSVQoKTsKKyAg
ICAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKLQorICAgIAogICAg
IC8vIElmIHRoZSBsZW5ndGggaXMgcmVhZCBvbmx5IHRoZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUs
IHNvIHNob3VsZCBlbnRlciB0aGUgZm9sbG93aW5nICdpZicuCiAgICAgQVNTRVJUKGlzTGVuZ3Ro
V3JpdGFibGUoKSB8fCBzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CiAKQEAgLTM5Myw2ICs0MTYsOCBA
QCBib29sIEpTQXJyYXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCiAKIGJvb2wgSlNBcnJh
eTo6YXBwZW5kTWVtY3B5KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCB1bnNpZ25lZCBzdGFydElu
ZGV4LCBKU0M6OkpTQXJyYXkqIG90aGVyQXJyYXkpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAg
ICBpZiAoIWNhbkZhc3RDb3B5KHZtLCBvdGhlckFycmF5KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC00MzMsNiArNDU4LDggQEAgYm9vbCBKU0FycmF5OjphcHBlbmRNZW1jcHkoRXhlY1N0
YXRlKiBleAogCiBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKKyAgICBMT0dJVCgpOworICAg
IAogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgc3dp
dGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTQ5Nyw2ICs1
MjQsOCBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAKIEpTVmFs
dWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBMT0dJVCgpOworICAgIAog
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgCiAgICAg
c3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewpAQCAtNTk0LDYgKzYyMyw4IEBAIEpTVmFsdWUgSlNB
cnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8gYW4gYXJyYXkgb2Yg
bGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJy
b3IuCiB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
eworICAgIExPR0lUKCk7CisgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CkBAIC03MzAs
NiArNzYxLDggQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogCiBK
U0FycmF5KiBKU0FycmF5OjpmYXN0U2xpY2UoRXhlY1N0YXRlJiBleGVjLCB1bnNpZ25lZCBzdGFy
dEluZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIGF1dG8g
YXJyYXlUeXBlID0gaW5kZXhpbmdUeXBlKCk7CiAgICAgc3dpdGNoIChhcnJheVR5cGUpIHsKICAg
ICBjYXNlIEFycmF5V2l0aERvdWJsZToKQEAgLTc2MCw2ICs3OTMsOCBAQCBKU0FycmF5KiBKU0Fy
cmF5OjpmYXN0U2xpY2UoRXhlY1N0YXRlJiBlCiAKIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdp
dGhBcnJheVN0b3JhZ2UoVk0mIHZtLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3Vu
dCwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgdW5z
aWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
Y291bnQgPD0gb2xkTGVuZ3RoKTsKICAgICAKQEAgLTg2NSw2ICs5MDAsOCBAQCBib29sIEpTQXJy
YXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAKIGJvb2wgSlNBcnJheTo6c2hpZnRDb3Vu
dFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCYgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50ID4gMCk7CiAKQEAgLTk2Myw2ICsx
MDAwLDggQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSB1bnNoaWZ0IGNhbiBiZSBoYW5kbGVkLCBmYWxzZSB0byBmYWxsYmFj
ay4gICAgCiBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlKQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICBSRUxFQVNFX0FTU0VSVChzdGFydEluZGV4IDw9
IGxlbmd0aCk7CkBAIC0xMTAwLDYgKzExMzksOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dFdpdGhBbnlJbmRleGluCiAKIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBl
eGVjLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncykKIHsKKyAgICBMT0dJVCgpOworICAgIAog
ICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKQEAgLTExNjYsNiArMTIwNyw4IEBAIHZvaWQgSlNBcnJh
eTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1
bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgTE9HSVQoKTsKKyAgICAK
ICAgICB1bnNpZ25lZCBpID0gb2Zmc2V0OwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVj
dG9yOwogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE5MSw4ICsxOTEsOCBAQCBpbmxpbmUg
QnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShWCiAgICAgICAgIHZtLCBpbnRlbmRlZE93
bmVyLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3Ro
KSwKICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOwogICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAg
c3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFy
KCk7CisgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSAwOwogICAgIHJldHVybiBidXR0ZXJmbHk7CiB9CkBAIC0yMTUsMTIgKzIx
NSwxNyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAgICAgICAg
IGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIo
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVCgKICAgICAgICAgICAg
IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZQogICAgICAgICAgICAgfHwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhB
cnJheVN0b3JhZ2UpOwogICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseSh2
bSwgMCwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBC
QVNFX1ZFQ1RPUl9MRU47ICsraSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNyZWF0ZVdpdGhC
dXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKQEAgLTIzNSwzMyArMjQwLDM5IEBA
IGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXQKICAgICB1bnNpZ25lZCBv
dXRPZkxpbmVTdG9yYWdlID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogCiAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHk7Ci0gICAgaWYgKExJS0VMWSghaGFzQW55QXJyYXlTdG9yYWdl
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkgeworICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIGlmIChMSUtFTFkoIWhhc0Fu
eUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKSkgewogICAgICAgICBBU1NFUlQoCi0gICAgICAg
ICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAg
IHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBo
YXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgIHx8IGhhc0Nv
bnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotCi0gICAgICAgIHZvaWQqIHRl
bXA7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSkKKyAgICAgICAgICAgIHx8IGhhc0lu
dDMyKGluZGV4aW5nVHlwZSkKKyAgICAgICAgICAgIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUp
CisgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOworCisgICAgICAg
IHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIsIEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgaWYgKCF0ZW1wKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJh
c2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CiAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVj
dG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVu
Z3RoKGluaXRpYWxMZW5ndGgpOwotICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxl
bmd0aDsgKytpKQogICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gUE5hTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKLSAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0
ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9y
YWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSkpOworICAgICAg
ICBpZiAoIXRlbXApCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKICAg
ICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJy
YXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+bV9p
bmRleEJpYXMgPSAwOwogICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAg
ICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytp
KQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxl
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxs
ZWUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEzICsyNyw5IEBACiAjaW5jbHVkZSAi
SlNDYWxsZWUuaCIKIAogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0YWNrVmlz
aXRvci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyMDM5MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEwLDI1ICs1MTAsMTUgQEAgQXJyYXlCdWZmZXIq
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYQogICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICph
bnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CiAg
ICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBH
QyBhcHByb3ByaWF0ZWx5LgogICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3Qp
OworICAgIFZNJiB2bSA9ICpoZWFwLT52bSgpOwogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
QygqaGVhcCk7CiAgICAgCiAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRl
cigpKTsKIAotICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0ZVNpemUoKTsKLSAgICAK
LSAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5Ci0gICAgICAgICYm
ICF0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRl
cikpIHsKLSAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKLSAgICAgICAgLy8g
UmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KLSAgICAg
ICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIoCi0gICAgICAgICAg
ICBiaXR3aXNlX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT52ZWN0b3IoKSktPmJ1
dHRlcmZseSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09i
amVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7Ci0gICAgICAgIFZNJiB2bSA9ICpoZWFwLT52bSgp
OwotICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXQodm0sIHRoaXNPYmplY3QsIEJ1
dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKLSAgICAgICAgICAgIHRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpLCB2bSwgdGhpc09iamVjdCwgdGhpc09iamVjdC0+c3RydWN0dXJlKCksCi0g
ICAgICAgICAgICB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
ZmFsc2UsIDAsIDApKTsKLSAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmhh
c0luZGV4aW5nSGVhZGVyKCkpOworICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwg
dGhpc09iamVjdCwgQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICB0
aGlzT2JqZWN0LT5idXR0ZXJmbHkoKSwgdm0sIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLAorICAgICAgICB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgZmFsc2UsIDAsIDApKTsKIAogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVy
YXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEyICsyNiw5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgogCi0jaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiTWFwRGF0
YUlubGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJT
dHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTQgKzI3LDEw
IEBACiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKIAogI2luY2x1ZGUgIkVy
cm9yLmgiCi0jaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpT
TW9kdWxlUmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCwxNCArMjgsMTAgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0
YWJsZS5oIgotI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCi0jaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorI2lmIDAKKyNkZWZpbmUgTE9HSVQoKSBkYXRhTG9nKFJhd1BvaW50
ZXIodGhpcyksICI6ICIsIFdURl9QUkVUVFlfRlVOQ1RJT04sICJcbiIpOworI2Vsc2UKKyNkZWZp
bmUgTE9HSVQoKSBkbyB7IH0gd2hpbGUoZmFsc2UpCisjZW5kaWYKKwogLy8gV2Uga2VlcCB0cmFj
ayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uIFdlIHVz
ZSB0aGlzCiAvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93
IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgogLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkg
dGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgaW4KQEAgLTg4LDc3ICs5NCw2
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6Y29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYg
dmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKLXsKLSAg
ICBBU1NFUlQoYnV0dGVyZmx5KTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRo
aXMtPnN0cnVjdHVyZSgpOwotICAgIAotICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKLSAg
ICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7Ci0gICAgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciA9IHRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhh
c0luZGV4aW5nSGVhZGVyKSkgewotICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKLSAgICAgICAgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJl
Q2FwYWNpdHkgPSAwOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7Ci0g
ICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShi
dXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpKSkgewotICAgICAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZER1cmluZ0NvbGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHks
IGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0KLSAgICAg
ICAgLy8gQ29weSB0aGUgcHJvcGVydGllcy4KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJl
bnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KQotICAg
ICAgICAgICAgKC0tY3VycmVudFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKC0tY3Vy
cmVudFNvdXJjZSktPmdldCgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChVTkxJS0VMWShoYXNJ
bmRleGluZ0hlYWRlcikpIHsKLSAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBDb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0OwotICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlOwotICAgICAgICAgICAg
c2l6ZV90IGNvdW50OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMtPmlu
ZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgot
ICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBj
YXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBjdXJyZW50
VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAg
ICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8
PSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBjb3VudCA9
IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3Vy
Y2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAg
ICBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gMDsK
LSAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gMDsKLSAgICAgICAgICAgICAgICBjb3Vu
dCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIG1lbWNweShjdXJyZW50VGFyZ2V0LCBjdXJyZW50U291cmNlLCBjb3VudCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2J1dHRlcmZs
eS5zZXRXaXRob3V0QmFycmllcihuZXdCdXR0ZXJmbHkpOwotICAgICAgICB2aXNpdG9yLmRpZENv
cHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNp
dHlJbkJ5dGVzKTsKLSAgICB9IAotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZp
c2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKGJ1dHRlcmZseSk7CkBAIC0xNzUs
MTMgKzExMCwxNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAg
ICAgICAgIHByZUNhcGFjaXR5ID0gMDsKICAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMgPSAwOwogICAgIH0KLSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0
b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgCisgICAgSGVhcENlbGwqIGJhc2Ug
PSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpKTsKIAorICAgIEFTU0VSVChIZWFwOjpoZWFwKGJhc2UpID09IHZpc2l0
b3IuaGVhcCgpKTsKKworICAgIC8vIEtlZXAgdGhlIGJ1dHRlcmZseSBhbGl2ZS4KKyAgICB2aXNp
dG9yLm1hcmtBdXhpbGlhcnkoYmFzZSk7CisgICAgCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGll
cy4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICB2aXNpdG9yLmNvcHlMYXRl
cigKLSAgICAgICAgdGhpcywgQnV0dGVyZmx5Q29weVRva2VuLAotICAgICAgICBidXR0ZXJmbHkt
PmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwog
ICAgIAogICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgIHN3aXRjaCAo
dGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTIyNSwxOSArMTYzLDYgQEAgdm9pZCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogI2VuZGlmCiB9CiAKLXZvaWQgSlNPYmplY3Q6
OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29w
eVRva2VuIHRva2VuKQotewotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwotCi0gICAgaWYgKHRva2VuICE9IEJ1dHRlcmZseUNvcHlUb2tlbikKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9i
dXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+
Y29weUJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVTaXplKCkpOwotfQotCiB2b2lkIEpTT2JqZWN0OjpoZWFwU25hcHNob3QoSlND
ZWxsKiBjZWxsLCBIZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVyKQogewogICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC03ODAsNiArNzA1LDcg
QEAgdm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBYwogCiBCdXR0ZXJmbHkq
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoVk0mIHZtLCB1bnNpZ25lZCBs
ZW5ndGgsIHNpemVfdCBlbGVtZW50U2l6ZSkKIHsKKyAgICBMT0dJVCgpOwogICAgIEFTU0VSVChs
ZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gaW5k
ZXhpbmdUeXBlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRUeXBlLCAhaGFzSW5kZXhlZFByb3Bl
cnRpZXMob2xkVHlwZSkpOwpAQCAtODA3LDYgKzczMyw4IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y3JlYXRlSW5pdGkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uo
dm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgbmV3QnV0dGVy
Zmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUo
KSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxv
Y2F0ZUludDMyKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVy
ZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50
MzIoKTsKQEAgLTgyNyw2ICs3NTUsOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNy
ZWF0ZUluaXRpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgs
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGln
dW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cyk7
CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRl
cmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOwpAQCAtODM0LDYg
Kzc2NCw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKIAogQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKFZNJiB2bSwgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCiB7CisgICAgTE9HSVQoKTsKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5z
dHJ1Y3R1cmUodm0pOwogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gaW5kZXhpbmdUeXBlKCk7
CkBAIC04NDksNiArNzgwLDggQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlT
dG9yYQogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICByZXN1bHQtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAwOworICAgIGZv
ciAoc2l6ZV90IGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHJlc3VsdC0+bV92ZWN0
b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkp
OwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NjIsNiArNzk1LDExIEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6
Y29udmVydFVuZGVjaWRlZFRvSW50MzIoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lk
ZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIpKTsKICAgICByZXR1cm4gbV9idXR0ZXJmbHku
Z2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQpAQCAtODgxLDYgKzgxOSwxMSBAQCBDb250aWd1
b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVuZGVjCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VS
VChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOworCiAgICAgc2V0U3RydWN0dXJl
KHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAgICByZXR1cm4g
bV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsKIH0KQEAgLTkxNyw3ICs4NjAsOSBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAKICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91
dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBObyBuZWVkIHRvIGNv
cHkgZWxlbWVudHMuCisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBp
LS07KQorICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7
CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpKTsKQEAgLTkzOCwxMSArODgzLDEyIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpT
T2JqZWN0Ojpjb252ZXJ0SW50MzIKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJy
ZW50ID0gJmJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV07CiAgICAgICAgIGRvdWJsZSog
Y3VycmVudEFzRG91YmxlID0gYml0d2lzZV9jYXN0PGRvdWJsZSo+KGN1cnJlbnQpOwogICAgICAg
ICBKU1ZhbHVlIHYgPSBjdXJyZW50LT5nZXQoKTsKLSAgICAgICAgaWYgKCF2KSB7CisgICAgICAg
IC8vIE5PVEU6IFNpbmNlIHRoaXMgbWF5IGJlIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCB2
IGNvdWxkIGJlIGdhcmJhZ2UuIElmIGl0J3MgZ2FyYmFnZSwKKyAgICAgICAgLy8gdGhhdCBtZWFu
cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorICAgICAgICBpZiAoIXYuaXNJbnQzMigp
KSB7CiAgICAgICAgICAgICAqY3VycmVudEFzRG91YmxlID0gUE5hTjsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCh2LmlzSW50MzIoKSk7CiAgICAgICAg
ICpjdXJyZW50QXNEb3VibGUgPSB2LmFzSW50MzIoKTsKICAgICB9CiAgICAgCkBAIC05NjYsMTMg
KzkxMiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgp
OwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5
U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUg
diA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewot
ICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmll
cih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMTAxNCwxMyArOTU4LDExIEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlT
dG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91
dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkg
ewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcihKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgICAgICBu
ZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNW
YWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1
ZSkKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJh
bnNpdGlvbik7CkBAIC0xMDQxLDEzICs5ODMsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydENvbnRpZ3VvdQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5
LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBj
b25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2
ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkr
KykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQo
KTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAgICAgICAg
ICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkp
OwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAg
LTI3MjksNiArMjY2OSw3IEBAIHVuc2lnbmVkIEpTT2JqZWN0Ojpjb3VudEVsZW1lbnRzKCkKIAog
Ym9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIHZtLCB1bnNpZ25lZCBuZXdM
ZW5ndGgpCiB7CisgICAgTE9HSVQoKTsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUg
YXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9l
cyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAogICAgIC8vIHRvIHRo
ZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkg
Y2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCiAgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpCkBAIC0yNzU0LDYgKzI2OTUsOCBAQCBib29sIEpTT2JqZWN0Ojpp
bmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVG
b3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkp
OwogICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcltpXS5jbGVhcigpOwogICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5z
ZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICAgICAgc2V0QnV0dGVyZmx5V2l0
aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTI3NjgsNiArMjcxMSw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9y
TGVuZ3RoKFZNJiAKICAgICAgICAgbmV3SW5kZXhCaWFzLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBu
ZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKICAgICBzZXRCdXR0ZXJm
bHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CkBAIC0yNzc2LDYg
KzI3MjEsNyBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAKIGJv
b2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7
CisgICAgTE9HSVQoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpOwogICAgIAogICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwpAQCAtMjc5
OSw4ICsyNzQ1LDEyIEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAK
IAogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpW2ldID0gUE5hTjsK
KyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkg
PCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLmNsZWFyKCk7CiAgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI4MjEs
NiArMjc3MSw3IEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKIAog
QnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qg
b2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCiB7CisgICAgTE9HSVQoKTsKICAgICBBU1NFUlQobmV3
U2l6ZSA+IG9sZFNpemUpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0
aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwMzkyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJBcnJh
eUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQXV4
aWxpYXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZp
ZXJzLmgiCi0jaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJT
ZXR0ZXIuaCIKICNpbmNsdWRlICJEZWZlckdDLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtMTAz
LDcgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXpl
X3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRv
ciYsIENvcHlUb2tlbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNu
YXBzaG90KEpTQ2VsbCosIEhlYXBTbmFwc2hvdEJ1aWxkZXImKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CkBAIC00MTQs
NiArNDEzLDggQEAgcHVibGljOgogICAgICAgICBpbml0aWFsaXplSW5kZXgodm0sIGksIHYsIGlu
ZGV4aW5nVHlwZSgpKTsKICAgICB9CiAKKyAgICAvLyBOT1RFOiBDbGllbnRzIG9mIHRoaXMgbWV0
aG9kIG1heSBjYWxsIGl0IG1vcmUgdGhhbiBvbmNlIGZvciBhbnkgaW5kZXgsIGFuZCB0aGlzIGlz
IHN1cHBvc2VkCisgICAgLy8gdG8gd29yay4KICAgICB2b2lkIGluaXRpYWxpemVJbmRleChWTSYg
dm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAg
ICB7CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CkBA
IC02ODYsOCArNjg3LDYgQEAgcHVibGljOgogICAgICAgICAKICAgICB2b2lkIHNldFN0cnVjdHVy
ZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZN
JiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFs
bG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVj
dHVyZSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vz
c2FyeShWTSYsIFN0cnVjdHVyZSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252
ZXJ0VG9EaWN0aW9uYXJ5KFZNJik7CiAKQEAgLTc5Nyw3ICs3OTYsNiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAog
ICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1
cmUqKTsKLSAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBz
aXplX3Qgc3RvcmFnZVNpemUpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQg
dGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFn
ZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC05NDksNyArOTQ3LDcgQEAgcHJpdmF0
ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFn
ZVNsb3coVk0mKTsKIAogcHJvdGVjdGVkOgotICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9i
dXR0ZXJmbHk7CisgICAgQXV4aWxpYXJ5QmFycmllcjxCdXR0ZXJmbHkqPiBtX2J1dHRlcmZseTsK
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3BhZGRpbmc7
CkBAIC0xNDg3LDggKzE0ODUsMTYgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbgogICAgIAogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBuZXdTdHJ1Y3R1cmUpOwotCisgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBuZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgQVNTRVJUKG9sZENhcGFjaXR5IDw9IG5l
d0NhcGFjaXR5KTsKKyAgICBpZiAob2xkQ2FwYWNpdHkgPT0gbmV3Q2FwYWNpdHkpCisgICAgICAg
IHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkQ2FwYWNp
dHksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBu
ZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgfQogICAgIHB1dERpcmVjdCh2bSwgb2Zm
c2V0LCB2YWx1ZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAg
IGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCkBAIC0xNDk2LDI3ICsxNTAyLDYgQEAgQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIHJldHVybiB0cnVlOwogfQog
Ci1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJ
Zk5lY2Vzc2FyeShWTSYgdm0sIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSkKLXsKLSAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3U3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAKLSAgICBpZiAob2xkQ2FwYWNpdHkgPT0gbmV3U3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3
U3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsgCi0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5l
U3RvcmFnZSgKLSAgICAgICAgdm0sIG9sZENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0
dXJlLCBuZXdCdXR0ZXJmbHkpOwotfQotCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0
dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYgdm0sIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlKQotewotICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNl
c3NhcnkoCi0gICAgICAgIHZtLCBzdHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBu
ZXdTdHJ1Y3R1cmUpOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0T3duRGF0YVByb3Bl
cnR5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24g
MjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDYsIDIwMDgsIDIwMDksIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMDgsIDIwMDksIDIwMTItMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDYgKzI0LDcg
QEAKICNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKICNkZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gK
IAorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCShyZXZpc2lvbiAyMDM5
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsOSBAQAogCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgi
CiAjaW5jbHVkZSAiRXJyb3IuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNQcm9taXNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJNaWNyb3Rhc2suaCIKLSNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxMSBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5o
IgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNDQnVpbHRpbnMuaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAiTWljcm90
YXNrLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsMTMgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKLSNpbmNsdWRlICJTbG90
VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTIgKzI2
LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCiAK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRl
ICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1
ZGUgIkpTU3RyaW5nSXRlcmF0b3IuaCIKIAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgotI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiw5ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgiCiAKLSNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAi
QnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiR2V0dGVy
U2V0dGVyLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRv
cnMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEw
IEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUg
Ik1hcFByb3RvdHlwZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDEx
IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKICNpbmNsdWRlICJNYXBQcm90b3R5cGUubHV0
LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlz
aW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTgyLDYgKzE4Miw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0
aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdGVzdFRoZUZUTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgdmVyYm9zZVNhbml0aXplU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUdlbmVyYXRpb25hbEdDLCB0cnVlLCBOb3JtYWwsIG51
bGxwdHIpIFwKKyAgICB2KGJvb2wsIHJlc2V0RnJlZUNlbGxzQmFkbHksIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVhZ2VybHlVcGRhdGVUb3BDYWxsRnJhbWUsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VPU1JFbnRyeVRvREZH
LCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5o
IgogI2luY2x1ZGUgIlByb3h5T2JqZWN0LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDggKzI4LDcgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmll
cklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDEyICszOCwxNSBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0
ZVVuaW5pdGlhCiAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksICZ0ZW1wKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgdm9pZCogdGVtcCA9
IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYgKCF0ZW1wKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJh
c2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBidXR0ZXJm
bHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1dHRlcmZseS0+c2V0UHVi
bGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGlu
aXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uY2xlYXIoKTsKIAogICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRo
QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiB9CkBAIC02NywxOCArNzAsMjgg
QEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaAogICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBoYW5kbGUgYXJyYXkgYWxsb2NhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseS4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ0CiAg
ICAgCisgICAgYXV0byBzZXRQcm9wZXJ0aWVzID0gWyZdICgpIHsKKyAgICAgICAgYXJyYXktPnB1
dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1i
ZXIocmVzdWx0LnN0YXJ0KSk7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1h
dGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKKyAgICB9OworICAgIAogICAg
IGlmIChVTkxJS0VMWShnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSkpIHsKICAgICAg
ICAgYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmpl
Y3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5z
KCkgKyAxKTsKICAgICAgICAgCiAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAs
IGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVu
ZCAtIHJlc3VsdC5zdGFydCkpOwogICAgICAgICAKKyAgICAgICAgc2V0UHJvcGVydGllcygpOwor
ICAgICAgICAKICAgICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5u
dW1TdWJwYXR0ZXJucygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9
IG51bVN1YnBhdHRlcm5zOyArK2kpCisgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJ
bmRleCh2bSwgaSwganNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBieSBHQy4KKyAgICAgICAgICAgIAogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7
CiAgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOwog
ICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKQogICAgICAgICAgICAgICAgICAgICBhcnJh
eS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09m
UmVzb2x2ZWQodm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAt
IHN0YXJ0KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhcnJh
eS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC04NywyMCArMTAwLDIyIEBAIEFMV0FZU19JTkxJ
TkUgSlNBcnJheSogY3JlYXRlUmVnRXhwTWF0Y2gKICAgICAgICAgCiAgICAgICAgIGFycmF5LT5p
bml0aWFsaXplSW5kZXgodm0sIDAsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHJl
c3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFydCksIEFycmF5V2l0aENvbnRpZ3Vv
dXMpOwogICAgICAgICAKKyAgICAgICAgc2V0UHJvcGVydGllcygpOworICAgICAgICAKICAgICAg
ICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5z
OyArK2kpCisgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNV
bmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBieSBHQy4KKyAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsg
KytpKSB7CiAgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAq
IGldOwogICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKQogICAgICAgICAgICAgICAgICAg
ICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0
cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkg
KyAxXSAtIHN0YXJ0KSwgQXJyYXlXaXRoQ29udGlndW91cyk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1Vu
ZGVmaW5lZCgpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIAotICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUlu
ZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKHJlc3VsdC5zdGFydCkpOwotICAgIGFycmF5LT5w
dXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0
KTsKLQogICAgIHJldHVybiBhcnJheTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgog
I2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNjb3BlLmgi
CisjaW5jbHVkZSAiSGVhcFV0aWwuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCkBA
IC0zOTIsNyArMzkzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmll
ZAogICAgICAgICAgICAgSlNWYWx1ZSBjYWxsZWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZENh
bGxlZSk7CiAgICAgICAgICAgICBTdGFja0ZyYW1lJiBzdGFja0ZyYW1lID0gc3RhY2tUcmFjZS5m
cmFtZXMubGFzdCgpOwogICAgICAgICAgICAgYm9vbCBhbHJlYWR5SGFzRXhlY3V0YWJsZSA9ICEh
c3RhY2tGcmFtZS5leGVjdXRhYmxlOwotICAgICAgICAgICAgaWYgKCFIZWFwOjppc1ZhbHVlR0NP
YmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgY2FsbGVlKSkgeworICAgICAgICAgICAgaWYg
KCFIZWFwVXRpbDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGNhbGxl
ZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIYXNFeGVjdXRhYmxlKQogICAgICAg
ICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VW5rbm93bjsK
ICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MzcsNyArNDM4LDcgQEAgdm9pZCBTYW1wbGlu
Z1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNQb2ludGVy
R0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgZXhlY3V0YWJsZSkpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoSGVhcFV0aWw6OmlzUG9pbnRlckdDT2JqZWN0SlNDZWxsKGZpbHRl
ciwgbWFya2VkQmxvY2tTZXQsIGV4ZWN1dGFibGUpKTsKICAgICAgICAgICAgIHN0YWNrRnJhbWUu
ZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpFeGVjdXRhYmxlOwogICAgICAgICAgICAgc3RhY2tGcmFt
ZS5leGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICAgICAgICAgIG1fbGl2ZUNlbGxQb2ludGVy
cy5hZGQoZXhlY3V0YWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
ZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDEzICsyOSwxMSBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0
dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTZXQu
aCIKICNpbmNsdWRlICJNYXBEYXRhLmgiCiAjaW5jbHVkZSAiU2V0UHJvdG90eXBlLmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTEgQEAKICNpbmNsdWRlICJFeGNlcHRp
b25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0
b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMb29rdXAu
aCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKIAogI2luY2x1ZGUgIlNldFByb3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJKHJldmlz
aW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVn
aXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsOSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnkuaCIKIAotI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJT
dHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCwxMSArMjgsOSBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJdGVy
YXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtNYXAuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcFByb3RvdHlwZS5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDExICsyOCw5IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9y
T3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha1NldC5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWFrU2V0UHJvdG90eXBlLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1zdG9y
YWdlLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanMJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFy
cmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisvL0AgcnVuRGVm
YXVsdAordmFyIHggPSBbMi41LCAxLjVdOworeC5sZW5ndGggPSAxMDAwMDAwMDAwOworeC5sZW5n
dGggPSAyOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAzLjUpOworaWYgKHgudG9T
dHJpbmcoKSAhPSAiMy41LDIuNSwxLjUiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlmdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlmdC5qcwkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnRpZ3Vv
dXMtYXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKy8vQCBy
dW5EZWZhdWx0Cit2YXIgeCA9IFsnYicsICdhJ107CitBcnJheS5wcm90b3R5cGUudW5zaGlmdC5j
YWxsKHgsICdjJyk7CitpZiAoeC50b1N0cmluZygpICE9ICJjLGIsYSIpCisgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvZG91YmxlLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlm
dC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2RvdWJsZS1hcnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAor
Ly9AIHJ1bkRlZmF1bHQKK3ZhciB4ID0gWzIuNSwgMS41XTsKK0FycmF5LnByb3RvdHlwZS51bnNo
aWZ0LmNhbGwoeCwgMy41KTsKK2lmICh4LnRvU3RyaW5nKCkgIT0gIjMuNSwyLjUsMS41IikKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNjcmliZSh4KTsKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbnQzMi1hcnJheS11bnNoaWZ0LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW50MzItYXJy
YXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2IEBACisvL0AgcnVuRGVmYXVsdAordmFyIHggPSBbMiwgMV07CitBcnJheS5wcm90b3R5cGUu
dW5zaGlmdC5jYWxsKHgsIDMpOworaWYgKHgudG9TdHJpbmcoKSAhPSAiMywyLDEiKQorICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOCBAQAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1h
cmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhlIEpTQyBHQyBuZWVkcyBhIHRyeUZh
c3RBbGlnbmVkTWFsbG9jKCksIGFuZCB0aGlzIGV4cG9zZXMgc3VjaCBhIGZ1bmN0aW9uLgorCisg
ICAgICAgICogd3RmL0Zhc3RNYWxsb2MuY3BwOgorICAgICAgICAoV1RGOjpmYXN0QWxpZ25lZE1h
bGxvYyk6CisgICAgICAgIChXVEY6OnRyeUZhc3RBbGlnbmVkTWFsbG9jKToKKyAgICAgICAgKFdU
Rjo6ZmFzdEFsaWduZWRGcmVlKToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5oOgorCiAyMDE2
LTA3LTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFN0
cmluZ1ZpZXcgY2FwYWJsZSBvZiBiZWluZyBwYXNzZWQgb3IgcmV0dXJuZWQgaW4gb25seSAyIHJl
Z2lzdGVycy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDYg
QEAKLS8vIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDExLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAw
NywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NS0yMDA5LCAyMDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CkBAIC05Nyw2ICs5NiwxMSBA
QCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJuIF9h
bGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25l
ZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgcmV0dXJuIF9h
bGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJl
ZSh2b2lkKiBwKSAKIHsKICAgICBfYWxpZ25lZF9mcmVlKHApOwpAQCAtMTExLDYgKzExNSwxMyBA
QCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJuIHA7
CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKSAKK3sKKyAgICB2b2lkKiBwID0gbnVsbHB0cjsKKyAgICBwb3NpeF9tZW1hbGlnbigm
cCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gcDsKK30KKwogdm9pZCBmYXN0QWxpZ25l
ZEZyZWUodm9pZCogcCkgCiB7CiAgICAgZnJlZShwKTsKQEAgLTIzMSw2ICsyNDIsMTEgQEAgdm9p
ZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBibWFsbG9j
OjphcGk6Om1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGln
bmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICByZXR1cm4g
Ym1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworfQorCiB2b2lkIGZh
c3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBibWFsbG9jOjphcGk6OmZyZWUocCk7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvV1RGL3d0Zi9G
YXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHly
aWdodCAoQykgMjAwNS0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Myw2ICs1Myw3IEBAIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RGcmVlKHZvaWQqKTsKIAogLy8gQWxsb2NhdGlvbnMg
ZnJvbSBmYXN0QWxpZ25lZE1hbGxvYygpIG11c3QgYmUgZnJlZWQgdXNpbmcgZmFzdEFsaWduZWRG
cmVlKCkuCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlGYXN0QWxp
Z25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqKTsKIAogV1RGX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBmYXN0TWFsbG9jU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xMDcsNiArMTA4LDcgQEAgdXNpbmcg
V1RGOjpmYXN0TWFsbG9jU2l6ZTsKIHVzaW5nIFdURjo6ZmFzdFJlYWxsb2M7CiB1c2luZyBXVEY6
OmZhc3RTdHJEdXA7CiB1c2luZyBXVEY6OmZhc3RaZXJvZWRNYWxsb2M7Cit1c2luZyBXVEY6OnRy
eUZhc3RBbGlnbmVkTWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0Q2FsbG9jOwogdXNpbmcgV1RG
Ojp0cnlGYXN0TWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0WmVyb2VkTWFsbG9jOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDIwMzky
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9u
cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgpJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNl
ci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSAr
MzUsOSBAQAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCiAjaW5jbHVkZSAiQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1
Z2dpbmcuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVySW5saW5lcy5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
R2xvYmFsT2JqZWN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPTk9iamVjdC5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cnVjdHVyZUlubGluZXMuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTI3
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTYtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxsb2NhdGVkIGluIEF1eGlsaWFyeSBNYXJrZWRT
cGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE5lZWQgdG8gI2luY2x1ZGUgbW9yZSB0aGluZ3Mg
bm93LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3Qu
Y3BwOgorCiAyMDE2LTA3LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIENyYXNoIHdpdGggYW4gSW52YWxpZCBXZWIgUHJvY2VzcyBJUEMgTWVzc2FnZSBJRDog
V2ViUGFnZVByb3h5LkF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJOUEpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiTlBS
dW50aW1lT2JqZWN0TWFwLmgiCiAjaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9FcnJvci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50
aWZpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3Qu
aD4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9jL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA3LTI5ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQnV0dGVyZmxpZXMgc2hvdWxk
IGJlIGFsbG9jYXRlZCBpbiBBdXhpbGlhcnkgTWFya2VkU3BhY2UgaW5zdGVhZCBvZiBDb3BpZWRT
cGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
MTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBUaGUgSlNDIEdDIG5lZWRzIHRvIGJlIGFibGUgdG8gdHJ5TWVtYWxpZ24sIGFuZCB0aGlz
IHJlZmFjdG9ycyB0aGUgY29kZSB0byBleHBvc2Ugc3VjaCBhCisgICAgICAgIGZ1bmN0aW9uLgor
CisgICAgICAgICogYm1hbGxvYy9BbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxs
b2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKToKKyAgICAg
ICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6cmVhbGxvY2F0ZSk6CisgICAgICAgICogYm1hbGxvYy9B
bGxvY2F0b3IuaDoKKyAgICAgICAgKiBibWFsbG9jL0NhY2hlLmg6CisgICAgICAgIChibWFsbG9j
OjpDYWNoZTo6YWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeUFsbG9jYXRl
KToKKyAgICAgICAgKiBibWFsbG9jL2JtYWxsb2MuaDoKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6
bWFsbG9jKToKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24pOgorICAgICAgICAo
Ym1hbGxvYzo6YXBpOjptZW1hbGlnbik6CisKIDIwMTYtMDctMTMgIEVucmljYSBDYXN1Y2NpICA8
ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgc3VwcG9ydGVkIHBsYXRmb3JtcyBp
biB4Y2NvbmZpZyBmaWxlcyB0byBtYXRjaCB0aGUgc2RrIG5hbWVzLgpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDE4
IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNpemUKIAogdm9pZCogQWxs
b2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBi
b29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdu
bWVudCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIGJvb2wgY3Jhc2hP
bkZhaWx1cmUgPSBmYWxzZTsKKyAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6
ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbChz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3sKICAg
ICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKIAogICAgIGlmICghbV9pc0JtYWxs
b2NFbmFibGVkKSB7CkBAIC04MCw3ICs5MiwxMCBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRl
KHNpemVfdCBhbGlnbm1lCiAgICAgICAgIHJldHVybiBhbGxvY2F0ZShyb3VuZFVwVG9NdWx0aXBs
ZU9mKGFsaWdubWVudCwgc2l6ZSkpOwogCiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgIHJldHVybiBQZXJQcm9jZXNz
PEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6
ZSk7CisgICAgSGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCk7Cisg
ICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAgICByZXR1cm4gaGVhcC0+YWxsb2NhdGVMYXJn
ZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBoZWFwLT50cnlBbGxvY2F0ZUxh
cmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxv
Y2F0ZSh2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9BbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MywxMiArNDMsMTUgQEAgcHVibGljOgogCiAg
ICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3Qp
OworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAg
dm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiByZWFs
bG9jYXRlKHZvaWQqLCBzaXplX3QpOwogCiAgICAgdm9pZCBzY2F2ZW5nZSgpOwogCiBwcml2YXRl
OgorICAgIHZvaWQqIGFsbG9jYXRlSW1wbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIGJvb2wg
Y3Jhc2hPbkZhaWx1cmUpOworICAgIAogICAgIGJvb2wgYWxsb2NhdGVGYXN0Q2FzZShzaXplX3Qs
IHZvaWQqJik7CiAgICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwogICAgIApJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAgIHN0YXRpYyB2b2lk
KiBhbGxvY2F0ZShzaXplX3QpOworICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCopOwogICAg
IHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqLCBzaXplX3QpOwpAQCAtNzksNiArODAsMTQg
QEAgaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZQogICAgIHJldHVybiBj
YWNoZS0+YWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6ZSk7CiB9CiAKK2lubGluZSB2b2lkKiBDYWNo
ZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgQ2Fj
aGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hlPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoIWNh
Y2hlKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShhbGlnbm1lbnQs
IHNpemUpOworICAgIHJldHVybiBjYWNoZS0+YWxsb2NhdG9yKCkudHJ5QWxsb2NhdGUoYWxpZ25t
ZW50LCBzaXplKTsKK30KKwogaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2Fj
aGU+OjpnZXRGYXN0Q2FzZSgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9j
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHJldmlz
aW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQzLDYgKzQzLDEyIEBAIGlubGluZSB2b2lkKiBtYWxsb2Moc2l6ZV90IHNp
emUpCiAgICAgcmV0dXJuIENhY2hlOjphbGxvY2F0ZShzaXplKTsKIH0KIAorLy8gUmV0dXJucyBu
dWxsIG9uIGZhaWx1cmUuCitpbmxpbmUgdm9pZCogdHJ5TWVtYWxpZ24oc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIENhY2hlOjp0cnlBbGxvY2F0ZShhbGlnbm1l
bnQsIHNpemUpOworfQorCiAvLyBDcmFzaGVzIG9uIGZhaWx1cmUuCiBpbmxpbmUgdm9pZCogbWVt
YWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDM5NTApCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0w
Ny0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEJ1dHRlcmZs
aWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNlIGluc3RlYWQg
b2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgYWRkcyBhIG5ldyB2YWxpZGF0aW9uIGZsYWcgdG8gdGhlIFZNLCB3aGljaCBp
cyB2ZXJ5IGNoZWFwIGFuZCBzaG91bGRuJ3QgZXZlciBicmVhaworICAgICAgICBhbnl0aGluZy4g
VGhpcyBlbmFibGVzIHRoZSBmbGFnIGZvciBhbGwgbm8tY2ppdCB0ZXN0cywgc2luY2UgdGhvc2Ug
YXJlIHRoZSBvbmVzIHdoZXJlIHdlIGFyZQorICAgICAgICBhbHJlYWR5IGhhcHB5IHRvIHBheSBz
b21lIHByaWNlIGZvciBhbHRlcmVyZWQgY292ZXJhZ2UuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1
bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAyMDE2LTA3LTMwICBNYW51ZWwgUmVnbyBDYXNhc25vdmFz
ICA8cmVnb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IGFkZCBteXNlbGYgdG8g
dGhlIHJldmlld2VycyBsaXN0LgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShy
ZXZpc2lvbiAyMDM5MjApCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3
b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgJG51bVBhc3NlcyA9IDAKICMgV2UgZm9y
Y2UgYWxsIHRlc3RzIHRvIHVzZSBhIHNtYWxsZXIgKDEuNU0pIHN0YWNrIHNvIHRoYXQgc3RhY2sg
b3ZlcmZsb3cgdGVzdHMgY2FuIHJ1biBmYXN0ZXIuCiBCQVNFX09QVElPTlMgPSBbIi0tdXNlRlRM
SklUPWZhbHNlIiwgIi0tdXNlRnVuY3Rpb25Eb3RBcmd1bWVudHM9dHJ1ZSIsICItLW1heFBlclRo
cmVhZFN0YWNrVXNhZ2U9MTU3Mjg2NCJdCiBFQUdFUl9PUFRJT05TID0gWyItLXRocmVzaG9sZEZv
ckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIsICItLXRocmVz
aG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA9MjAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcD0yMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplU29vbj0yMCIsICItLXRo
cmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MjAiLCAiLS10aHJlc2hvbGRGb3JGVExP
cHRpbWl6ZVNvb249MjAiLCAiLS1tYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aD0xNTAw
MDAiXQotTk9fQ0pJVF9PUFRJT05TID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10
aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMDAiXQorTk9fQ0pJVF9PUFRJT05TID0gWyItLXVz
ZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMDAi
LCAiLS1yZXNldEZyZWVDZWxsc0JhZGx5PXRydWUiXQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRM
SklUPXRydWUiXQogCiAkcnVubGlzdCA9IFtdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284976</attachid>
            <date>2016-07-31 20:00:24 -0700</date>
            <delta_ts>2016-07-31 20:10:32 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>192918</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNl
IGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFrZSB0aGUgR0MgY29uY3VycmVu
dCAoYnVnIDE0OTQzMiksIHdlIHdvdWxkIGVpdGhlciBuZWVkIHRvIGVuYWJsZSBjb25jdXJyZW50
CisgICAgICAgIGNvcHlpbmcgb3Igd2Ugd291bGQgbmVlZCB0byBub3QgY29weS4gQ29uY3VycmVu
dCBjb3B5aW5nIGNhcnJpZXMgYSAxLTIlIHRocm91Z2hwdXQgb3ZlcmhlYWQKKyAgICAgICAgZnJv
bSB0aGUgYmFycmllcnMgYWxvbmUuIENvbnNpZGVyaW5nIHRoYXQgTWFya2VkU3BhY2UgZG9lcyBh
IGRlY2VudCBqb2Igb2YgYXZvaWRpbmcKKyAgICAgICAgZnJhZ21lbnRhdGlvbiwgaXQncyB1bmxp
a2VseSB0aGF0IGl0J3Mgd29ydGggcGF5aW5nIDEtMiUgdGhyb3VnaHB1dCBmb3IgY29weWluZy4g
U28sIHdlIHdhbnQKKyAgICAgICAgdG8gZ2V0IHJpZCBvZiBjb3BpZWQgc3BhY2UuIFRoaXMgY2hh
bmdlIG1vdmVzIGNvcGllZCBzcGFjZSdzIGJpZ2dlc3QgY2xpZW50IG92ZXIgdG8gbWFya2VkCisg
ICAgICAgIHNwYWNlLgorICAgICAgICAKKyAgICAgICAgTW92aW5nIGJ1dHRlcmZsaWVzIHRvIG1h
cmtlZCBzcGFjZSBtZWFucyBoYXZpbmcgdGhlbSB1c2UgdGhlIG5ldyBBdXhpbGlhcnkgSGVhcENl
bGwKKyAgICAgICAgYWxsb2NhdGlvbiBwYXRoLiBUaGlzIGlzIGEgZmFpcmx5IG1lY2hhbmljYWwg
Y2hhbmdlLiBBdCBhIGhpZ2ggbGV2ZWwgdGhpcyBkb2VzIHRoZXNlIHRoaW5nczoKKyAgICAgICAg
CisgICAgICAgIC0gV2UgdXNlIEF1eGlsaWFyeUJhcnJpZXIgaW5zdGVhZCBvZiBDb3B5QmFycmll
ci4KKyAgICAgICAgCisgICAgICAgIC0gV2UgdXNlIHRyeUFsbG9jYXRlQXV4aWxpYXJ5IGluc3Rl
YWQgb2YgdHJ5QWxsb2NhdGVTdG9yYWdlLiBJIGdvdCByaWQgb2YgdGhlIHNpbGx5CisgICAgICAg
ICAgQ2hlY2tlZEJvb2xlYW4gc3R1ZmYsIHNpbmNlIGl0J3Mgc28gbXVjaCBtb3JlIHRyb3VibGUg
dGhhbiBpdCdzIHdvcnRoLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgSklUcyBoYXZlIHRvIGVt
aXQgaW5saW5lZCBtYXJrZWQgc3BhY2UgYWxsb2NhdGlvbnMgaW5zdGVhZCBvZiBpbmxpbmUgY29w
eSBzcGFjZQorICAgICAgICAgIGFsbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgLSBFdmVy
eW9uZSBoYXMgdG8gZ2V0IHVzZWQgdG8gemVyb2luZyB0aGVpciBidXR0ZXJmbGllcyBhZnRlciBh
bGxvY2F0aW9uIGluc3RlYWQgb2YgcmVseWluZworICAgICAgICAgIG9uIHRoZW0gYmVpbmcgcHJl
LXplcm9lZCBieSB0aGUgR0MuIENvcGllZCBzcGFjZSB3b3VsZCB6ZXJvIHRoaW5ncyBmb3IgeW91
LCB3aGlsZSBtYXJrZWQKKyAgICAgICAgICBzcGFjZSBkb2Vzbid0LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIEl0IHN0aWxsIGZhaWxzIHNvbWUg
aW50ZXJuYWwgZnV6emluZyB0ZXN0cyBhbmQgSSBoYXZlbid0CisgICAgICAgIG1lYXN1cmVkIHBl
cmZvcm1hbmNlIHlldC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5l
d09iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmluaXRpYWxp
emVBcnJheUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0UmlnaHRTaGlmdFNuaXBwZXQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZUhlYXBDZWxsKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVPYmplY3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0b3JGb3JTaXplKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVKU0FycmF5KToKKyAg
ICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkNvbnNlcnZh
dGl2ZVJvb3RzOjpncm93KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAg
ICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6OnJvb3RzKToKKyAgICAgICAgKiBoZWFwL0NvcHlUb2tlbi5oOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0
b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9yYWdlQWxsb2NhdG9y
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Omlz
Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxs
b2NhdGVPYmplY3RPZlR5cGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdWJzcGFjZUZvck9iamVj
dE9mVHlwZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZSk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkRnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZmluZEdDT2JqZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNWYWx1ZUdDT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNQb2ludGVyR0NPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
OjpyZXRpcmUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlQ
b3BGcmVlTGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZUltcGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2sp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxLaW5kKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpoZWFwKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0YWtlTGFzdEFjdGl2ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6dHJ5
Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNBdG9tQWxpZ25lZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjZWxsQWxpZ24pOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tGb3IpOgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0
c1dpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9y
T2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnRyeUFsbG9jYXRl
QXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhp
bGlhcnkpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeSk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwpOgorICAgICAgICAoSlNDOjpTZXRD
dXJyZW50Q2VsbFNjb3BlOjpTZXRDdXJyZW50Q2VsbFNjb3BlKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KiBsbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0F1eGls
aWFyeUJhcnJpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OkF1
eGlsaWFyeUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkF1
eGlsaWFyeUJhcnJpZXI6OnNsb3QpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6c2V0V2l0aG91
dEJhcnJpZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQpOgorICAgICAgICAq
IHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJp
Z2h0KToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6
CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmNyZWF0
ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVu
dGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NhbGxlZS5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRp
Z3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29weUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFj
a2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
bWlzZS5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanM6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorCiAyMDE2LTA3LTI5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIEJ5VmFsSW5mbyBpcyBvbmx5IHVzZWQgaW4gSklUIGVuYWJs
ZWQgZW52aXJvbm1lbnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsOCBAQAog
CQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE0MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9OwogCQkwRjM4QjAxOTE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwICovOyB9OwogCQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYz
OEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5
MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmNwcCAqLzsgfTsKIAkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM5MkM4ODFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCAq
LzsgfTsKIAkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi87
IH07CkBAIC01NzIsNiArNTc0LDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJl
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3
QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTND
ODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUy
MzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQURFNjczMUQ0RDIzQkUwMDc2
ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi87IH07CiAJ
CTBGQUY3RUZEMTY1QkE5MUIwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVCQTkxOTAw
MEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZF
IC8qIEV4aXRLaW5kLmNwcCAqLzsgfTsKQEAgLTI1MTgsNiArMjUyMSw4IEBACiAJCTBGMzhCMDE0
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5oOyBwYXRoID0gZGZnL0RGR0NvbXBp
bGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDE1MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdD
b21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAx
NjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5oOyBwYXRoID0gZGZnL0RGR0Nv
bXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM4RDJBMDFE
NDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVySW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM5MkM4NzFCNDYxODg0MDA4
NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRGdXp6LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOTJDODgxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEZ1enouaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzY1LDYgKzI3NzAsNyBA
QAogCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdB
OEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBREU2NzIxRDREMjNCQzAwNzY4
NDU3IC8qIEhlYXBVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBV
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQUY3RUZBMTY1QkE5MTkwMDBD
ODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4aXRLaW5kLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNDYsNiArNTI1Miw3IEBACiAJCQkJQzI0RDMx
RTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi8sCiAJCQkJQzJFNTI2QkIx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCiAJCQkJQzJFNTI2QkMxNTkwRUYw
MDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAorCQkJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFw
VmVyaWZpZXIuY3BwICovLAogCQkJCUZFN0JBNjBFMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVy
aWZpZXIuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxT
d2VlcGVyLmNwcCAqLywKQEAgLTU2MDcsNiArNTYxNCw4IEBACiAJCQkJRjY5MkE4NEQwMjU1NTk3
RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg0RTAyNTU1OTdE
MDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuaCAqLywKIAkJCQkwRkI3RjM4QTE1RUQ4RTM4MDBG
MTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8sCisJCQkJMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5
IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCAqLywKKwkJCQkwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkg
LyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLywKIAkJCQk1MjY3OEY4QzFBMDMxMDA5MDA2
QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmNwcCAqLywKIAkJCQk1MjY3OEY4RDFBMDMxMDA5
MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggKi8sCiAJCQkJMTQ3QjgzQUEwRTZEQjhD
OTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi8sCkBAIC01NzcyLDcg
KzU3ODEsNiBAQAogCQkJCTcwREMzRTA4MUIyREYyQzcwMDA1NDI5OSAvKiBJdGVyYXRvclByb3Rv
dHlwZS5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAq
LywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAotCQkJCTUz
OUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovLAogCQkJCTBGMkI2
NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKIAkJCQkwRjJCNjZC
NTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAogCQkJCTBGMkI2NkI2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLApAQCAtNTc4
Miw2ICs1NzkwLDcgQEAKIAkJCQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwICovLAogCQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oICovLAogCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlld0lubGluZXMuaCAqLywKKwkJCQk1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyog
SlNBcnJheUlubGluZXMuaCAqLywKIAkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2Fs
bGVlLmNwcCAqLywKQEAgLTcyNjEsNiArNzI3MCw3IEBACiAJCQkJMEYzMzhFMUMxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5
NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJCMUJEMTdGQTQwMDFB
QTQxMyAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKIAkJCQkyQTExMTI0NjE5MkZDRTc5MDA1
RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTc2OTMsNiAr
NzcwMyw3IEBACiAJCQkJQTE1ODdENkUxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZv
cm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMEYxQzAzMEQ2QzAwMzhCQkNBIC8qIFNu
aXBwZXRPcGVyYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3MDFCNERDMTQxMDBENjk4
NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE1ODdENzUxQjREQzFDNjAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzOThGQUIxQzc1MERBNDAwNjBBOTYzIC8q
IEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzIxQjREQzE0MTAwRDY5
ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03
ODE1LDYgKzc4MjYsNyBAQAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdD
QkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0
MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjA2LDM0ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAg
Q29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2Nh
dG9yKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
LSAgICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yID0gdm0uaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5l
bWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0
aCk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcg
KGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5i
cmFuY2hTdWJQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpT
aWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVn
UHRyKHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1Zh
bHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0g
b2xkIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxh
YmxlCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8
IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1Miw3ICs4NTIsNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
V2l0CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkFycmF5
IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpKSk7CiAKICAg
ICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVyZSwg
c2l6ZSk7Ci0gICAgcmVzdWx0LT5idXR0ZXJmbHkoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIGJhY2tp
bmcgc3RvcmUgaXMgaW4gdG8tc3BhY2UuCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4o
cmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTA3LDI3ICszOTA3LDMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIp
OwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BS
LCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3Rv
cmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAor
ICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgbmFuID0gSlNWYWx1
ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMucGF5bG9hZCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBK
U1ZhbHVlIGhvbGU7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSkKKyAgICAgICAgICAgICAgICBob2xlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgUE5hTik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaG9sZSA9IEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMudGFnKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMucGF5
bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKKyAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhW
YXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODY5LDI3ICszODY5LDMxIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0
Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihU
cnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBt
X2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5l
bWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1f
aml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwKKyAgICAgICAgICAgICAgICBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2Rl
LT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBz
dG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkp
KSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRf
dD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVH
UFIsIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoMkdQ
Uik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5s
YWJlbCgpOwotICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5saW5rVG8obG9vcCwgJm1faml0
KTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1f
aml0LmxhYmVsKCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxs
b2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRH
UFIsCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIHNpemUgKz0gb3V0T2ZMaW5lQ2FwYWNpdHkgKiBz
aXplb2YoSlNWYWx1ZSk7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKAotICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0ZWRJbW0zMihz
aXplKSwgc3RvcmFnZUdQUikpOwotICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCi0gICAg
ICAgICAgICBtX2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKHZlY3Rvckxlbmd0aCAqIHNpemVvZihK
U1ZhbHVlKSksIHN0b3JhZ2VHUFIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlR1BSKTsK
KyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9j
YXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2Fz
ZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKAorICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKG91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSksCisgICAgICAgICAgICBzdG9yYWdlR1BSKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdlR1BSKTsKIApAQCAtMTI3LDE0
ICsxMjcsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1Jhd09iamVjdCwgcmVzdWx0R1BSLCBz
dG9yYWdlR1BSLAogICAgICAgICBzdHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aCkpOwogCi0gICAgaWYg
KGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSAmJiBudW1FbGVtZW50cyA8IHZl
Y3Rvckxlbmd0aCkgeworICAgIGlmIChudW1FbGVtZW50cyA8IHZlY3Rvckxlbmd0aCkgewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaGFzRG91Ymxl
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNp
emVvZihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciB2YWx1ZTsKLSAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CisgICAgICAgIGlmIChoYXNEb3VibGUo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1FbGVtZW50czsgaSA8
IHZlY3Rvckxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJ
bW0zMih2YWx1ZS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
Uiwgc2l6ZW9mKGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKHZhbHVlLmFz
Qml0cy5wYXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9m
KGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSk7CkBAIC02NzI2LDE4ICs2NzMyLDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3AKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlz
KTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9
IHNjcmF0Y2gyLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigp
OwogICAgICAgICAKICAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPm91
dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
PT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJh
c2ljU3RvcmFnZSgKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0KLSAgICBtX2ppdC5hZGRQ
dHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2Ny
YXRjaEdQUjEpOworICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICog
c2l6ZW9mKEpTVmFsdWUpOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEo
c2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IHNsb3dQYXRoOworICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BS
MSk7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKQEAgLTY3NzIsMTYgKzY3ODQsMjEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIFN0b3JhZ2VPcGVy
YW5kIG9sZFN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIG9sZFN0b3JhZ2VHUFIgPSBvbGRTdG9yYWdlLmdwcigp
OwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOwogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwotICAgICAgICAKLSAgICBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShUcnVzdGVk
SW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFkZFB0cihKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7CisgICAgCisgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1
eGlsaWFyeURhdGEobmV3U2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQ
YXRoKTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihu
ZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAg
CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBu
ZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3NjYsNyArMzc2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc2l6ZSwgbV9vdXQu
Y29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKG1pbkNhcGFjaXR5KSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVWYXJpYWJs
ZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCi0gICAgICAgICAgICAgICAgc2l6ZSwgc3Ry
dWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgbV9v
dXQuemVyb0V4dFB0cihzaXplKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0
aCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLnZh
bHVlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOwpAQCAtNDA2
Miw5ICs0MDYyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6
ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJ
bnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0
dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFs
bG9jYXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4
aWxpYXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFs
dWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFpbENhc2Up
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuc3Vi
KGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZs
eSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgb2JqZWN0
ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZhaWxDYXNl
KTsKICAgICAgICAgICAgIApAQCAtNjkxOSwxMSArNjkyMSwxMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIExWYWx1ZSBz
dGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAgICAgICAgICAgICAgICAgIGFs
bG9jYXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0
ZXJmbHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKIAog
ICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6ZSkpOworICAgICAgICAgICAg
ICAgICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsgc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGZh
c3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgICAgICAgICAKQEAgLTc3MTcsMTAgKzc3MjEsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
aW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgTFZhbHVl
IHZlY3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAgICAgIGlmICghaGFz
RG91YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBhbHJlYWR5IGlu
aXRpYWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhhc0Rv
dWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQo
Yml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOwogCiAg
ICAgICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFOLgogICAgICAgICBM
QmFzaWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03NzM1LDkgKzc3NDAs
NyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkoSW50MzIsIG9y
aWdpbmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LnBoaShwb2ludGVy
VHlwZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmU2
NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBO
YU4pKSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9w
ZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291dC5zdG9yZTY0KGhv
bGUsIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5k
ZXgoKSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5leHRJbmRleCA9IG1f
b3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291dC5hZGRJbmNvbWlu
Z1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03Nzk4LDEyICs3ODAx
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkp
LCBzbG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVz
ICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9
IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdElu
dFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmFk
ZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdl
KSk7CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgCiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC04MzczLDcgKzgz
NzcsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0K
IAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sg
c2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9jYXRvciwg
TEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNz
ID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAKQEAgLTgzOTQsNyArODM5OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKAogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihyZXN1
bHQsIG1faGVhcHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAgICAgICAgICBhbGxvY2F0b3Is
IG1faGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7Ci0KKyAgICAgICAgCiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtODQwOCw3ICs4NDEyLDcgQEAgcHJp
dmF0ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAg
ICAgICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CkBAIC04NDM2LDQ2ICs4NDQwLDU0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwg
c2xvd1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+
Ci0gICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVl
IHNpemUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2Us
IExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNp
c2VTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBv
ZiB0d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNl
U3RlcCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpp
bXByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVl
IHN1YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVj
dE9mVHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21h
bGxDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJn
ZU9yT3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNC
bG9jayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBM
VmFsdWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1h
cmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBt
X291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpw
cmVjaXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRk
KHNpemUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsK
KyAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291
dC5jb25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291
dC5icmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JP
dmVyc2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJs
b2NrKTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAg
ICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3Jz
LCBzdWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJv
dW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lz
ZVN0ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQu
Y29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52
YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VC
bG9jayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVw
cm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9m
ZikpLAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJ
bnRQdHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxs
eShsYXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFk
ZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNl
X1N1YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9v
dXQuemVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIo
Z2V0TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBt
X291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtl
ZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VB
bGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5w
aGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAg
ICAgCisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0
b3IsIGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZv
clNpemUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUo
bV9vdXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRl
VmFyaWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAg
dm0oKS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xv
d1BhdGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1NjIsMjYgKzg1NzQs
MjQgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAot
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVu
Z3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7Cisg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZv
ckF1eGlsaWFyeURhdGEoCisgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5n
dGggKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9y
YWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xv
d1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigK
LSAgICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFs
dWUpICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5h
ZGQoc3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxK
U0FycmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7Cisg
ICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMiht
X291dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpOwogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIo
dmVjdG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2
ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBO
YU4pKSwKLSAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExW
YWx1ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGlu
dDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NChob2xlLCBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3Bl
cnRpZXNbaV0pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwg
YnV0dGVyZmx5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcFV0
aWwuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTUxLDE2ICs1MiwxNiBAQCBDb25zZXJ2YXRpdmVSb290czo6
Q29uc2VydmF0aXZlUm9vdHMoTWFyCiBDb25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJv
b3RzKCkKIHsKICAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0Fs
bG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2Yo
SlNDZWxsKikpOworICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9v
dHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSGVhcENlbGwqKSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0
aXZlUm9vdHM6Omdyb3coKQogewogICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkg
PT0gaW5saW5lQ2FwYWNpdHkgPyBub25JbmxpbmVDYXBhY2l0eSA6IG1fY2FwYWNpdHkgKiAyOwot
ICAgIEpTQ2VsbCoqIG5ld1Jvb3RzID0gc3RhdGljX2Nhc3Q8SlNDZWxsKio+KE9TQWxsb2NhdG9y
OjpyZXNlcnZlQW5kQ29tbWl0KG5ld0NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKSk7Ci0gICAg
bWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBtX3NpemUgKiBzaXplb2YoSlNDZWxsKikpOworICAg
IEhlYXBDZWxsKiogbmV3Um9vdHMgPSBzdGF0aWNfY2FzdDxIZWFwQ2VsbCoqPihPU0FsbG9jYXRv
cjo6cmVzZXJ2ZUFuZENvbW1pdChuZXdDYXBhY2l0eSAqIHNpemVvZihIZWFwQ2VsbCopKSk7Cisg
ICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jvb3RzLCBtX3NpemUgKiBzaXplb2YoSGVhcENlbGwqKSk7
CiAgICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6
OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCop
KTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2Nh
cGFjaXR5ICogc2l6ZW9mKEhlYXBDZWxsKikpOwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0
eTsKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7CiB9CkBAIC03MiwxMyArNzMsMTQgQEAgaW5saW5l
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZAogCiAgICAgbV9jb3BpZWRTcGFjZS0+
cGluSWZOZWNlc3NhcnkocCk7CiAKLSAgICBpZiAoIUhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZp
bHRlciwgKm1fYmxvY2tzLCBwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2l6ZSA9
PSBtX2NhcGFjaXR5KQotICAgICAgICBncm93KCk7Ci0KLSAgICBtX3Jvb3RzW21fc2l6ZSsrXSA9
IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHApOworICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2lu
dGVycygKKyAgICAgICAgZmlsdGVyLCAqbV9ibG9ja3MsIHAsCisgICAgICAgIFsmXSAodm9pZCog
cCkgeworICAgICAgICAgICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQorICAgICAgICAgICAg
ICAgIGdyb3coKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9yb290c1ttX3NpemUrK10g
PSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihwKTsKKyAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcmtIb29rPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICsz
MSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSGVh
cENlbGw7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKLWNsYXNzIEpTQ2VsbDsKIAogY2xhc3Mg
Q29uc2VydmF0aXZlUm9vdHMgewogcHVibGljOgpAQCAtNDQsMTEgKzQ0LDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYs
IENvZGVCbG9ja1NldCYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7Ci0gICAgSlNDZWxsKiog
cm9vdHMoKTsKKyAgICBIZWFwQ2VsbCoqIHJvb3RzKCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDEyODsKLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IG5vbklubGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKKyAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihIZWFwQ2Vs
bCopOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgogICAgIHZvaWQgZ2Vu
ZXJpY0FkZFBvaW50ZXIodm9pZCosIFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKQEAgLTU4
LDEyICs1OCwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZ3JvdygpOwogCi0gICAgSlND
ZWxsKiogbV9yb290czsKKyAgICBIZWFwQ2VsbCoqIG1fcm9vdHM7CiAgICAgc2l6ZV90IG1fc2l6
ZTsKICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBNYXJrZWRCbG9ja1NldCogbV9ibG9ja3M7
CiAgICAgQ29waWVkU3BhY2UqIG1fY29waWVkU3BhY2U7Ci0gICAgSlNDZWxsKiBtX2lubGluZVJv
b3RzW2lubGluZUNhcGFjaXR5XTsKKyAgICBIZWFwQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVD
YXBhY2l0eV07CiB9OwogCiBpbmxpbmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkK
QEAgLTcxLDcgKzcxLDcgQEAgaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgp
CiAgICAgcmV0dXJuIG1fc2l6ZTsKIH0KIAotaW5saW5lIEpTQ2VsbCoqIENvbnNlcnZhdGl2ZVJv
b3RzOjpyb290cygpCitpbmxpbmUgSGVhcENlbGwqKiBDb25zZXJ2YXRpdmVSb290czo6cm9vdHMo
KQogewogICAgIHJldHVybiBtX3Jvb3RzOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDYg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgQnV0dGVyZmx5Q29w
eVRva2VuLAogICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0
b3JlQ29weVRva2VuLAogICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgs
MTIgKzU5OCw2IEBAIHZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5V29ya0xpc3QmIHdvcmtM
aXN0ID0gYmxvY2stPndvcmtMaXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENv
cHlXb3JrbGlzdEl0ZW0gaXRlbSA6IHdvcmtMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZW0udG9rZW4oKSA9PSBCdXR0ZXJmbHlDb3B5VG9rZW4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3Is
IEJ1dHRlcmZseUNvcHlUb2tlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKS0+bWV0
aG9kVGFibGUoKS0+Y29weUJhY2tpbmdTdG9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbS5jZWxsKCksIGNvcHlWaXNpdG9yLCBpdGVtLnRva2VuKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtMTM0Nyw4ICsxMzQxLDE1IEBAIHZvaWQgSGVhcDo6cmVzZXRB
bGxvY2F0b3JzKCkKIAogdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKIHsKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCiAgICAgR0NQSEFTRShV
cGRhdGVBbGxvY2F0aW9uTGltaXRzKTsKICAgICAKKyAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICBkYXRhTG9nKCJcbiIpOworICAgICAgICBkYXRhTG9nKCJieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZSA9ICIsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUsICJcbiIpOworICAgIH0KKyAgICAKICAg
ICAvLyBDYWxjdWxhdGUgb3VyIGN1cnJlbnQgaGVhcCBzaXplIHRocmVzaG9sZCBmb3IgdGhlIHB1
cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdoZW4gd2Ugc2hvdWxkCiAgICAgLy8gcnVuIGFub3RoZXIg
Y29sbGVjdGlvbi4gVGhpcyBpc24ndCB0aGUgc2FtZSBhcyBlaXRoZXIgc2l6ZSgpIG9yIGNhcGFj
aXR5KCksIHRob3VnaCBpdCBzaG91bGQKICAgICAvLyBiZSBzb21ld2hlcmUgYmV0d2VlbiB0aGUg
dHdvLiBUaGUga2V5IGlzIHRvIG1hdGNoIHRoZSBzaXplIGNhbGN1bGF0aW9ucyBpbnZvbHZlZCBj
YWxscyB0bwpAQCAtMTM2NCw2ICsxMzY1LDggQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9u
TGltaXRzKCkKICAgICAvLyBvZiBmcmFnbWVudGF0aW9uLCB0aGlzIG1heSBiZSBzdWJzdGFudGlh
bC4gRm9ydHVuYXRlbHksIG1hcmtlZCBzcGFjZSByYXJlbHkgZnJhZ21lbnRzIGJlY2F1c2UKICAg
ICAvLyBjZWxscyB1c3VhbGx5IGhhdmUgYSBuYXJyb3cgcmFuZ2Ugb2Ygc2l6ZXMuIFNvLCB0aGUg
dW5kZXJlc3RpbWF0aW9uIGlzIHByb2JhYmx5IE9LLgogICAgIGN1cnJlbnRIZWFwU2l6ZSArPSBt
X3RvdGFsQnl0ZXNWaXNpdGVkOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJ0
b3RhbEJ5dGVzVmlzaXRlZCA9ICIsIG1fdG90YWxCeXRlc1Zpc2l0ZWQsICIsIGN1cnJlbnRIZWFw
U2l6ZSA9ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7CiAKICAgICAvLyBGb3IgY29waWVkIHNw
YWNlLCB3ZSB1c2UgdGhlIGNhcGFjaXR5IG9mIHN0b3JhZ2Ugc3BhY2UuIFRoaXMgaXMgYmVjYXVz
ZSBjb3BpZWQgc3BhY2UgbWF5IGdldAogICAgIC8vIGJhZGx5IGZyYWdtZW50ZWQgYmV0d2VlbiBm
dWxsIGNvbGxlY3Rpb25zLiBUaGlzIGFyaXNlcyB3aGVuIGVhY2ggZWRlbiBjb2xsZWN0aW9uIGV2
YWN1YXRlcwpAQCAtMTM3OSwxMCArMTM4MiwxNSBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRp
b25MaW1pdHMoKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTAyNjgKICAgICBBU1NFUlQobV90b3RhbEJ5dGVzQ29waWVkIDw9IG1fc3RvcmFnZVNwYWNl
LnNpemUoKSk7CiAgICAgY3VycmVudEhlYXBTaXplICs9IG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5
KCk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coInN0b3JhZ2VTcGFjZS5jYXBh
Y2l0eSgpID0gIiwgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSwgIiwgY3VycmVudEhlYXBTaXpl
ID0gIiwgY3VycmVudEhlYXBTaXplLCAiXG4iKTsKIAogICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVz
ZXIgdG8gZW5zdXJlIHRoYXQgZXh0cmFNZW1vcnlTaXplKCkgZW5kcyB1cCBjb3JyZXNwb25kaW5n
IHRvIGFsbG9jYXRpb24tdGltZQogICAgIC8vIGV4dHJhIG1lbW9yeSByZXBvcnRpbmcuCiAgICAg
Y3VycmVudEhlYXBTaXplICs9IGV4dHJhTWVtb3J5U2l6ZSgpOworCisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2coImV4dHJhTWVtb3J5U2l6ZSgpID0gIiwgZXh0cmFNZW1vcnlTaXpl
KCksICIsIGN1cnJlbnRIZWFwU2l6ZSA9ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7CiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSAmJiBjdXJyZW50SGVhcFNpemUgPiBP
cHRpb25zOjpnY01heEhlYXBTaXplKCkpCiAgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpleGl0V2l0
aEZhaWx1cmUoKTsKQEAgLTEzOTIsMjkgKzE0MDAsMzggQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxv
Y2F0aW9uTGltaXRzKCkKICAgICAgICAgLy8gdGhlIG5ldyBhbGxvY2F0aW9uIGxpbWl0IGJhc2Vk
IG9uIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAsIHdpdGggYQogICAgICAgICAvLyBmaXhl
ZCBtaW5pbXVtLgogICAgICAgICBtX21heEhlYXBTaXplID0gbWF4KG1pbkhlYXBTaXplKG1faGVh
cFR5cGUsIG1fcmFtU2l6ZSksIHByb3BvcnRpb25hbEhlYXBTaXplKGN1cnJlbnRIZWFwU2l6ZSwg
bV9yYW1TaXplKSk7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
RnVsbDogbWF4SGVhcFNpemUgPSAiLCBtX21heEhlYXBTaXplLCAiXG4iKTsKICAgICAgICAgbV9t
YXhFZGVuU2l6ZSA9IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRnVsbDogbWF4RWRlblNpemUgPSAiLCBt
X21heEVkZW5TaXplLCAiXG4iKTsKICAgICAgICAgbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Qg
PSBjdXJyZW50SGVhcFNpemU7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiRnVsbDogc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0ID0gIiwgY3VycmVudEhlYXBTaXpl
LCAiXG4iKTsKICAgICAgICAgbV9ieXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0ID0g
MDsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJGdWxsOiBieXRl
c0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0ID0gIiwgMCwgIlxuIik7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotICAgICAgICAK
ICAgICAgICAgQVNTRVJUKGN1cnJlbnRIZWFwU2l6ZSA+PSBtX3NpemVBZnRlckxhc3RDb2xsZWN0
KTsKLSAgICAgICAgbV9tYXhFZGVuU2l6ZSA9IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNp
emU7CisgICAgICAgIC8vIFRoZW9yZXRpY2FsbHksIHdlIHNob3VsZG4ndCBldmVyIHNjYW4gbW9y
ZSBtZW1vcnkgdGhhbiB0aGUgaGVhcCBzaXplIHdlIHBsYW5uZWQgdG8gaGF2ZS4KKyAgICAgICAg
Ly8gQnV0IHdlIGFyZSBzbG9wcHksIHNvIHdlIGhhdmUgdG8gZGVmZW5kIGFnYWluc3QgdGhlIG92
ZXJmbG93LgorICAgICAgICBtX21heEVkZW5TaXplID0gY3VycmVudEhlYXBTaXplID4gbV9tYXhI
ZWFwU2l6ZSA/IDAgOiBtX21heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkVkZW46IG1heEVkZW5TaXplID0gIiwg
bV9tYXhFZGVuU2l6ZSwgIlxuIik7CiAgICAgICAgIG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0
ID0gY3VycmVudEhlYXBTaXplOwotICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAg
ZGF0YUxvZygiTWF4IGhlYXAgc2l6ZTogIiwgbV9tYXhIZWFwU2l6ZSwgIlxuIik7Ci0gICAgICAg
ICAgICBkYXRhTG9nKCJDdXJyZW50IGhlYXAgc2l6ZTogIiwgY3VycmVudEhlYXBTaXplLCAiXG4i
KTsKLSAgICAgICAgICAgIGRhdGFMb2coIlNpemUgYWZ0ZXIgbGFzdCBlZGVuIGNvbGxlY3Rpb246
ICIsIG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0LCAiXG4iKTsKLSAgICAgICAgfQotICAgICAg
ICBkb3VibGUgZWRlblRvT2xkR2VuZXJhdGlvblJhdGlvID0gKGRvdWJsZSltX21heEVkZW5TaXpl
IC8gKGRvdWJsZSltX21heEhlYXBTaXplOwogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIkVkZW4gdG8gb2xkIGdlbmVyYXRpb24gcmF0aW86ICIsIGVkZW5Ub09sZEdl
bmVyYXRpb25SYXRpbywgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJFZGVuOiBzaXplQWZ0
ZXJMYXN0RWRlbkNvbGxlY3QgPSAiLCBjdXJyZW50SGVhcFNpemUsICJcbiIpOworICAgICAgICBk
b3VibGUgZWRlblRvT2xkR2VuZXJhdGlvblJhdGlvID0gKGRvdWJsZSltX21heEVkZW5TaXplIC8g
KGRvdWJsZSltX21heEhlYXBTaXplOwogICAgICAgICBkb3VibGUgbWluRWRlblRvT2xkR2VuZXJh
dGlvblJhdGlvID0gMS4wIC8gMy4wOwogICAgICAgICBpZiAoZWRlblRvT2xkR2VuZXJhdGlvblJh
dGlvIDwgbWluRWRlblRvT2xkR2VuZXJhdGlvblJhdGlvKQogICAgICAgICAgICAgbV9zaG91bGRE
b0Z1bGxDb2xsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgLy8gVGhpcyBzZWVtcyBzdXNwZWN0IGF0
IGZpcnN0LCBidXQgd2hhdCBpdCBkb2VzIGlzIGVuc3VyZSB0aGF0IHRoZSBudXJzZXJ5IHNpemUg
aXMgZml4ZWQuCiAgICAgICAgIG1fbWF4SGVhcFNpemUgKz0gY3VycmVudEhlYXBTaXplIC0gbV9z
aXplQWZ0ZXJMYXN0Q29sbGVjdDsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJFZGVuOiBtYXhIZWFwU2l6ZSA9ICIsIG1fbWF4SGVhcFNpemUsICJcbiIpOwogICAg
ICAgICBtX21heEVkZW5TaXplID0gbV9tYXhIZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJFZGVuOiBtYXhFZGVuU2l6
ZSA9ICIsIG1fbWF4RWRlblNpemUsICJcbiIpOwogICAgICAgICBpZiAobV9mdWxsQWN0aXZpdHlD
YWxsYmFjaykgewogICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRIZWFwU2l6ZSA+PSBtX3NpemVB
ZnRlckxhc3RGdWxsQ29sbGVjdCk7CiAgICAgICAgICAgICBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNr
LT5kaWRBbGxvY2F0ZShjdXJyZW50SGVhcFNpemUgLSBtX3NpemVBZnRlckxhc3RGdWxsQ29sbGVj
dCk7CkBAIC0xNDIyLDYgKzE0MzksOCBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1p
dHMoKQogICAgIH0KIAogICAgIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QgPSBjdXJyZW50SGVhcFNp
emU7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coInNpemVBZnRlckxhc3RDb2xs
ZWN0ID0gIiwgbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCwgIlxuIik7CiAgICAgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZSA9IDA7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTMgKzgzLDE1IEBA
IHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFR5cGUKIAogZW51bSBIZWFwVHlw
ZSB7IFNtYWxsSGVhcCwgTGFyZ2VIZWFwIH07CiAKK2NsYXNzIEhlYXBVdGlsOworCiBjbGFzcyBI
ZWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwKTsKIHB1YmxpYzoKICAgICBmcmll
bmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwogICAg
IHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFsdWUpOyAvLyAwIGZvciBpbW1lZGlhdGUgdmFs
dWVzCi0gICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNDZWxsKik7CisgICAgc3RhdGljIEhl
YXAqIGhlYXAoY29uc3QgSGVhcENlbGwqKTsKIAogICAgIC8vIFRoaXMgY29uc3RhbnQgZGV0ZXJt
aW5lcyBob3cgbWFueSBibG9ja3Mgd2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBvZiBvdXIgCiAg
ICAgLy8gZGVhZGxpbmUgd2hlbiBjYWxsaW5nIEhlYXA6OmlzUGFnZWRPdXQuIERlY3JlYXNpbmcg
aXQgd2lsbCBjYXVzZSB1cyB0byBkZXRlY3QgCkBAIC0xMDIsMTEgKzEwNCw2IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBzdGF0
aWMgdm9pZCBzZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBt
dXN0IGJlIHJ1biBhZnRlciBzdG9wQWxsb2NhdGlvbigpIGlzIGNhbGxlZCBhbmQgCi0gICAgLy8g
YmVmb3JlIGxpdmVuZXNzIGRhdGEgaXMgY2xlYXJlZCB0byBiZSBhY2N1cmF0ZS4KLSAgICBzdGF0
aWMgYm9vbCBpc1BvaW50ZXJHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIsIE1hcmtlZEJsb2NrU2V0
Jiwgdm9pZCogcG9pbnRlcik7Ci0gICAgc3RhdGljIGJvb2wgaXNWYWx1ZUdDT2JqZWN0KFRpbnlC
bG9vbUZpbHRlciwgTWFya2VkQmxvY2tTZXQmLCBKU1ZhbHVlKTsKLQogICAgIHZvaWQgd3JpdGVC
YXJyaWVyKGNvbnN0IEpTQ2VsbCopOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2Vs
bCosIEpTVmFsdWUpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2Vs
bCopOwpAQCAtMTUwLDcgKzE0NywxMSBAQCBwdWJsaWM6CiAgICAgTWFya2VkQWxsb2NhdG9yJiBh
bGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIE1hcmtlZEFsbG9jYXRv
ciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVy
biBtX29iamVjdFNwYWNlLmRlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPiBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9i
amVjdE9mVHlwZShzaXplX3QgYnl0ZXMpOworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
Rm9yQXV4aWxpYXJ5RGF0YShzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYXV4
aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIENvcGllZEFsbG9jYXRvciYgc3RvcmFn
ZUFsbG9jYXRvcigpIHsgcmV0dXJuIG1fc3RvcmFnZVNwYWNlLmFsbG9jYXRvcigpOyB9CisgICAg
dm9pZCogYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOwor
ICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6
ZV90KTsKKyAgICB2b2lkKiB0cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRP
d25lciwgdm9pZCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAg
ICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCBzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZVN0b3Jh
Z2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKICAgICB2
b2lkIGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKQEAgLTI2Nyw2
ICsyNjgsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHQ0xvZ2dpbmc7CiAgICAgZnJp
ZW5kIGNsYXNzIEdDVGhyZWFkOwogICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVTZXQ7CisgICAgZnJp
ZW5kIGNsYXNzIEhlYXBVdGlsOwogICAgIGZyaWVuZCBjbGFzcyBIZWFwVmVyaWZpZXI7CiAgICAg
ZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNv
cHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVy
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVk
ZSA8dHlwZV90cmFpdHM+CkBAIC01OSw3ICs2MCw3IEBAIGlubGluZSBib29sIEhlYXA6OmlzQ29s
bGVjdGluZygpCiAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVj
dGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb247CiB9CiAKLWlu
bGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKK2lubGluZSBIZWFwKiBI
ZWFwOjpoZWFwKGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIHJldHVybiBNYXJrZWRCbG9j
azo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKIH0KQEAgLTE5OSw3ICsyMDAsNyBAQCBpbmxpbmUg
dm9pZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENsYXNzVHlwZT4KLXZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRl
cykKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMp
CiB7CiAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVk
IHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmpl
Y3QuCiAgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5
cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252
ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIx
MCw3ICsyMTEsNyBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLU1hcmtlZFNwYWNlOjpTdWJzcGFjZSYg
SGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQoraW5saW5lIE1hcmtlZFNwYWNlOjpTdWJz
cGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQogewogICAgIC8vIEpTQ2VsbDo6
Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVj
dG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VSVCgoIUNs
YXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAm
IFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBK
U0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMjEsNyArMjIyLDcgQEAgTWFya2Vk
U3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvcgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDbGFzc1R5cGU+Ci1NYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9m
VHlwZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0
b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogewogICAgIC8vIEpTQ2VsbDo6Y2xhc3NJ
bmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yIHRv
IGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VSVCgoIUNsYXNzVHlw
ZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAmIFN0cnVj
dHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBKU0Rlc3Ry
dWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMzEsNiArMjMyLDM3IEBAIE1hcmtlZEFsbG9j
YXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWMKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yT2Jq
ZWN0V2l0aG91dERlc3RydWN0b3IoYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogSGVhcDo6YWxs
b2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7Cisg
ICAgdm9pZCogcmVzdWx0ID0gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZUF1eGlsaWFyeShieXRlcyk7
CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFs
bG9jYXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGlu
dGVuZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93
bmVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBIZWFw
Ojp0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRl
cykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNwYWNlLnRyeUFsbG9jYXRlQXV4aWxp
YXJ5KGJ5dGVzKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dG
KCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4i
LCBieXRlcywgaW50ZW5kZWRPd25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5l
IHZvaWQqIEhlYXA6OnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAg
dm9pZCogbmV3QmFzZSA9IHRyeUFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIG5ld1Np
emUpOworICAgIGlmICghbmV3QmFzZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgbWVt
Y3B5KG5ld0Jhc2UsIG9sZEJhc2UsIG9sZFNpemUpOworICAgIHJldHVybiBuZXdCYXNlOworfQor
CiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewogICAgIENoZWNr
ZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQ
dHIpOwpAQCAtMzU0LDMzICszODYsNiBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2so
c2l6ZV90IGNhCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmpl
Y3QoVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0
LCB2b2lkKiBwb2ludGVyKQotewotICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRC
bG9jazo6YmxvY2tGb3IocG9pbnRlcik7Ci0gICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2Vf
Y2FzdDxCaXRzPihjYW5kaWRhdGUpKSkgewotICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAh
bWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIU1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKHBv
aW50ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1hcmtlZEJsb2NrU2V0
LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghY2FuZGlkYXRlLT5pc0xpdmVDZWxsKHBvaW50ZXIpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgSGVhcDo6aXNWYWx1ZUdD
T2JqZWN0KFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9j
a1NldCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzUG9pbnRlckdDT2JqZWN0KGZpbHRlciwgbWFy
a2VkQmxvY2tTZXQsIHN0YXRpY19jYXN0PHZvaWQqPih2YWx1ZS5hc0NlbGwoKSkpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEhlYXBJbmxpbmVzX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBB
cmUgeW91IHRpcmVkIG9mIHdhaXRpbmcgZm9yIGFsbCBvZiBXZWJLaXQgdG8gYnVpbGQgYmVjYXVz
ZSB5b3UgY2hhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYQorLy8gZnVuY3Rpb24gaW4gSGVh
cElubGluZXMuaD8gIERvZXMgaXQgYm90aGVyIHlvdSB0aGF0IHlvdSdyZSB3YWl0aW5nIG9uIHJl
YnVpbGRpbmcgdGhlIEpTIERPTQorLy8gYmluZGluZ3MgZXZlbiB0aG91Z2ggeW91ciBjaGFuZ2Ug
aXMgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBvbmx5IDIgLmNwcCBmaWxlcz8gIFRoZW4gSGVh
cFV0aWwuaAorLy8gaXMgZm9yIHlvdSEgIEV2ZXJ5dGhpbmcgaW4gdGhpcyBjbGFzcyBzaG91bGQg
YmUgYSBzdGF0aWMgbWV0aG9kIHRoYXQgdGFrZXMgYSBIZWFwJiBpZiBuZWVkZWQuCisvLyBUaGlz
IGlzIGEgZnJpZW5kIG9mIEhlYXAsIHNvIHlvdSBjYW4gYWNjZXNzIGFsbCBvZiBIZWFwJ3MgcHJp
dmF0ZXMuCisvLworLy8gVGhpcyBlbmRzIHVwIGJlaW5nIGFuIGlzc3VlIGJlY2F1c2UgSGVhcCBl
eHBvc2VzIGEgbG90IG9mIG1ldGhvZHMgdGhhdCBvdWdodCB0byBiZSBpbmxpbmUgZm9yCisvLyBw
ZXJmb3JtYW5jZSBvciB0aGF0IG11c3QgYmUgaW5saW5lIGJlY2F1c2UgdGhleSBhcmUgdGVtcGxh
dGVzLiAgVGhpcyBjbGFzcyBvdWdodCB0byBjb250YWluCisvLyBtZXRob2RzIHRoYXQgYXJlIHVz
ZWQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29sbGVjdG9yLCBvciBmb3IgdW51c3Vh
bCBjbGllbnRzIHRoYXQgbmVlZAorLy8gdG8gcmVhY2ggZGVlcCBpbnRvIHRoZSBjb2xsZWN0b3Ig
Zm9yIHNvbWUgcmVhc29uLiAgRG9uJ3QgcHV0IHRoaW5ncyBpbiBoZXJlIHRoYXQgd291bGQgY2F1
c2UgeW91CisvLyB0byBoYXZlIHRvIGluY2x1ZGUgaXQgZnJvbSBtb3JlIHRoYW4gYSBoYW5kZnVs
IG9mIHBsYWNlcywgc2luY2UgdGhhdCB3b3VsZCBkZWZlYXQgdGhlIHB1cnBvc2UuCisvLyBUaGlz
IGNsYXNzIGlzbid0IGhlcmUgdG8gbG9vayBwcmV0dHkuICBJdCdzIHRvIGxldCB1cyBoYWNrIHRo
ZSBHQyBtb3JlIGVhc2lseSEKKworY2xhc3MgSGVhcFV0aWwgeworcHVibGljOgorICAgIC8vIFRo
aXMgZnVuY3Rpb24gbXVzdCBiZSBydW4gYWZ0ZXIgc3RvcEFsbG9jYXRpb24oKSBpcyBjYWxsZWQg
YW5kIAorICAgIC8vIGJlZm9yZSBsaXZlbmVzcyBkYXRhIGlzIGNsZWFyZWQgdG8gYmUgYWNjdXJh
dGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBzdGF0aWMgdm9pZCBmaW5kR0NP
YmplY3RQb2ludGVycygKKyAgICAgICAgVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxv
Y2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lkKiBwYXNzZWRQb2ludGVyLAorICAgICAgICBjb25z
dCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgY2hhciogcG9pbnRlciA9IHN0YXRpY19jYXN0
PGNoYXIqPihwYXNzZWRQb2ludGVyKTsKKyAgICAKKyAgICAgICAgTWFya2VkQmxvY2sqIGNhbmRp
ZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihwb2ludGVyKTsKKyAgICAgICAgLy8gSXQncyBw
b3NzaWJsZSBmb3IgYSBidXR0ZXJmbHkgcG9pbnRlciB0byBwb2ludCBwYXN0IHRoZSBlbmQgb2Yg
YSBidXR0ZXJmbHkuIENoZWNrIHRoaXMgbm93LgorICAgICAgICBpZiAocG9pbnRlciA8PSBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KGNhbmRpZGF0ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7Cisg
ICAgICAgICAgICAvLyBXZSBtYXkgYmUgaW50ZXJlc3RlZCBpbiB0aGUgbGFzdCBjZWxsIG9mIHRo
ZSBwcmV2aW91cyBNYXJrZWRCbG9jay4KKyAgICAgICAgICAgIGNoYXIqIHByZXZpb3VzUG9pbnRl
ciA9IHBvaW50ZXIgLSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gMTsKKyAgICAgICAgICAgIE1h
cmtlZEJsb2NrKiBwcmV2aW91c0NhbmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihwcmV2
aW91c1BvaW50ZXIpOworICAgICAgICAgICAgaWYgKCFmaWx0ZXIucnVsZU91dChiaXR3aXNlX2Nh
c3Q8Qml0cz4ocHJldmlvdXNDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICYmIG1hcmtlZEJs
b2NrU2V0LnNldCgpLmNvbnRhaW5zKHByZXZpb3VzQ2FuZGlkYXRlKQorICAgICAgICAgICAgICAg
ICYmIHByZXZpb3VzQ2FuZGlkYXRlLT5jZWxsS2luZCgpID09IEhlYXBDZWxsOjpBdXhpbGlhcnkp
IHsKKyAgICAgICAgICAgICAgICBwcmV2aW91c1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4o
cHJldmlvdXNDYW5kaWRhdGUtPmNlbGxBbGlnbihwcmV2aW91c1BvaW50ZXIpKTsKKyAgICAgICAg
ICAgICAgICBpZiAocHJldmlvdXNDYW5kaWRhdGUtPmlzTGl2ZUNlbGwocHJldmlvdXNQb2ludGVy
KSkKKyAgICAgICAgICAgICAgICAgICAgZnVuYyhwcmV2aW91c1BvaW50ZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChmaWx0ZXIucnVsZU91dChiaXR3aXNl
X2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FuZGlkYXRl
IHx8ICFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoIW1hcmtlZEJsb2NrU2V0
LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgYXV0byB0cnlQb2ludGVyID0gWyZdICh2b2lkKiBwb2ludGVyKSB7CisgICAgICAgICAgICBp
ZiAoY2FuZGlkYXRlLT5pc0xpdmVDZWxsKHBvaW50ZXIpKQorICAgICAgICAgICAgICAgIGZ1bmMo
cG9pbnRlcik7CisgICAgICAgIH07CisgICAgCisgICAgICAgIGlmIChjYW5kaWRhdGUtPmNlbGxL
aW5kKCkgPT0gSGVhcENlbGw6OkpTQ2VsbCkgeworICAgICAgICAgICAgaWYgKCFNYXJrZWRCbG9j
azo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICAgICAgdHJ5UG9pbnRlcihwb2ludGVyKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBBIGJ1dHRlcmZseSBjb3VsZCBwb2ludCBp
bnRvIHRoZSBtaWRkbGUgb2YgYW4gb2JqZWN0LgorICAgICAgICBjaGFyKiBhbGlnbmVkUG9pbnRl
ciA9IHN0YXRpY19jYXN0PGNoYXIqPihjYW5kaWRhdGUtPmNlbGxBbGlnbihwb2ludGVyKSk7Cisg
ICAgICAgIHRyeVBvaW50ZXIoYWxpZ25lZFBvaW50ZXIpOworICAgIAorICAgICAgICAvLyBBbHNv
LCBhIGJ1dHRlcmZseSBjb3VsZCBwb2ludCBhdCB0aGUgZW5kIG9mIGFuIG9iamVjdCBwbHVzIHNp
emVvZihJbmRleGluZ0hlYWRlcikuIEluIHRoYXQKKyAgICAgICAgLy8gY2FzZSwgdGhpcyBpcyBw
b2ludGluZyB0byB0aGUgb2JqZWN0IHRvIHRoZSByaWdodCBvZiB0aGUgb25lIHdlIHNob3VsZCBi
ZSBtYXJraW5nLgorICAgICAgICBpZiAoY2FuZGlkYXRlLT5hdG9tTnVtYmVyKGFsaWduZWRQb2lu
dGVyKSA+IE1hcmtlZEJsb2NrOjpmaXJzdEF0b20oKQorICAgICAgICAgICAgJiYgcG9pbnRlciA8
PSBhbGlnbmVkUG9pbnRlciArIHNpemVvZihJbmRleGluZ0hlYWRlcikpCisgICAgICAgICAgICB0
cnlQb2ludGVyKGFsaWduZWRQb2ludGVyIC0gY2FuZGlkYXRlLT5jZWxsU2l6ZSgpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNQb2ludGVyR0NPYmplY3RKU0NlbGwoCisgICAgICAg
IFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCwg
Y29uc3Qgdm9pZCogcG9pbnRlcikKKyAgICB7CisgICAgICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRh
dGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocG9pbnRlcik7CisgICAgICAgIGlmIChmaWx0ZXIu
cnVsZU91dChiaXR3aXNlX2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghY2FuZGlkYXRlIHx8ICFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRh
dGUpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICghbWFya2VkQmxvY2tTZXQu
c2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChjYW5kaWRhdGUtPmNlbGxLaW5kKCkgIT0gSGVhcENlbGw6OkpT
Q2VsbCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
Y2FuZGlkYXRlLT5pc0xpdmVDZWxsKHBvaW50ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBib29sIGlzVmFsdWVHQ09iamVjdCgKKyAgICAgICAgVGlueUJsb29tRmlsdGVyIGZpbHRlciwg
TWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIGlzUG9pbnRlckdDT2JqZWN0SlNDZWxsKGZpbHRlciwgbWFya2VkQmxvY2tT
ZXQsIHN0YXRpY19jYXN0PHZvaWQqPih2YWx1ZS5hc0NlbGwoKSkpOworICAgIH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcg
KzY2LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJldGlyZShNYXJrZWRCbG9jawogICAgIGJs
b2NrLT5kaWRSZXRpcmVCbG9jayhmcmVlTGlzdCk7CiB9CiAKLWlubGluZSB2b2lkKiBNYXJrZWRB
bGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmdJbXBsKHNpemVfdCBi
eXRlcykKIHsKICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKICAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudEJsb2NrID09IG1fbmV4dEJsb2NrVG9Td2VlcCk7CkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBp
bmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlQb3BGcmVlCiAgICAgcmV0dXJuIGhlYWQ7
CiB9CiAKLWlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBi
eXRlcykKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENv
bGxlY3Rpbmcoc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVCghbV9oZWFwLT5pc0J1c3koKSk7
CiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBBbGxvY2F0aW9uOwotICAgIHZv
aWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSGVscGVyKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQg
PSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChieXRlcyk7CiAKICAgICBtX2hlYXAt
Pm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwogICAgIEFTU0VSVChyZXN1bHQg
fHwgIW1fY3VycmVudEJsb2NrKTsKQEAgLTE0OCw2ICsxNDgsMTggQEAgQUxXQVlTX0lOTElORSB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZQogCiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9j
YXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5dGVzKQogeworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0
cnVlOworICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChieXRlcywgY3Jhc2hPbkZhaWx1
cmUpOworfQorCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6
ZV90IGJ5dGVzKQoreworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBmYWxzZTsKKyAgICByZXR1
cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9p
ZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSW1wbChzaXplX3QgYnl0ZXMsIGJv
b2wgY3Jhc2hPbkZhaWx1cmUpCit7CiAgICAgQVNTRVJUKG1faGVhcC0+dm0oKS0+Y3VycmVudFRo
cmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgp
OwogCkBAIC0xNTUsMzggKzE2Nyw1NiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UoCiAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0LmhlYWQpOwogICAgIG1faGVhcC0+ZGlk
QWxsb2NhdGUobV9mcmVlTGlzdC5ieXRlcyk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gdHJ5
QWxsb2NhdGUoYnl0ZXMpOworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENv
bGxlY3RpbmcoYnl0ZXMpOwogICAgIAogICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIAogICAgIGlmIChtX2hlYXAtPmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKSkgewotICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7Cisg
ICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwogICAg
ICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAg
ICBBU1NFUlQoIW1faGVhcC0+c2hvdWxkQ29sbGVjdCgpKTsKICAgICAKLSAgICBNYXJrZWRCbG9j
ayogYmxvY2sgPSBhbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKLSAgICBBU1NFUlQoYmxvY2spOworICAg
IE1hcmtlZEJsb2NrKiBibG9jayA9IHRyeUFsbG9jYXRlQmxvY2soYnl0ZXMpOworICAgIGlmICgh
YmxvY2spIHsKKyAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQogICAgIGFkZEJsb2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgcmVz
dWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91
dENvbGxlY3RpbmcoYnl0ZXMpOwogICAgIEFTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2soc2l6
ZV90IGJ5dGVzKQorc3RhdGljIHNpemVfdCBibG9ja0hlYWRlclNpemUoKQoreworICAgIHJldHVy
biBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplb2Yo
TWFya2VkQmxvY2spKTsKK30KKworc2l6ZV90IE1hcmtlZEFsbG9jYXRvcjo6YmxvY2tTaXplRm9y
Qnl0ZXMoc2l6ZV90IGJ5dGVzKQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRC
bG9jazo6YmxvY2tTaXplOwotICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9j
aykpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0
ZXMpOworICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IGJsb2NrSGVhZGVyU2l6ZSgpICsg
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwog
ICAgIG1pbkFsbG9jYXRpb25TaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKFdURjo6cGFn
ZVNpemUoKSwgbWluQWxsb2NhdGlvblNpemUpOwotICAgIHNpemVfdCBibG9ja1NpemUgPSBzdGQ6
Om1heChtaW5CbG9ja1NpemUsIG1pbkFsbG9jYXRpb25TaXplKTsKKyAgICByZXR1cm4gc3RkOjpt
YXgobWluQmxvY2tTaXplLCBtaW5BbGxvY2F0aW9uU2l6ZSk7Cit9CiAKLSAgICBzaXplX3QgY2Vs
bFNpemUgPSBtX2NlbGxTaXplID8gbV9jZWxsU2l6ZSA6IFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKK3NpemVfdCBNYXJrZWRBbGxvY2F0b3I6
Om9wdGltYWxTaXplRm9yTGFyZ2VBbGxvY2F0aW9uKHNpemVfdCBieXRlcykKK3sKKyAgICByZXR1
cm4gYmxvY2tTaXplRm9yQnl0ZXMoYnl0ZXMpIC0gYmxvY2tIZWFkZXJTaXplKCk7Cit9CiAKLSAg
ICByZXR1cm4gTWFya2VkQmxvY2s6OmNyZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNl
bGxTaXplLCBtX2F0dHJpYnV0ZXMpOworTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGVCbG9jayhzaXplX3QgYnl0ZXMpCit7CisgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGJs
b2NrU2l6ZUZvckJ5dGVzKGJ5dGVzKTsKKyAgICBzaXplX3QgY2VsbFNpemUgPSBtX2NlbGxTaXpl
ID8gbV9jZWxsU2l6ZSA6IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRv
bVNpemU+KGJ5dGVzKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNyZWF0ZSgqbV9oZWFw
LCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwogfQogCiB2b2lkIE1h
cmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwMzky
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0cnVjdGlvbk1vZGUg
ZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0K
ICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
cy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCogdHJ5
QWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9CiAg
ICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsKQEAgLTY4LDEzICs2
OSwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0KEhlYXAqLCBNYXJrZWRTcGFjZSosIHNpemVf
dCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYpOwogCiAgICAgYm9vbCBpc1Bh
Z2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBibG9ja1Np
emVGb3JCeXRlcyhzaXplX3QpOworICAgIHN0YXRpYyBzaXplX3Qgb3B0aW1hbFNpemVGb3JMYXJn
ZUFsbG9jYXRpb24oc2l6ZV90KTsKICAgIAogcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUo
c2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKKyAgICB2b2lk
KiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChzaXplX3QsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAg
IHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rpbmcoc2l6ZV90KTsKKyAgICB2b2lkKiB0
cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QpOwogICAgIHZvaWQqIHRyeVBv
cEZyZWVMaXN0KHNpemVfdCk7Ci0gICAgTWFya2VkQmxvY2sqIGFsbG9jYXRlQmxvY2soc2l6ZV90
KTsKKyAgICBNYXJrZWRCbG9jayogdHJ5QWxsb2NhdGVCbG9jayhzaXplX3QpOwogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKCk7CiAgICAgdm9pZCByZXRp
cmUoTWFya2VkQmxvY2sqLCBNYXJrZWRCbG9jazo6RnJlZUxpc3QmKTsKICAgICAKQEAgLTExMywy
MSArMTE5LDM1IEBAIGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiAKICAg
ICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCit7CisgICAgTWFya2VkQmxvY2s6OkZy
ZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOworICAgIGlmIChVTkxJS0VMWSghaGVhZCkp
IHsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcyk7Cisg
ICAgICAgIGlmIChyZXN1bHQgJiYgIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNl
dChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKKyAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkKKyAgICAgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKKyAgICByZXR1cm4g
aGVhZDsKK30KKwogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90
IGJ5dGVzKQogewogICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3Qu
aGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKSB7CiAgICAgICAgIHZvaWQqIHJlc3VsdCA9
IGFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgbWVtc2V0
KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOwotI2VuZGlmCisgICAgICAgIGlmICghQVNTRVJUX0RJU0FC
TEVEKQorICAgICAgICAgICAgbWVtc2V0KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5u
ZXh0OwotI2lmbmRlZiBOREVCVUcKLSAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOwotI2Vu
ZGlmCisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENE
LCBieXRlcyk7CiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTQgKzM1LDMyIEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIGNvbnN0IGJvb2wgY29tcHV0ZUJh
bGFuY2UgPSBmYWxzZTsKIHN0YXRpYyBzaXplX3QgYmFsYW5jZTsKIAotTWFya2VkQmxvY2sqIE1h
cmtlZEJsb2NrOjpjcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1
dGVzJiBhdHRyaWJ1dGVzKQorc3RhdGljIGJvb2wgcmVzZXRGcmVlQ2VsbHNCYWRseSgpCit7Cisg
ICAgcmV0dXJuICFBU1NFUlRfRElTQUJMRUQgfHwgT3B0aW9uczo6cmVzZXRGcmVlQ2VsbHNCYWRs
eSgpOworfQorCitzdGF0aWMgdm9pZCByZXNldEJhZGx5KHZvaWQqIGJhc2UsIHNpemVfdCBzaXpl
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSBzaXplIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsg
aS0tOykgeworICAgICAgICBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2UpW2ldID0g
SlNWYWx1ZTo6ZW5jb2RlKAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PEpTQ2VsbCo+KHN0YXRp
Y19jYXN0PGludHB0cl90Pig2NjYgKiA4KSkpOworICAgIH0KK30KKworTWFya2VkQmxvY2sqIE1h
cmtlZEJsb2NrOjp0cnlDcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzKQogewogICAgIGlmIChjb21wdXRlQmFsYW5jZSkgewogICAgICAg
ICBiYWxhbmNlKys7CiAgICAgICAgIGlmICghKGJhbGFuY2UgJSAxMCkpCiAgICAgICAgICAgICBk
YXRhTG9nKCJNYXJrZWRCbG9jayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsKICAgICB9Ci0g
ICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1hbGxvYyhi
bG9ja1NpemUsIGNhcGFjaXR5KSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2Vs
bFNpemUsIGF0dHJpYnV0ZXMpOworICAgIHZvaWQqIGJsb2NrU3BhY2UgPSB0cnlGYXN0QWxpZ25l
ZE1hbGxvYyhibG9ja1NpemUsIGNhcGFjaXR5KTsKKyAgICBpZiAoIWJsb2NrU3BhY2UpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChyZXNldEZyZWVDZWxsc0JhZGx5KCkpCisgICAg
ICAgIHJlc2V0QmFkbHkoYmxvY2tTcGFjZSwgY2FwYWNpdHkpOworICAgIE1hcmtlZEJsb2NrKiBi
bG9jayA9IG5ldyAoTm90TnVsbCwgYmxvY2tTcGFjZSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBj
YXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMpOwogICAgIGhlYXAuZGlkQWxsb2NhdGVCbG9j
ayhjYXBhY2l0eSk7CiAgICAgcmV0dXJuIGJsb2NrOwogfQpAQCAtOTIsMTEgKzExMCwxMSBAQCBp
bmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2FsbERlc3RydWN0b3IoCiAgICAgY2VsbC0+emFwKCk7
CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtl
ZEJsb2NrOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBib29sIGNhbGxEZXN0cnVjdG9ycz4KK3RlbXBs
YXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtlZEJsb2NrOjpTd2Vl
cE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRC
bG9jazo6UmVzZXRNb2RlIHJlc2V0TW9kZT4KIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRC
bG9jazo6c3BlY2lhbGl6ZWRTd2VlcCgpCiB7CiAgICAgQVNTRVJUKGJsb2NrU3RhdGUgIT0gQWxs
b2NhdGVkICYmIGJsb2NrU3RhdGUgIT0gRnJlZUxpc3RlZCk7Ci0gICAgQVNTRVJUKCEoIWNhbGxE
ZXN0cnVjdG9ycyAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CisgICAgQVNTRVJUKCEoZGVz
dHJ1Y3Rpb25Nb2RlID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09IFN3
ZWVwT25seSkpOwogCiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9y
ZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUs
IHNpbmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhl
CkBAIC0xMDksMTEgKzEyNywxMyBAQCBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6
OnNwZWNpCiAKICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxI
ZWFwQ2VsbCo+KCZhdG9tcygpW2ldKTsKIAotICAgICAgICBpZiAoY2FsbERlc3RydWN0b3JzICYm
IGJsb2NrU3RhdGUgIT0gTmV3KQorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IE5lZWRz
RGVzdHJ1Y3Rpb24gJiYgYmxvY2tTdGF0ZSAhPSBOZXcpCiAgICAgICAgICAgICBjYWxsRGVzdHJ1
Y3RvcihjZWxsKTsKIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkg
ewogICAgICAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxGcmVl
Q2VsbCo+KGNlbGwpOworICAgICAgICAgICAgaWYgKHJlc2V0TW9kZSA9PSBSZXNldEJhZGx5KQor
ICAgICAgICAgICAgICAgIHJlc2V0QmFkbHkoZnJlZUNlbGwsIGNlbGxTaXplKCkpOwogICAgICAg
ICAgICAgZnJlZUNlbGwtPm5leHQgPSBoZWFkOwogICAgICAgICAgICAgaGVhZCA9IGZyZWVDZWxs
OwogICAgICAgICAgICAgKytjb3VudDsKQEAgLTEzOSwxNyArMTU5LDI1IEBAIE1hcmtlZEJsb2Nr
OjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXAKICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7
CiAKICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24p
Ci0gICAgICAgIHJldHVybiBzd2VlcEhlbHBlcjx0cnVlPihzd2VlcE1vZGUpOwotICAgIHJldHVy
biBzd2VlcEhlbHBlcjxmYWxzZT4oc3dlZXBNb2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVs
cGVyU2VsZWN0UmVzZXRNb2RlPE5lZWRzRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7CisgICAgcmV0
dXJuIHN3ZWVwSGVscGVyU2VsZWN0UmVzZXRNb2RlPERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24+KHN3
ZWVwTW9kZSk7Cit9CisKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+
CitNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnN3ZWVwSGVscGVyU2VsZWN0UmVz
ZXRNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCit7CisgICAgaWYgKHJlc2V0RnJlZUNlbGxzQmFk
bHkoKSkKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U3RhdGVBbmRTd2VlcE1vZGU8
ZGVzdHJ1Y3Rpb25Nb2RlLCBSZXNldEJhZGx5Pihzd2VlcE1vZGUpOworICAgIHJldHVybiBzd2Vl
cEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlPGRlc3RydWN0aW9uTW9kZSwgRG9udFJlc2V0
Pihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxib29sIGNhbGxEZXN0cnVjdG9ycz4KLU1hcmtl
ZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXBIZWxwZXIoU3dlZXBNb2RlIHN3ZWVw
TW9kZSkKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJs
b2NrOjpSZXNldE1vZGUgcmVzZXRNb2RlPgorTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpzd2VlcEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlKFN3ZWVwTW9kZSBzd2VlcE1v
ZGUpCiB7CiAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgY2FzZSBOZXc6CiAgICAgICAgIEFT
U0VSVChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAgcmV0dXJuIHNwZWNp
YWxpemVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGNhbGxEZXN0cnVjdG9ycz4oKTsKKyAg
ICAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGRlc3Ry
dWN0aW9uTW9kZSwgcmVzZXRNb2RlPigpOwogICAgIGNhc2UgRnJlZUxpc3RlZDoKICAgICAgICAg
Ly8gSGFwcGVucyB3aGVuIGEgYmxvY2sgdHJhbnNpdGlvbnMgdG8gZnVsbHkgYWxsb2NhdGVkLgog
ICAgICAgICBBU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7CkBAIC0xNjAsOCAr
MTg4LDggQEAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJsb2NrOjpzd2VlcAogICAgICAg
ICByZXR1cm4gRnJlZUxpc3QoKTsKICAgICBjYXNlIE1hcmtlZDoKICAgICAgICAgcmV0dXJuIHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QKLSAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2Vl
cDxNYXJrZWQsIFN3ZWVwVG9GcmVlTGlzdCwgY2FsbERlc3RydWN0b3JzPigpCi0gICAgICAgICAg
ICA6IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcE9ubHksIGNhbGxEZXN0cnVjdG9ycz4o
KTsKKyAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwVG9GcmVlTGlz
dCwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+KCkKKyAgICAgICAgICAgIDogc3BlY2lhbGl6
ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwT25seSwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+KCk7
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjAzOTIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMTA5LDEyICsxMDksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtdXRhYmxl
IFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgTWFya2Vk
QmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBz
aXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAgICAgc3Rh
dGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvciosIHNpemVf
dCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7CiAKICAg
ICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CisgICAgICAgIHZv
aWQqIGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogYmxvY2tG
b3IoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZpcnN0QXRvbSgpOworICAg
ICAgICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAgICAgIAogICAgICAgICB2
b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKQEAgLTE4NCwxNSArMTg2LDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNr
ID0gYXRvbVNpemUgLSAxOwogCiAgICAgICAgIGVudW0gQmxvY2tTdGF0ZSB7IE5ldywgRnJlZUxp
c3RlZCwgQWxsb2NhdGVkLCBNYXJrZWQsIFJldGlyZWQgfTsKLSAgICAgICAgdGVtcGxhdGU8Ym9v
bCBjYWxsRGVzdHJ1Y3RvcnM+IEZyZWVMaXN0IHN3ZWVwSGVscGVyKFN3ZWVwTW9kZSA9IFN3ZWVw
T25seSk7CisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZT4gRnJlZUxpc3Qgc3dlZXBI
ZWxwZXJTZWxlY3RSZXNldE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKKyAgICAgICAgZW51
bSBSZXNldE1vZGUgeyBEb250UmVzZXQsIFJlc2V0QmFkbHkgfTsKKyAgICAgICAgdGVtcGxhdGU8
RGVzdHJ1Y3Rpb25Nb2RlLCBSZXNldE1vZGU+IEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0U3Rh
dGVBbmRTd2VlcE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKIAogICAgICAgICB0eXBlZGVm
IGNoYXIgQXRvbVthdG9tU2l6ZV07CiAKICAgICAgICAgTWFya2VkQmxvY2soTWFya2VkQWxsb2Nh
dG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0
dHJpYnV0ZXMmKTsKICAgICAgICAgQXRvbSogYXRvbXMoKTsKLSAgICAgICAgc2l6ZV90IGF0b21O
dW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIGNhbGxEZXN0cnVjdG9yKEhlYXBDZWxs
Kik7Ci0gICAgICAgIHRlbXBsYXRlPEJsb2NrU3RhdGUsIFN3ZWVwTW9kZSwgYm9vbCBjYWxsRGVz
dHJ1Y3RvcnM+IEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAoKTsKKyAgICAgICAgdGVtcGxhdGU8
QmxvY2tTdGF0ZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFJlc2V0TW9kZT4gRnJlZUxp
c3Qgc3BlY2lhbGl6ZWRTd2VlcCgpOwogICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2sqIG1f
cHJldjsKICAgICAgICAgTWFya2VkQmxvY2sqIG1fbmV4dDsKQEAgLTIzNiw2ICsyMzksMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4o
cCkgJiBhdG9tQWxpZ25tZW50TWFzayk7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQqIE1hcmtl
ZEJsb2NrOjpjZWxsQWxpZ24odm9pZCogcCkKKyAgICB7CisgICAgICAgIEJpdHMgYmFzZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYXRvbXMoKSArIGZpcnN0QXRvbSgpKTsKKyAgICAgICAgQml0
cyBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPihwKTsKKyAgICAgICAgYml0cyAtPSBiYXNl
OworICAgICAgICBiaXRzIC09IGJpdHMgJSBjZWxsU2l6ZSgpOworICAgICAgICBiaXRzICs9IGJh
c2U7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihiaXRzKTsKKyAgICB9
CisKICAgICBpbmxpbmUgTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2
b2lkKiBwKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxv
Y2sqPihyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYmxvY2tNYXNrKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjAzOTIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjIsMTIgKzYyLDE1IEBAIHB1YmxpYzoKICAgICB+TWFya2VkU3BhY2UoKTsKICAgICB2b2lk
IGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKKyAgICBzdGF0aWMgc2l6ZV90IG9wdGltYWxTaXpl
Rm9yKHNpemVfdCk7CisgICAgCiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3Ioc2l6
ZV90KTsKICAgICBNYXJrZWRBbGxvY2F0b3ImIGRlc3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6ZV90
KTsKICAgICBNYXJrZWRBbGxvY2F0b3ImIGF1eGlsaWFyeUFsbG9jYXRvckZvcihzaXplX3QpOwog
ICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxv
Y2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlh
cnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOwogCiAg
ICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhEZXN0cnVjdG9yKCkgeyByZXR1cm4g
bV9kZXN0cnVjdG9yU3BhY2U7IH0KICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0
aG91dERlc3RydWN0b3IoKSB7IHJldHVybiBtX25vcm1hbFNwYWNlOyB9CkBAIC0xODIsNiArMTg1
LDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGkKICAgICByZXR1
cm4gYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZShieXRlcyk7CiB9CiAKK2lu
bGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90IGJ5dGVz
KQoreworICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLnRyeUFsbG9jYXRl
KGJ5dGVzKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1h
cmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBm
b3JFYWNoU3Vic3BhY2UoCkBAIC0yNTEsNiArMjU5LDE1IEBAIGlubGluZSB2b2lkIE1hcmtlZFNw
YWNlOjpmb3JFYWNoU3Vic3BhY2UKICAgICBmdW5jKG1fYXV4aWxpYXJ5U3BhY2UsIGF0dHJpYnV0
ZXMpOwogfQogCitBTFdBWVNfSU5MSU5FIHNpemVfdCBNYXJrZWRTcGFjZTo6b3B0aW1hbFNpemVG
b3Ioc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKQorICAg
ICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHByZWNpc2VTdGVwLCBieXRlcyk7
CisgICAgaWYgKGJ5dGVzIDw9IGltcHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihpbXByZWNpc2VTdGVwLCBieXRlcyk7CisgICAgcmV0dXJuIE1h
cmtlZEFsbG9jYXRvcjo6b3B0aW1hbFNpemVGb3JMYXJnZUFsbG9jYXRpb24oYnl0ZXMpOworfQor
CiBpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9yKFN1YnNw
YWNlJiBzcGFjZSwgc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChieXRlcyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDM5
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsNiArOTYsOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRT
dGFydE1hcmtpbmcoKQogewogICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9
PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KKyAgICBlbHNlCisgICAgICAgIHJlc2V0
KCk7CiAKICAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSB2bSgpLmhlYXBQcm9m
aWxlcigpKQogICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBoZWFwUHJvZmlsZXItPmFj
dGl2ZVNuYXBzaG90QnVpbGRlcigpOwpAQCAtMTE4LDEwICsxMjAsNDIgQEAgdm9pZCBTbG90Vmlz
aXRvcjo6Y2xlYXJNYXJrU3RhY2soKQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2Vy
dmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewotICAgIEpTQ2VsbCoqIHJvb3RzID0g
Y29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2Vy
dmF0aXZlUm9vdHMucm9vdHMoKTsKICAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3Rz
LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAg
YXBwZW5kKHJvb3RzW2ldKTsKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNb
aV0pOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFw
Q2VsbCogaGVhcENlbGwpCit7CisgICAgaWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIEFTU0VSVCghbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24pOwor
ICAgIAorICAgIGlmIChIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGhlYXBDZWxsKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihoZWFwQ2VsbCk7CisgICAgc3dpdGNoIChibG9jay0+Y2VsbEtpbmQoKSkgeworICAgIGNh
c2UgSGVhcENlbGw6OkpTQ2VsbDogeworICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAgICAgCisgICAgICAgIGlmICghanNDZWxsLT5z
dHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGpzQ2VsbC0+c2V0Q2Vs
bFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisKKyAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2so
YmxvY2ssIGpzQ2VsbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgSGVhcENlbGw6OkF1eGlsaWFyeTogeworICAgICAgICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwo
YmxvY2ssIGhlYXBDZWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gfQogfQogCiB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmQoSlNWYWx1ZSB2YWx1ZSkKQEAgLTE2OCwxNyArMjAyLDQ1IEBAIHZv
aWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWEKIAogdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQogeworICAgIGFwcGVuZFRvTWFya1N0
YWNrKE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKSwgY2VsbCk7Cit9CisKK3ZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKE1hcmtlZEJsb2NrKiBibG9jaywgSlNDZWxsKiBjZWxs
KQorewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxs
LT5pc1phcHBlZCgpKTsKLQorICAgIAorICAgIC8vIEZJWE1FOiBUaGVzZSAianVzdCB3b3JrIiBi
ZWNhdXNlIHRoZSBHQyByZXNldHMgdGhlc2UgZmllbGRzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBl
bHNlLiBCdXQKKyAgICAvLyB0aGF0IHdvbid0IGJlIHRoZSBjYXNlIHdoZW4gd2UgZG8gY29uY3Vy
cmVudCBHQy4KICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5dGVzVmlzaXRlZCArPSBNYXJr
ZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7CisgICAgbV9ieXRlc1Zpc2l0ZWQg
Kz0gYmxvY2stPmNlbGxTaXplKCk7CisgICAgCiAgICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7CiAK
ICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAgICAgICAgbV9oZWFw
U25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2b2lkIFNsb3RWaXNpdG9y
OjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgaWYgKEhlYXA6OnRlc3RB
bmRTZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBub3RlTGl2ZUF1
eGlsaWFyeUNlbGwoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGJhc2UpLCBiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihiYXNlKSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6Om5vdGVMaXZlQXV4aWxpYXJ5
Q2VsbChNYXJrZWRCbG9jayogYmxvY2ssIEhlYXBDZWxsKikKK3sKKyAgICAvLyBXZSBnZXQgaGVy
ZSBvbmNlIHBlciBHQyB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzOgorICAgIC8vCisgICAgLy8g
RWRlbiBjb2xsZWN0aW9uOiBpZiB0aGUgY2VsbCB3YXMgYWxsb2NhdGVkIHNpbmNlIHRoZSBsYXN0
IGNvbGxlY3Rpb24gYW5kIGlzIGxpdmUgc29tZWhvdy4KKyAgICAvLworICAgIC8vIEZ1bGwgY29s
bGVjdGlvbjogaWYgdGhlIGNlbGwgaXMgbGl2ZSBzb21laG93LgorICAgIAorICAgIG1fdmlzaXRD
b3VudCsrOworICAgIG1fYnl0ZXNWaXNpdGVkICs9IGJsb2NrLT5jZWxsU2l6ZSgpOworfQorCiBj
bGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlIHsKIHB1YmxpYzoKICAgICBTZXRDdXJyZW50Q2VsbFNj
b3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBKU0NlbGwqIGNlbGwpCkBAIC0yMDIsOSAr
MjY0LDkgQEAgcHJpdmF0ZToKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRD
aGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2Vk
KGNlbGwpKTsKLQorICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29w
ZSgqdGhpcywgY2VsbCk7Ci0KKyAgICAKICAgICBtX2N1cnJlbnRPYmplY3RDZWxsU3RhdGVCZWZv
cmVWaXNpdGluZyA9IGNlbGwtPmNlbGxTdGF0ZSgpOwogICAgIGNlbGwtPnNldENlbGxTdGF0ZShD
ZWxsU3RhdGU6Ok9sZEJsYWNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzcsOCArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDb25zZXJ2YXRpdmVSb290
czsKIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKIGNsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2Vs
bDsKIGNsYXNzIEhlYXBTbmFwc2hvdEJ1aWxkZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFz
cyBKSVRXcml0ZUJhcnJpZXI7CitjbGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwogY2xhc3MgV2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcjsKQEAgLTEwNSw2ICsxMDcsMTAgQEAgcHVibGljOgogCiAgICAg
dm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoKTsKKyAgICAKKyAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFib3V0
IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYgeW91
IGRvbid0IGRvCisgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0IGVu
ZCBvZiBHQy4KKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7CiAKICAg
ICB2b2lkIGNvcHlMYXRlcihKU0NlbGwqLCBDb3B5VG9rZW4sIHZvaWQqLCBzaXplX3QpOwogICAg
IApAQCAtMTI0LDEwICsxMzAsMTMgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxs
ZWxNb2RlRW5hYmxlcjsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChK
U1ZhbHVlKTsgLy8gVGhpcyBpcyBwcml2YXRlIHRvIGVuY291cmFnZSBjbGllbnRzIHRvIHVzZSBX
cml0ZUJhcnJpZXI8VD4uCisgICAgdm9pZCBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2Vs
bCopOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpTVmFsdWUpOwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKICAgICB2
b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kVG9NYXJrU3Rh
Y2soTWFya2VkQmxvY2sqLCBKU0NlbGwqKTsKKyAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2Vs
bChNYXJrZWRCbG9jayosIEhlYXBDZWxsKik7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNl
c3NhcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDkgQEAKICNpbmNsdWRlICJEZWJ1Z2dlclNjb3Bl
LmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3Rv
dHlwZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlSW5saW5lcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3MiwxNyArNDcyLDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlYwogICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1
cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7CiB9CiAKLXZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLQotICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPiBiYXNlLT5zdHJ1Y3R1cmUodm0p
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFsbG9j
YXRvcigpLmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9j
YXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwotICAgIGJhc2UtPnB1dERpcmVj
dCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKLX0KLQogQUxXQVlTX0lOTElO
RSBzdGF0aWMgYm9vbCBpc1N0cmluZ09yU3ltYm9sKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0
dXJuIHZhbHVlLmlzU3RyaW5nKCkgfHwgdmFsdWUuaXNTeW1ib2woKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIwLDcgKzMyMCw2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWMKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCos
IFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
Owogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJ
bmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5URVJO
QUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5
emVyLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Nb2R1bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1vZHVsZUFuYWx5emVyLmgiCiAKLSNpbmNsdWRlICJJ
ZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlUmVjb3JkLmgiCiAjaW5jbHVk
ZSAiU3Ryb25nSW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTcyLDExICs3MiwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4
aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCiAvLyBmb3IgYW4g
YXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0g
bmV3IEFycmF5KDEyMykpCi0jZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQotICAgIAorI2RlZmlu
ZSBCQVNFX0NPTlRJR1VPVVNfVkVDVE9SX0xFTiAzVQorI2RlZmluZSBCQVNFX0FSUkFZX1NUT1JB
R0VfVkVDVE9SX0xFTiA0VQorCiAvLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwg
Z3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKIC8vIGlzIGFk
ZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQorI2RlZmluZSBGSVJTVF9BUlJBWV9T
VE9SQUdFX1ZFQ1RPUl9HUk9XIDRVCiAKICNkZWZpbmUgTUlOX0JFWU9ORF9MRU5HVEhfU1BBUlNF
X0lOREVYIDEwMDAKIApAQCAtOTYsNyArOTcsNyBAQCBpbmxpbmUgYm9vbCBpbmRleElzU3VmZmlj
aWVudGx5QmV5b25kTGVuCiAgICAgcmV0dXJuIGkgPj0gTUlOX0JFWU9ORF9MRU5HVEhfU1BBUlNF
X0lOREVYICYmIGkgPiBsZW5ndGg7CiB9CiAKLWlubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGlu
Z0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQor
aW5saW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXlTdG9yYWdlKHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4aW5nSGVhZGVy
IHJlc3VsdDsKICAgICByZXN1bHQuc2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CkBAIC0xMDQsOSAr
MTA1LDkgQEAgaW5saW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFk
ZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUlu
ZGV4aW5nSGVhZGVyRm9yQXJyYXlTdG9yYWdlKHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1
cm4gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAg
cmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXlTdG9yYWdlKGxlbmd0aCwgQkFTRV9WRUNUT1Jf
TEVOKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQnV0
dGVyZmx5LmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJNYXJrZWRT
cGFjZS5oIgogI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKICNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTk5LDYgKzEwMCw0
MiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwog
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHRvdGFsU2l6ZUZvcih1bnNpZ25lZCBpbmRl
eEJpYXMsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisg
ICAgeworICAgICAgICByZXR1cm4gQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBwcm9w
ZXJ0eUNhcGFjaXR5LCB0cnVlLCBzaXplRm9yKHZlY3Rvckxlbmd0aCkpOworICAgIH0KKyAgICAK
KyAgICBzaXplX3QgdG90YWxTaXplKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZUZvcihtX2luZGV4QmlhcywgcHJvcGVydHlDYXBh
Y2l0eSwgdmVjdG9yTGVuZ3RoKCkpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgdG90YWxTaXpl
KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvdGFs
U2l6ZShzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdW5zaWduZWQgb3B0aW1hbFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBpbmRleEJpYXMsIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAg
ICAgICB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX0FSUkFZX1NUT1JBR0VfVkVDVE9SX0xF
TiwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBjZWxsU2l6ZSA9IE1h
cmtlZFNwYWNlOjpvcHRpbWFsU2l6ZUZvcih0b3RhbFNpemVGb3IoaW5kZXhCaWFzLCBwcm9wZXJ0
eUNhcGFjaXR5LCB2ZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgCisgICAgICAgIHZlY3Rvckxlbmd0
aCA9IChjZWxsU2l6ZSAtIHRvdGFsU2l6ZUZvcihpbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHks
IDApKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworCisgICAgICAgIHJldHVybiB2
ZWN0b3JMZW5ndGg7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG9wdGltYWxWZWN0b3JMZW5n
dGgoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7
CisgICAgICAgIHJldHVybiBvcHRpbWFsVmVjdG9yTGVuZ3RoKG1faW5kZXhCaWFzLCBwcm9wZXJ0
eUNhcGFjaXR5LCB2ZWN0b3JMZW5ndGgpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBvcHRp
bWFsVmVjdG9yTGVuZ3RoKFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGgpCisgICAgeworICAgICAgICByZXR1cm4gb3B0aW1hbFZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCksIHZlY3Rvckxlbmd0aCk7CisgICAgfQogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlh
cnlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXV4aWxpYXJ5QmFycmllci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU0NlbGw7CitjbGFzcyBWTTsKKworLy8gQW4gQXV4aWxpYXJ5IGJhcnJpZXIgaXMgYSBiYXJy
aWVyIHRoYXQgZG9lcyBub3QgdHJ5IHRvIHJlYXNvbiBhYm91dCB0aGUgdmFsdWUgYmVpbmcgc3Rv
cmVkIGludG8KKy8vIGl0LCBvdGhlciB0aGFuIGludGVycHJldGluZyBhIGZhbHNpc2ggdmFsdWUg
YXMgbm90IG5lZWQgYSBiYXJyaWVyLiBJdCdzIE9LIHRvIHVzZSB0aGlzIGZvciBlaXRoZXIKKy8v
IEpTQ2VsbHMgb3IgYW55IG90aGVyIGtpbmQgb2YgZGF0YSwgc28gbG9uZyBhcyBpdCByZXNwb25k
cyB0byBvcGVyYXRvciEoKS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBdXhpbGlhcnlC
YXJyaWVyIHsKK3B1YmxpYzoKKyAgICBBdXhpbGlhcnlCYXJyaWVyKCkgeyB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBBdXhpbGlhcnlCYXJyaWVyKFZNJiwgSlNDZWxsKiwg
VSYmKTsKKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gVCgpOyB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHNldChWTSYsIEpTQ2VsbCosIFUmJik7
CisgICAgCisgICAgY29uc3QgVCYgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAg
IAorICAgIFQqIHNsb3QoKSB7IHJldHVybiAmbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVSYmIHZhbHVl
KSB7IG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpOyB9CisgICAgCitwcml2YXRlOgor
ICAgIFQgbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxp
bmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4
aWxpYXJ5QmFycmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAi
Vk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorQXV4aWxpYXJ5QmFycmllcjxUPjo6QXV4aWxpYXJ5QmFycmllcihWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFUmJiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgordm9pZCBBdXhpbGlhcnlC
YXJyaWVyPFQ+OjpzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVJiYgdmFsdWUpCit7CisgICAg
bV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJp
ZXIob3duZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw2
ICs5MCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVy
Zmx5Kj4oc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihiYXNlKSArIHByZUNhcGFjaXR5ICsg
cHJvcGVydHlDYXBhY2l0eSArIDEpOwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHN0
YXRpYyB1bnNpZ25lZCBvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQg
b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoU3RydWN0dXJlKiwgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoKTsKKyAgICAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIG5vdCBqdXN0IGJlY2F1
c2UgaXQncyBoYW5keSwgYnV0IHRvIHJlbWluZCB5b3UgdGhhdAogICAgIC8vIHRoZSB3aG9sZSBw
b2ludCBvZiBidXR0ZXJmbGllcyBpcyB0byBkbyBldmlsIHBvaW50ZXIgYXJpdGhtZXRpYy4KICAg
ICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tUG9pbnRlcihjaGFyKiBwdHIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lv
biAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEyICszNSwyNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVj
dG9yTGVuZ3RoKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgp
Cit7CisgICAgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9DT05USUdVT1VTX1ZFQ1RPUl9M
RU4sIHZlY3Rvckxlbmd0aCk7CisgICAgc2l6ZV90IGNlbGxTaXplID0gdG90YWxTaXplKDAsIHBy
b3BlcnR5Q2FwYWNpdHksIHRydWUsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiB2ZWN0b3JMZW5n
dGgpOworICAgIGNlbGxTaXplID0gTWFya2VkU3BhY2U6Om9wdGltYWxTaXplRm9yKGNlbGxTaXpl
KTsKKyAgICB2ZWN0b3JMZW5ndGggPSAoY2VsbFNpemUgLSB0b3RhbFNpemUoMCwgcHJvcGVydHlD
YXBhY2l0eSwgdHJ1ZSwgMCkpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICByZXR1cm4g
dmVjdG9yTGVuZ3RoOworfQorCitpbmxpbmUgdW5zaWduZWQgQnV0dGVyZmx5OjpvcHRpbWFsQ29u
dGlndW91c1ZlY3Rvckxlbmd0aChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoKQoreworICAgIHJldHVybiBvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHZlY3Rvckxlbmd0aCk7Cit9CisKIGlubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQogewotICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgc2l6ZSwgJnRlbXApKTsKLSAgICBCdXR0ZXJmbHkqIHJl
c3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAg
ICB2b2lkKiBiYXNlID0gdm0uaGVhcC5hbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCBz
aXplKTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTksNyAr
MTMyLDggQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZv
aWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRT
aXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBv
bGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3Rh
bFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOwotICAgIGlmICghdm0uaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93
bmVyLCAmdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgdGhlQmFzZSA9IHZtLmhlYXAu
dHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCB0aGVCYXNlLCBvbGRTaXplLCBu
ZXdTaXplKTsKKyAgICBpZiAoIXRoZUJhc2UpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVy
biBmcm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2
aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJn
dW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDE1IEBAIENsb25lZEFyZ3Vt
ZW50cyogQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGUKICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB2b2lkKiB0
ZW1wOwotICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JM
ZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgIHZvaWQqIHRlbXAg
PSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3Ro
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgYnV0dGVyZmx5LT5z
ZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChsZW5ndGgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaSA8IHZl
Y3Rvckxlbmd0aDsgKytpKQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVh
cigpOwogCiAgICAgQ2xvbmVkQXJndW1lbnRzKiByZXN1bHQgPQogICAgICAgICBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxDbG9uZWRBcmd1bWVudHM+KHZtLmhlYXApKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsOCBAQAogI2lu
Y2x1ZGUgIkdlbmVyYXRvclByb3RvdHlwZS5oIgogCiAjaW5jbHVkZSAiSlNDQnVpbHRpbnMuaCIK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKICNpbmNsdWRlICJHZW5lcmF0b3JQcm90
b3R5cGUubHV0LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyICh0aGV0YWxlY3Jh
ZnRlckBnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29u
ZyAoc3Vrb2xzYWtAZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzMsOCArMzQsNyBAQAogI2luY2x1ZGUgIkludGxDb2xsYXRvckNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgotI2luY2x1
ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1h
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
OCArMzQsNyBAQAogI2luY2x1ZGUgIkludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgotI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzky
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDggQEAKICNpbmNsdWRl
ICJJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuaCIKICNpbmNsdWRlICJJbnRsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSW50bE9iamVjdElubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsOCBAQAogI2luY2x1ZGUgIkludGxEYXRlVGltZUZv
cm1hdC5oIgogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rp
b24uaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCw4IEBACiAj
aW5jbHVkZSAiSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSW50bE9i
amVjdC5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlNsb3RW
aXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTIgQEAgdXNpbmcgbmFtZXNw
YWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiAwCisjZGVmaW5lIExPR0lUKCkgZGF0
YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiAiLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiXG4iKTsK
KyNlbHNlCisjZGVmaW5lIExPR0lUKCkgZG8geyB9IHdoaWxlKGZhbHNlKQorI2VuZGlmCisKIFNU
QVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU0FycmF5KTsKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKQEAgLTYxLDYgKzY3LDgg
QEAgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbgogCiB2b2lkIEpTQXJy
YXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkKIHsK
KyAgICBMT0dJVCgpOworICAgIAogICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgIXdy
aXRhYmxlKTsKICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSB8fCB3cml0YWJsZSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjM4LDExICsyNDYsMTMgQEAgdm9pZCBKU0FycmF5OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZQogLy8gVGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9y
LCBidXQgbGVhdmVzIHRoZSBuZXcgc3BhY2UgZm9yIGNvdW50IHNsb3RzIHVuY2xlYXJlZC4KIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHZtLCBib29sIGFkZFRvRnJvbnQs
IHVuc2lnbmVkIGNvdW50KQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKHZtKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNp
dHkgPSBzdHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIHVuc2lnbmVkIHBy
b3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSh2bSktPm91dE9mTGluZVNpemUoKTsKLQorICAgIAogICAg
IC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGgu
CiAgICAgQVNTRVJUKCFhZGRUb0Zyb250IHx8IGNvdW50ID4gc3RvcmFnZS0+bV9pbmRleEJpYXMp
OwogCkBAIC0yNTQsNyArMjY0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShWTSYgdgogICAgIC8vICAqIGRlc2lyZWRDYXBhY2l0eSAtIGhvdyBsYXJnZSBzaG91bGQgd2Ug
bGlrZSB0byBncm93IHRoZSB2ZWN0b3IgdG8gLSBiYXNlZCBvbiAyeCByZXF1aXJlZFZlY3Rvckxl
bmd0aC4KIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwotICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxl
bmd0aCk7CisgICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihvbGRWZWN0b3JMZW5n
dGgsIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3Ro
IGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNvdW50
ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0yNzMs
MTUgKzI4NCwxOSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7
CiAgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OworICAgIGJvb2wgYWxsb2NhdGVkTmV3
U3RvcmFnZTsKICAgICAvLyBJZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2ll
bnRseSBsYXJnZSAoYnV0IG5vdCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4K
ICAgICBpZiAoY3VycmVudENhcGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IoY3VycmVudENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKICAg
ICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSh2bSkpOwogICAg
ICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBjdXJyZW50Q2FwYWNpdHk7CisgICAgICAgIGFsbG9j
YXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3
U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgaWYgKCF2bS5o
ZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAg
ICAgICAgbmV3QWxsb2NCYXNlID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBu
ZXdTaXplKTsKKyAgICAgICAgaWYgKCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKKyAg
ICAgICAgYWxsb2NhdGVkTmV3U3RvcmFnZSA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gU3RlcCAz
OgpAQCAtMzExLDEzICszMjYsMTkgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShWTSYgdgogICAgICAgICBBU1NFUlQoY291bnQgKyB1c2VkVmVjdG9yTGVuZ3RoIDw9IG5ld1Zl
Y3Rvckxlbmd0aCk7CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAq
IHVzZWRWZWN0b3JMZW5ndGgpOwogICAgICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVy
dHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkg
LSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1ZhbHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJ
bmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGFsbG9jYXRlZE5ld1N0b3JhZ2UpIHsKKyAgICAgICAgICAgIC8vIFdlIHdpbGwg
c2V0IHRoZSB2ZWN0b3JMZW5ndGggdG8gbmV3VmVjdG9yTGVuZ3RoLiBXZSBwb3B1bGF0ZWQgcmVx
dWlyZWRWZWN0b3JMZW5ndGgKKyAgICAgICAgICAgIC8vICh1c2VkVmVjdG9yTGVuZ3RoICsgY291
bnQpLCB3aGljaCBpcyBsZXNzLiBDbGVhciB0aGUgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoKG5ld0FsbG9jQmFz
ZSAhPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0dXJlKHZtKSkpIHx8IChuZXdJbmRleEJpYXMgIT0g
c3RvcmFnZS0+bV9pbmRleEJpYXMpKSB7CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgICAg
IG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIHN0b3JhZ2Ut
Pm1fdmVjdG9yLCBzaXplb2YoSlNWYWx1ZSkgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKLQotICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG5ld1ZlY3RvciA9IG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
cmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7IGkrKykKLSAgICAgICAg
ICAgIG5ld1ZlY3RvcltpXS5jbGVhcigpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAKICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKQEAg
LTMyOSw4ICszNTAsMTAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYg
dgogCiBib29sIEpTQXJyYXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPmxlbmd0aCgpOwotCisgICAgCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFk
IG9ubHkgdGhlbiB3ZSBlbnRlciBzcGFyc2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xs
b3dpbmcgJ2lmJy4KICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IHN0b3JhZ2UtPm1f
c3BhcnNlTWFwKTsKIApAQCAtMzkzLDYgKzQxNiw4IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZSgKIAogYm9vbCBKU0FycmF5OjphcHBlbmRNZW1jcHkoRXhlY1N0YXRl
KiBleGVjLCBWTSYgdm0sIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIEpTQzo6SlNBcnJheSogb3RoZXJB
cnJheSkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIGlmICghY2FuRmFzdENvcHkodm0sIG90
aGVyQXJyYXkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQzMyw2ICs0NTgsOCBAQCBi
b29sIEpTQXJyYXk6OmFwcGVuZE1lbWNweShFeGVjU3RhdGUqIGV4CiAKIGJvb2wgSlNBcnJheTo6
c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93
RXhjZXB0aW9uKQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtNDk3LDYgKzUyNCw4IEBAIGJvb2wgSlNBcnJheTo6c2V0
TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKIAogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7
CkBAIC01OTQsNiArNjIzLDggQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVj
KQogLy8gIC0gcHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUg
cHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIHN3
aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKQEAgLTczMCw2ICs3NjEsOCBAQCB2b2lkIEpTQXJyYXk6
OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGlj
ZShFeGVjU3RhdGUmIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQog
eworICAgIExPR0lUKCk7CisgICAgCiAgICAgYXV0byBhcnJheVR5cGUgPSBpbmRleGluZ1R5cGUo
KTsKICAgICBzd2l0Y2ggKGFycmF5VHlwZSkgewogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOgpA
QCAtNzYwLDYgKzc5Myw4IEBAIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUm
IGUKIAogYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShWTSYgdm0sIHVu
c2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Up
CiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9yYWdl
LT5sZW5ndGgoKTsKICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA8PSBvbGRMZW5ndGgpOwogICAg
IApAQCAtODY1LDYgKzkwMCw4IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0
b3JhZ2UKIAogYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkJiBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAg
ICBMT0dJVCgpOworICAgIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQoY291bnQgPiAwKTsKIApAQCAtOTYzLDYgKzEwMDAsOCBAQCBib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQg
Y2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0
SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9H
SVQoKTsKKyAgICAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAog
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0SW5kZXggPD0gbGVuZ3RoKTsKQEAgLTExMDAsNiArMTEz
OSw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KIAogdm9pZCBK
U0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVy
JiBhcmdzKQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAg
dW5zaWduZWQgdmVjdG9yRW5kOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOwpA
QCAtMTE2Niw2ICsxMjA3LDggQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUq
IGV4ZQogCiB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIHVuc2lnbmVkIGkgPSBvZmZzZXQ7
CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3I7CiAgICAgdW5zaWduZWQgdmVjdG9y
RW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMTg4LDExICsxODgsMTEgQEAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGln
dW91c0FycmF5QgogaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoVk0mIHZt
LCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7CiAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKLSAgICAgICAgdm0sIGlu
dGVuZGVkT3duZXIsIDAsIDAsIHRydWUsIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRp
YWxMZW5ndGgpLAorICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1ZSwgYmFzZUlu
ZGV4aW5nSGVhZGVyRm9yQXJyYXlTdG9yYWdlKGluaXRpYWxMZW5ndGgpLAogICAgICAgICBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IoQkFTRV9WRUNUT1JfTEVOKSk7CiAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICBzdG9yYWdlLT5tX2luZGV4
QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICBzdG9yYWdl
LT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7
CiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KQEAgLTIxNSwxMiArMjE1LDE3IEBAIGlubGluZSBK
U0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCAKICAgICAgICAgaWYgKGhhc0RvdWJsZShz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAg
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKAogICAgICAgICAgICAgc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSA9PSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCiAgICAgICAgICAgICB8
fCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CiAg
ICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KHZtLCAwLCBpbml0aWFsTGVu
Z3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJBU0VfVkVDVE9SX0xFTjsg
KytpKQorICAgICAgICAgICAgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Y2xlYXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHkpOwpAQCAtMjI4LDQwICsyMzMsNDcgQEAgaW5saW5lIEpTQXJyYXkq
IEpTQXJyYXk6OmNyZWF0ZShWTSYgdm0sIAogCiBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoKQogewotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4
KEJBU0VfVkVDVE9SX0xFTiwgaW5pdGlhbExlbmd0aCk7Ci0gICAgaWYgKHZlY3Rvckxlbmd0aCA+
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgaWYgKGluaXRpYWxMZW5ndGggPiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHVuc2lnbmVk
IG91dE9mTGluZVN0b3JhZ2UgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAKICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseTsKLSAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3Jh
Z2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKSB7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgaWYgKExJS0VMWSghaGFz
QW55QXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpKSB7CiAgICAgICAgIEFTU0VSVCgKLSAgICAg
ICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAg
ICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgIHx8
IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFz
Q29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0KLSAgICAgICAgdm9pZCog
dGVtcDsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFz
SW50MzIoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlw
ZSkKKyAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CisKKyAgICAg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1Zl
Y3Rvckxlbmd0aChpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAu
dHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0
T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOworICAgICAgICBpZiAoIXRlbXApCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVT
dG9yYWdlKTsKICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3Ro
KTsKICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaW5pdGlhbExlbmd0aCk7Ci0g
ICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAg
ICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8
IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICB2b2lkKiB0
ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxl
bmd0aChpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxs
b2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5l
U3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAg
ICAgICAgaWYgKCF0ZW1wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7
CiAgICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZv
ckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzID0gMDsKICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsK
ICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7
ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJl
dmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
YWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2FsbGVlLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMyArMjcsOSBAQAogI2luY2x1
ZGUgIkpTQ2FsbGVlLmgiCiAKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTQ2Vs
bElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdGFj
a1Zpc2l0b3IuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjAzOTIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMCwyNSArNTEwLDE1IEBAIEFycmF5QnVm
ZmVyKiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGEKICAgICAvLyB1cC4gQnV0IGlmIHlvdSBk
byAqYW55dGhpbmcqIHRvIHRyaWdnZXIgYSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25v
dwogICAgIC8vIHRoYXQgeW91ICpoYWQqIGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdp
bGwgR0MgYXBwcm9wcmlhdGVseS4KICAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2Jq
ZWN0KTsKKyAgICBWTSYgdm0gPSAqaGVhcC0+dm0oKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRl
ZmVyR0MoKmhlYXApOwogICAgIAogICAgIEFTU0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdI
ZWFkZXIoKSk7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7Ci0g
ICAgCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQotICAgICAg
ICAmJiAhdGhpc09iamVjdC0+YnV0dGVyZmx5KCkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSB7Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Ci0gICAgICAg
IC8vIFJldXNlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9zc2libGUuCi0g
ICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKAotICAgICAg
ICAgICAgYml0d2lzZV9jYXN0PEluZGV4aW5nSGVhZGVyKj4odGhpc09iamVjdC0+dmVjdG9yKCkp
LT5idXR0ZXJmbHkoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXRo
aXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOwotICAgICAgICBWTSYgdm0gPSAqaGVhcC0+
dm0oKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzT2JqZWN0
LCBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgICAgICB0aGlzT2Jq
ZWN0LT5idXR0ZXJmbHkoKSwgdm0sIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LAotICAgICAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIGZhbHNlLCAwLCAwKSk7Ci0gICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0
LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKyAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXQo
dm0sIHRoaXNPYmplY3QsIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKKyAgICAg
ICAgdGhpc09iamVjdC0+YnV0dGVyZmx5KCksIHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUoKSwKKyAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIGZhbHNlLCAwLCAwKSk7CiAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
cjsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMiArMjYsOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKIAotI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk1h
cERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE0ICsy
NywxMCBAQAogI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCiAKICNpbmNsdWRl
ICJFcnJvci5oIgotI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRl
ICJKU01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjgsMTQgKzI4LDEwIEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4
ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52
aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgotI2luY2x1
ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTIgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiAwCisjZGVmaW5lIExPR0lUKCkgZGF0YUxvZyhSYXdQ
b2ludGVyKHRoaXMpLCAiOiAiLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiXG4iKTsKKyNlbHNlCisj
ZGVmaW5lIExPR0lUKCkgZG8geyB9IHdoaWxlKGZhbHNlKQorI2VuZGlmCisKIC8vIFdlIGtlZXAg
dHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiBX
ZSB1c2UgdGhpcwogLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8g
Z3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KIC8vIFRoaXMgdmFsdWUgaXMgY2FwcGVk
IGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGluCkBAIC04OCw3NyAr
OTQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0
b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCi17
Ci0gICAgQVNTRVJUKGJ1dHRlcmZseSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0aGlzLT5zdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBzaXplX3QgcHJlQ2FwYWNpdHk7
Ci0gICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOwotICAgIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIgPSB0aGlzLT5oYXNJbmRleGluZ0hlYWRlcigpOwotICAgIGlmIChVTkxJS0VM
WShoYXNJbmRleGluZ0hlYWRlcikpIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7Ci0gICAgICAgIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHByZUNhcGFjaXR5ID0gMDsKLSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAw
OwotICAgIH0KLSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNp
emUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENv
cHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSkpIHsKLSAg
ICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWREdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotCi0g
ICAgICAgIC8vIENvcHkgdGhlIHByb3BlcnRpZXMuCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBj
dXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAg
UHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFn
ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykK
LSAgICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKCgt
LWN1cnJlbnRTb3VyY2UpLT5nZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoVU5MSUtFTFko
aGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gQ29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCi0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldDsKLSAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZTsKLSAgICAgICAg
ICAgIHNpemVfdCBjb3VudDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoICh0aGlz
LT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAg
ICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkgPD0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgY291
bnQgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCkpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBjdXJyZW50
U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9
IDA7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IDA7Ci0gICAgICAgICAgICAgICAg
Y291bnQgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBtZW1jcHkoY3VycmVudFRhcmdldCwgY3VycmVudFNvdXJjZSwgY291bnQgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9idXR0
ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIobmV3QnV0dGVyZmx5KTsKLSAgICAgICAgdmlzaXRvci5k
aWRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNh
cGFjaXR5SW5CeXRlcyk7Ci0gICAgfSAKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJm
bHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChidXR0ZXJmbHkpOwpAQCAt
MTc1LDEzICsxMTAsMTYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cgogICAgICAgICBwcmVDYXBhY2l0eSA9IDA7CiAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzID0gMDsKICAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZs
eTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIAorICAgIEhlYXBDZWxsKiBi
YXNlID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5KSk7CiAKKyAgICBBU1NFUlQoSGVhcDo6aGVhcChiYXNlKSA9PSB2
aXNpdG9yLmhlYXAoKSk7CisKKyAgICAvLyBLZWVwIHRoZSBidXR0ZXJmbHkgYWxpdmUuCisgICAg
dmlzaXRvci5tYXJrQXV4aWxpYXJ5KGJhc2UpOworICAgIAogICAgIC8vIE1hcmsgdGhlIHByb3Bl
cnRpZXMuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgdmlzaXRvci5jb3B5
TGF0ZXIoCi0gICAgICAgIHRoaXMsIEJ1dHRlcmZseUNvcHlUb2tlbiwKLSAgICAgICAgYnV0dGVy
Zmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVz
KTsKICAgICAKICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICBzd2l0
Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7CkBAIC0yMjUsMTkgKzE2Myw2IEBAIHZvaWQgSlNP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICNlbmRpZgogfQogCi12b2lkIEpTT2Jq
ZWN0Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3Is
IENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKLQotICAgIGlmICh0b2tlbiAhPSBCdXR0ZXJmbHlDb3B5VG9rZW4pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmpl
Y3QtPmNvcHlCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLX0KLQogdm9pZCBKU09iamVjdDo6aGVhcFNuYXBzaG90
KEpTQ2VsbCogY2VsbCwgSGVhcFNuYXBzaG90QnVpbGRlciYgYnVpbGRlcikKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtNzc4LDE3ICs3
MDMsMjAgQEAgdm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBYwogICAgIGds
b2JhbE9iamVjdCgpLT5oYXZlQUJhZFRpbWUodm0pOwogfQogCi1CdXR0ZXJmbHkqIEpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgsIHNp
emVfdCBlbGVtZW50U2l6ZSkKK0J1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRl
eGVkU3RvcmFnZShWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBMT0dJVCgpOwogICAg
IEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgIEluZGV4aW5nVHlwZSBvbGRU
eXBlID0gaW5kZXhpbmdUeXBlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRUeXBlLCAhaGFzSW5k
ZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOwogICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRz
U2xvd1B1dEluZGV4aW5nKCkpOwogICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgp
KTsKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVD
VE9SX0xFTik7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0p
OworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFs
Q29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBsZW5ndGgpOwogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0
KAotICAgICAgICBtX2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCi0gICAgICAgIGVsZW1lbnRT
aXplICogdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlz
LCBzdHJ1Y3R1cmUsIHByb3BlcnR5Q2FwYWNpdHksIGZhbHNlLCAwLAorICAgICAgICBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFB1
YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZl
Y3Rvckxlbmd0aCk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseTsKQEAgLTc5Nyw3ICs3MjUsNyBA
QCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlCiBCdXR0ZXJmbHkqIEpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRp
YWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlVW5kZWNpZGVkKTsKICAgICBzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1
cm4gbmV3QnV0dGVyZmx5OwpAQCAtODA2LDcgKzczNCw5IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxVbmRlY2kKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRl
SW5pdGlhbEludDMyKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRp
YWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2
bSwgbGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ld
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUo
dm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIpOwogICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJl
dHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOwpAQCAtODE1LDcgKzc0NSw3IEBA
IENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKIENvbnRpZ3VvdXNEb3Vi
bGVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsRG91YmxlKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2Yo
ZG91YmxlKSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5k
ZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3Bl
cnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpOwpAQCAtODI2LDcgKzc1Niw5IEBAIENvbnRp
Z3VvdXNEb3VibGVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWEKIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5p
dGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5l
d0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGln
dW91cyk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5l
d0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOwpAQCAt
ODM0LDYgKzc2Niw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkK
IAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKFZNJiB2bSwgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCiB7CisgICAgTE9HSVQoKTsKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
aGlzLT5zdHJ1Y3R1cmUodm0pOwogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gaW5kZXhpbmdU
eXBlKCk7CkBAIC04NDksNiArNzgyLDggQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYQogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICByZXN1bHQt
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAwOwor
ICAgIGZvciAoc2l6ZV90IGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHJlc3VsdC0+
bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkp
OwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NjIsNiArNzk3LDExIEBAIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09i
amVjdDo6Y29udmVydFVuZGVjaWRlZFRvSW50MzIoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNV
bmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIpKTsKICAgICByZXR1cm4gbV9idXR0
ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQpAQCAtODgxLDYgKzgyMSwxMSBAQCBD
b250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVuZGVjCiBDb250aWd1b3VzSlNWYWx1
ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAg
IEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKKworICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOworCiAgICAgc2V0U3Ry
dWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsKIH0KQEAgLTkxNyw3ICs4NjIs
OSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAKICAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdl
V2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBObyBuZWVk
IHRvIGNvcHkgZWxlbWVudHMuCisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVu
Z3RoOyBpLS07KQorICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNp
dGlvbik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0
b3JhZ2UtPmJ1dHRlcmZseSgpKTsKQEAgLTkzOCwxMSArODg1LDEyIEBAIENvbnRpZ3VvdXNEb3Vi
bGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzIKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBjdXJyZW50ID0gJmJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV07CiAgICAgICAgIGRv
dWJsZSogY3VycmVudEFzRG91YmxlID0gYml0d2lzZV9jYXN0PGRvdWJsZSo+KGN1cnJlbnQpOwog
ICAgICAgICBKU1ZhbHVlIHYgPSBjdXJyZW50LT5nZXQoKTsKLSAgICAgICAgaWYgKCF2KSB7Cisg
ICAgICAgIC8vIE5PVEU6IFNpbmNlIHRoaXMgbWF5IGJlIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0
aW9uLCB2IGNvdWxkIGJlIGdhcmJhZ2UuIElmIGl0J3MgZ2FyYmFnZSwKKyAgICAgICAgLy8gdGhh
dCBtZWFucyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorICAgICAgICBpZiAoIXYuaXNJ
bnQzMigpKSB7CiAgICAgICAgICAgICAqY3VycmVudEFzRG91YmxlID0gUE5hTjsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCh2LmlzSW50MzIoKSk7CiAg
ICAgICAgICpjdXJyZW50QXNEb3VibGUgPSB2LmFzSW50MzIoKTsKICAgICB9CiAgICAgCkBAIC05
NjYsMTMgKzkxNCwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0Fy
CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxl
bmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRl
ZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpT
VmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAo
dikgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJU
KG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMTAxNCwxMyArOTYwLDEx
IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAg
QXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdl
V2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgZG91YmxlIHZhbHVlID0g
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAgICAgIGlmICh2YWx1ZSA9PSB2
YWx1ZSkgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcihKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAg
ICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIGlmICh2YWx1ZSA9
PSB2YWx1ZSkKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgdHJhbnNpdGlvbik7CkBAIC0xMDQxLDEzICs5ODUsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3Jh
Z2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRz
KHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5n
dGg7IGkrKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAg
ICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0Vt
cHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9u
KTsKQEAgLTIzODEsNyArMjMyMyw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW4KICAgICAgICAgfQogICAgICAgICBpZiAoc3RydWN0dXJlKHZtKS0+bmVlZHNTbG93
UHV0SW5kZXhpbmcoKSkgewogICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgaW5kZXhpbmcgdHlw
ZSB0byB0aGUgU2xvd1B1dEFycmF5U3RvcmFnZSBhbmQgcmV0cnkuCi0gICAgICAgICAgICBjcmVh
dGVBcnJheVN0b3JhZ2Uodm0sIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEp
KTsKKyAgICAgICAgICAgIGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgaSArIDEsIGdldE5ld1ZlY3Rv
ckxlbmd0aCgwLCAwLCAwLCBpICsgMSkpOwogICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXgo
dGhpcywgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTI1MjIsNyArMjQ2NCw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG8KICAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwg
Y3JlYXRlQXJyYXlTdG9yYWdlKHZtLCAwLCAwKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN0
cnVjdHVyZSh2bSktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKLSAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgaSArIDEsIGdldE5ld1Zl
Y3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAs
IDAsIDAsIGkgKyAxKSk7CiAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQodm0s
IHRoaXMsIHZhbHVlKTsKICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ir
KzsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjY0MSw3ICsyNTgzLDggQEAgdm9pZCBK
U09iamVjdDo6cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaQogICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGZ1bmN0aW9uLCBhdHRyaWJ1dGVzKTsKIH0KIAot
QUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2ln
bmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVk
IGRlc2lyZWRMZW5ndGgpCisvLyBOT1RFOiBUaGlzIG1ldGhvZCBpcyBmb3IgQXJyYXlTdG9yYWdl
IHZlY3RvcnMuCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JM
ZW5ndGgodW5zaWduZWQgaW5kZXhCaWFzLCB1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1
bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQogewogICAgIEFT
U0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogCkBAIC0y
NjYwLDIzICsyNjAzLDI1IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5l
d1YKIAogICAgIGxhc3RBcnJheVNpemUgPSBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNU
X1ZFQ1RPUl9HUk9XKTsKIAotICAgIHJldHVybiBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworICAgIHJldHVybiBBcnJheVN0b3JhZ2U6Om9wdGlt
YWxWZWN0b3JMZW5ndGgoCisgICAgICAgIGluZGV4Qmlhcywgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksCisgICAgICAgIHN0ZDo6bWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCkpOwogfQogCiBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0
OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKIHsKLSAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGg7Ci0gICAgdW5zaWduZWQgbGVuZ3RoOworICAgIHVuc2lnbmVkIGlu
ZGV4QmlhcyA9IDA7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gMDsKKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSAwOwogICAgIAogICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGlu
Z1R5cGUoKSkpIHsKKyAgICAgICAgaWYgKEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3Rv
cmFnZU9yTnVsbCgpKQorICAgICAgICAgICAgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJp
YXM7CiAgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5n
dGgoKTsKICAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IDA7Ci0gICAgICAgIGxlbmd0
aCA9IDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5n
dGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7CisgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0
aChpbmRleEJpYXMsIHZlY3Rvckxlbmd0aCwgbGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKIH0KIAog
dGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGU+CkBAIC0yNzI5LDYgKzI2NzQsNyBA
QCB1bnNpZ25lZCBKU09iamVjdDo6Y291bnRFbGVtZW50cygpCiAKIGJvb2wgSlNPYmplY3Q6Omlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiB2bSwgdW5zaWduZWQgbmV3TGVuZ3RoKQogeworICAgIExP
R0lUKCk7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVy
bmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZh
bHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKICAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJz
IGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVm
ZmljaWVudGx5LgogICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KQpAQCAtMjczNiw2ICsyNjgyLDE0IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVu
Z3RoKFZNJiAKIAogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwog
ICAgIAorICAgIHVuc2lnbmVkIG9wdGltYWxWZWN0b3JMZW5ndGggPQorICAgICAgICBzdG9yYWdl
LT5vcHRpbWFsVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSh2bSksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICBpZiAob3B0aW1hbFZlY3Rvckxlbmd0aCA+PSBuZXdMZW5ndGgpIHsKKyAgICAg
ICAgLy8gVGhlIGNlbGwgd2FzIGFscmVhZHkgYmlnIGVub3VnaCBmb3IgdGhlIGRlc2lyZWQgbGVu
Z3RoIQorICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgob3B0aW1hbFZlY3Rvckxlbmd0
aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKICAgICBpZiAobmV3TGVuZ3Ro
ID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JW
ZWN0b3IobmV3TGVuZ3RoLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMjc1NCw2ICsyNzA4LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVh
c2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZl
Y3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAg
ICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsg
KytpKQorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVj
dG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRD
aGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yNzY4LDYgKzI3MjQsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0
aChWTSYgCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVj
dG9yTGVuZ3RoOyArK2kpCisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0
VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAgc2V0QnV0dGVyZmx5V2l0
aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwpAQCAtMjc3NiwzMSArMjcz
NCw0OSBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAKIGJvb2wg
SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7Cisg
ICAgTE9HSVQoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwogICAgIAogICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgIEFTU0VS
VChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUo
KSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdU
eXBlKCkpKTsKICAgICBBU1NFUlQobGVuZ3RoID4gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7
CiAgICAgCi0gICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oCi0gICAgICAg
IGxlbmd0aCA8PCAxLAotICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICB1
bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwotICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBidXR0ZXJmbHkgPSBidXR0ZXJmbHktPmdy
b3dBcnJheVJpZ2h0KAotICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAotICAgICAgICBvbGRWZWN0b3JMZW5ndGggKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpLAotICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKLSAgICBpZiAoIWJ1dHRlcmZseSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKKyAgICB1bnNp
Z25lZCBuZXdWZWN0b3JMZW5ndGg7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgCisgICAgdW5zaWduZWQgb3B0aW1hbE9s
ZExlbmd0aCA9CisgICAgICAgIEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5n
dGgocHJvcGVydHlDYXBhY2l0eSwgb2xkVmVjdG9yTGVuZ3RoKTsKKyAgICBpZiAob3B0aW1hbE9s
ZExlbmd0aCA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSBz
b21lb25lIGVsc2Ugc2VsZWN0ZWQgYSB2ZWN0b3IgbGVuZ3RoIHRoYXQgY2F1c2VkIGludGVybmFs
CisgICAgICAgIC8vIGZyYWdtZW50YXRpb24uIElmIHdlIGRpZCBvdXIgam9icyByaWdodCwgdGhp
cyB3b3VsZCBuZXZlciBoYXBwZW4uIEJ1dCBJIGJldCB3ZSB3aWxsIG1lc3MKKyAgICAgICAgLy8g
dGhpcyB1cCwgc28gdGhpcyBkZWZlbnNlIHNob3VsZCBzdGF5LgorICAgICAgICBuZXdWZWN0b3JM
ZW5ndGggPSBvcHRpbWFsT2xkTGVuZ3RoOworICAgIH0gZWxzZSB7CisgICAgICAgIG5ld1ZlY3Rv
ckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoCisgICAg
ICAgICAgICBwcm9wZXJ0eUNhcGFjaXR5LCBzdGQ6Om1pbihsZW5ndGggPDwgMSwgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCkpOworICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Cisg
ICAgICAgIGJ1dHRlcmZseSA9IGJ1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAg
ICB2bSwgdGhpcywgc3RydWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLAorICAgICAgICAg
ICAgb2xkVmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKKyAgICAgICAgICAg
IG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICBpZiAo
IWJ1dHRlcmZseSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9idXR0ZXJm
bHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOworICAgIH0KIAogICAgIGJ1dHRlcmZseS0+c2V0
VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAKICAgICBpZiAoaGFzRG91YmxlKGluZGV4
aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7
IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGln
dW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47CisgICAgICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgIH0KKwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yODIxLDYgKzI3OTcsNyBAQCB2b2lkIEpTT2JqZWN0
OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dP
dXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQog
eworICAgIExPR0lUKCk7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKIAogICAgIC8v
IEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUo
KSwgZm9yIHRoZSBwcm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNs
dWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgogI2luY2x1ZGUg
IkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKICNpbmNsdWRl
ICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbGFzc0lu
Zm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgotI2luY2x1ZGUgIkNvcHlCYXJy
aWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRGVmZXJH
Qy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTEwMyw3ICsxMDMsNiBAQCBwdWJsaWM6CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlC
YWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGhlYXBTbmFwc2hvdChKU0NlbGwqLCBIZWFwU25hcHNo
b3RCdWlsZGVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNz
TmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtNDE0LDYgKzQxMyw4IEBAIHB1YmxpYzoKICAgICAg
ICAgaW5pdGlhbGl6ZUluZGV4KHZtLCBpLCB2LCBpbmRleGluZ1R5cGUoKSk7CiAgICAgfQogCisg
ICAgLy8gTk9URTogQ2xpZW50cyBvZiB0aGlzIG1ldGhvZCBtYXkgY2FsbCBpdCBtb3JlIHRoYW4g
b25jZSBmb3IgYW55IGluZGV4LCBhbmQgdGhpcyBpcyBzdXBwb3NlZAorICAgIC8vIHRvIHdvcmsu
CiAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYs
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwpAQCAtNjg2LDggKzY4Nyw2IEBAIHB1YmxpYzoK
ICAgICAgICAgCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2
b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSop
OwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShW
TSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIHNldFN0cnVj
dHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydFRvRGljdGlvbmFyeShWTSYpOwogCkBA
IC03OTcsNyArNzk2LDYgQEAgcHJvdGVjdGVkOgogICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0dXJl
KiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNs
b3RWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBjb3B5QnV0dGVy
Zmx5KENvcHlWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKIAogICAg
IC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdo
ZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3
aXNlLgpAQCAtOTA4LDcgKzkwNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpc09iamVjdCgpOwog
ICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAgCi0gICAgQnV0dGVyZmx5KiBjcmVhdGVJbml0
aWFsSW5kZXhlZFN0b3JhZ2UoVk0mLCB1bnNpZ25lZCBsZW5ndGgsIHNpemVfdCBlbGVtZW50U2l6
ZSk7CisgICAgQnV0dGVyZmx5KiBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoVk0mLCB1bnNp
Z25lZCBsZW5ndGgpOwogICAgICAgICAKICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKFZNJiwgQXJyYXlTdG9y
YWdlKik7CiAgICAgICAgIApAQCAtOTMyLDcgKzkzMCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQ
dXREaXJlY3RJbmRleE1vZGUsIEFycmF5U3RvcmFnZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJ
bmRleE1vZGUpOwogICAgICAgICAKLSAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5z
aWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWdu
ZWQgZGVzaXJlZExlbmd0aCk7CisgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2ln
bmVkIGluZGV4QmlhcywgdW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3Vy
cmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAgICAgdW5zaWduZWQgZ2V0TmV3
VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwogCiAgICAgQXJyYXlTdG9yYWdl
KiBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKFZN
JiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKQEAgLTk0OSw3ICs5NDcsNyBAQCBwcml2YXRlOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xv
dyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29weUJhcnJpZXI8QnV0dGVyZmx5PiBtX2J1dHRl
cmZseTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPEJ1dHRlcmZseSo+IG1fYnV0dGVyZmx5OwogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fcGFkZGluZzsKQEAg
LTE0ODcsOCArMTQ4NSwxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dEluCiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQobmV3U3Ry
dWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIHNldFN0cnVjdHVyZUFuZFJlYWxs
b2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIG5ld1N0cnVjdHVyZSk7Ci0KKyAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CisgICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG5ld1N0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3Q2Fw
YWNpdHkpOworICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdDYXBhY2l0eSkKKyAgICAgICAgc2V0
U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOworICAgIGVsc2UgeworICAgICAgICBCdXR0ZXJm
bHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwg
bmV3Q2FwYWNpdHkpOworICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0
cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICB9CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgaWYg
KGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKQEAgLTE0OTYsMjcgKzE1MDIsNiBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVj
ZXNzYXJ5KFZNJiB2bSwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlKQotewotICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwotICAgIAotICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1
Y3R1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOyAKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9y
YWdlKAotICAgICAgICB2bSwgb2xkQ2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUs
IG5ld0J1dHRlcmZseSk7Ci19Ci0KLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVB
bmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUpCi17Ci0gICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2Fy
eSgKLSAgICAgICAgdm0sIHN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1N0
cnVjdHVyZSk7Ci19Ci0KIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRPd25EYXRhUHJvcGVydHko
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyMDM5
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAw
NiwgMjAwOCwgMjAwOSwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOCwgMjAwOSwgMjAxMi0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBT
ZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsNiArMjQsNyBAQAog
I2lmbmRlZiBKU09iamVjdElubGluZXNfaAogI2RlZmluZSBKU09iamVjdElubGluZXNfaAogCisj
aW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgog
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDEyICsyOCw5IEBACiAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNp
bmNsdWRlICJFcnJvci5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgotI2luY2x1ZGUg
IlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTMgKzI5LDExIEBACiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAj
aW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU0NCdWlsdGlucy5oIgotI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJNaWNyb3Rhc2su
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiwxMyArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgotI2luY2x1ZGUgIlNsb3RWaXNp
dG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMiArMjYsOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKIAotI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIk1h
cERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHJl
dmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5jbHVkZSAi
SlNTdHJpbmdJdGVyYXRvci5oIgogCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVt
cGxhdGVSZWdpc3RyeUtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
WXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjAzOTIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJCdWls
dGluTmFtZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXIuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5o
IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTAgQEAK
ICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUg
Ikl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiTWFw
UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTEgQEAK
ICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgi
CiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1
ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIk1hcFByb3RvdHlwZS5sdXQuaCIK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24g
MjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25T
dHJpbmc7CiAgICAgdihib29sLCB0ZXN0VGhlRlRMLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoYm9vbCwgcmVzZXRGcmVlQ2VsbHNCYWRseSwgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgZWFnZXJseVVwZGF0ZVRvcENhbGxGcmFtZSwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZU9TUkVudHJ5VG9ERkcsIHRy
dWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUg
IklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNp
bmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiUHJveHlPYmplY3QuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
OCArMjgsNyBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJZGVudGlmaWVySW5s
aW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxs
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMTIgKzM4LDE1IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5p
bml0aWEKICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB2b2lkKiB0ZW1wOwotICAgIGlmICghdm0uaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgJnRlbXApKQotICAgICAgICByZXR1cm4gMDsKKyAgICB2b2lkKiB0ZW1wID0gdm0u
aGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgw
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICBpZiAoIXRlbXApCisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0
ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIGJ1dHRlcmZseS0+
c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNM
ZW5ndGgoaW5pdGlhbExlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlh
bExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICBidXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5jbGVhcigpOwogCiAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZVdpdGhCdXR0
ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KQEAgLTY3LDQwICs3MCw1NCBAQCBB
TFdBWVNfSU5MSU5FIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoCiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGhhbmRsZSBhcnJheSBhbGxvY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5LgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxNDQKICAgICAK
KyAgICBhdXRvIHNldFByb3BlcnRpZXMgPSBbJl0gKCkgeworICAgICAgICBhcnJheS0+cHV0RGly
ZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0LCBqc051bWJlcihy
ZXN1bHQuc3RhcnQpKTsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hl
c0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOworICAgIH07CisgICAgCisgICAgdW5z
aWduZWQgbnVtU3VicGF0dGVybnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCk7CisgICAgCiAg
ICAgaWYgKFVOTElLRUxZKGdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpKSkgewogICAg
ICAgICBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9i
amVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVy
bnMoKSArIDEpOwogICAgICAgICAKKyAgICAgICAgc2V0UHJvcGVydGllcygpOworICAgICAgICAK
KyAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5z
OyArK2kpCisgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8g
c2NhbiBieSBHQy4KKyAgICAgICAgCiAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0s
IDAsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0
LmVuZCAtIHJlc3VsdC5zdGFydCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHVuc2lnbmVkIG51
bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpKSB7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBpbnQgc3RhcnQgPSBzdWJwYXR0ZXJuUmVzdWx0c1syICogaV07Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFs
aXplSW5kZXgodm0sIGksIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2
bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFs
aXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgfQorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKKyAgICAgICAg
ICAgIGludCBzdGFydCA9IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgIGlm
IChzdGFydCA+PSAwKQorICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0s
IGksIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0
YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4
cE1hdGNoZXNBcnJheSh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1
cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFycmF5KTsKICAgICAgICAgCisgICAgICAgIHNldFByb3BlcnRpZXMoKTsKKyAgICAgICAg
CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzVW5kZWZpbmVkKCksIEFy
cmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKQorICAgICAgICAgICAgYXJyYXktPmluaXRpYWxp
emVJbmRleCh2bSwgaSwganNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAg
ICAgIAorICAgICAgICAvLyBOb3cgdGhlIG9iamVjdCBpcyBzYWZlIHRvIHNjYW4gYnkgR0MuCisK
ICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJzdHJpbmdPZlJlc29s
dmVkKHZtLCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSwg
QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIAotICAgICAgICBpZiAodW5zaWduZWQgbnVt
U3VicGF0dGVybnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkgewotICAgICAgICAg
ICAgICAgIGludCBzdGFydCA9IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKLSAgICAgICAgICAg
ICAgICBpZiAoc3RhcnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxp
emVJbmRleCh2bSwgaSwgSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZt
LCBpbnB1dCwgc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCksIEFy
cmF5V2l0aENvbnRpZ3VvdXMpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNVbmRlZmluZWQoKSwgQXJyYXlX
aXRoQ29udGlndW91cyk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkgeworICAgICAgICAgICAgaW50IHN0YXJ0ID0g
c3VicGF0dGVyblJlc3VsdHNbMiAqIGldOworICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApCisg
ICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwgSlNSb3BlU3RyaW5n
OjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgc3RhcnQsIHN1YnBhdHRlcm5S
ZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgYXJyYXktPnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5
SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1iZXIocmVzdWx0LnN0YXJ0KSk7Ci0gICAgYXJyYXkt
PnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5w
dXQpOwotCiAgICAgcmV0dXJuIGFycmF5OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjAzOTIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgi
CiAjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKICNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUu
aCIKKyNpbmNsdWRlICJIZWFwVXRpbC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIK
QEAgLTM5Miw3ICszOTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlm
aWVkCiAgICAgICAgICAgICBKU1ZhbHVlIGNhbGxlZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
Q2FsbGVlKTsKICAgICAgICAgICAgIFN0YWNrRnJhbWUmIHN0YWNrRnJhbWUgPSBzdGFja1RyYWNl
LmZyYW1lcy5sYXN0KCk7CiAgICAgICAgICAgICBib29sIGFscmVhZHlIYXNFeGVjdXRhYmxlID0g
ISFzdGFja0ZyYW1lLmV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzVmFsdWVH
Q09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBjYWxsZWUpKSB7CisgICAgICAgICAgICBp
ZiAoIUhlYXBVdGlsOjppc1ZhbHVlR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgY2Fs
bGVlKSkgewogICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUhhc0V4ZWN1dGFibGUpCiAgICAg
ICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpVbmtub3du
OwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQzNyw3ICs0MzgsNyBAQCB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChIZWFwOjppc1BvaW50
ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChIZWFwVXRpbDo6aXNQb2ludGVyR0NPYmplY3RKU0NlbGwoZmls
dGVyLCBtYXJrZWRCbG9ja1NldCwgZXhlY3V0YWJsZSkpOwogICAgICAgICAgICAgc3RhY2tGcmFt
ZS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6OkV4ZWN1dGFibGU7CiAgICAgICAgICAgICBzdGFja0Zy
YW1lLmV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAgICAgICAgICAgbV9saXZlQ2VsbFBvaW50
ZXJzLmFkZChleGVjdXRhYmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NldENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksMTMgKzI5LDExIEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJHZXR0ZXJT
ZXR0ZXIuaCIKICNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NK
U1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1Nl
dC5oIgogI2luY2x1ZGUgIk1hcERhdGEuaCIKICNpbmNsdWRlICJTZXRQcm90b3R5cGUuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICszMSwxMSBAQAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJdGVy
YXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxvb2t1
cC5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgogCiAjaW5jbHVkZSAiU2V0UHJvdG90eXBlLmx1dC5oIgogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAkocmV2
aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVS
ZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiw5IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeS5oIgogCi0jaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01h
cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDExICsyOCw5IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkl0
ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha01hcC5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwUHJvdG90eXBlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsMTEgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSXRlcmF0
b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRQcm90b3R5cGUuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LXN0
b3JhZ2UtYXJyYXktdW5zaGlmdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2FycmF5LXN0b3JhZ2UtYXJyYXktdW5zaGlmdC5qcwkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LXN0b3JhZ2Ut
YXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKy8vQCBydW5E
ZWZhdWx0Cit2YXIgeCA9IFsyLjUsIDEuNV07Cit4Lmxlbmd0aCA9IDEwMDAwMDAwMDA7Cit4Lmxl
bmd0aCA9IDI7CitBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKHgsIDMuNSk7CitpZiAoeC50
b1N0cmluZygpICE9ICIzLjUsMi41LDEuNSIpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvY29udGlndW91cy1hcnJheS11bnNoaWZ0LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29udGlndW91cy1hcnJheS11bnNoaWZ0LmpzCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29udGln
dW91cy1hcnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorLy9A
IHJ1bkRlZmF1bHQKK3ZhciB4ID0gWydiJywgJ2EnXTsKK0FycmF5LnByb3RvdHlwZS51bnNoaWZ0
LmNhbGwoeCwgJ2MnKTsKK2lmICh4LnRvU3RyaW5nKCkgIT0gImMsYixhIikKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNjcmliZSh4KTsKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1hcnJheS11bnNo
aWZ0LmpzCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZG91YmxlLWFycmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBA
CisvL0AgcnVuRGVmYXVsdAordmFyIHggPSBbMi41LCAxLjVdOworQXJyYXkucHJvdG90eXBlLnVu
c2hpZnQuY2FsbCh4LCAzLjUpOworaWYgKHgudG9TdHJpbmcoKSAhPSAiMy41LDIuNSwxLjUiKQor
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbnQzMi1h
cnJheS11bnNoaWZ0LmpzCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvaW50MzItYXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYgQEAKKy8vQCBydW5EZWZhdWx0Cit2YXIgeCA9IFsyLCAxXTsKK0FycmF5LnByb3RvdHlw
ZS51bnNoaWZ0LmNhbGwoeCwgMyk7CitpZiAoeC50b1N0cmluZygpICE9ICIzLDIsMSIpCisgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMDM5MjApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE4IEBACisyMDE2LTA3LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgQnV0dGVyZmxpZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBpbiBBdXhpbGlhcnkg
TWFya2VkU3BhY2UgaW5zdGVhZCBvZiBDb3BpZWRTcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUgSlNDIEdDIG5lZWRzIGEgdHJ5
RmFzdEFsaWduZWRNYWxsb2MoKSwgYW5kIHRoaXMgZXhwb3NlcyBzdWNoIGEgZnVuY3Rpb24uCisK
KyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAgICAgIChXVEY6OmZhc3RBbGlnbmVk
TWFsbG9jKToKKyAgICAgICAgKFdURjo6dHJ5RmFzdEFsaWduZWRNYWxsb2MpOgorICAgICAgICAo
V1RGOjpmYXN0QWxpZ25lZEZyZWUpOgorICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmg6CisKIDIw
MTYtMDctMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ug
U3RyaW5nVmlldyBjYXBhYmxlIG9mIGJlaW5nIHBhc3NlZCBvciByZXR1cm5lZCBpbiBvbmx5IDIg
cmVnaXN0ZXJzLgpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysr
IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NiBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTEsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAy
MDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA1LTIwMDksIDIwMTEsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKQEAgLTk3LDYgKzk2LDEx
IEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4g
X2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGln
bmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICByZXR1cm4g
X2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRG
cmVlKHZvaWQqIHApIAogewogICAgIF9hbGlnbmVkX2ZyZWUocCk7CkBAIC0xMTEsNiArMTE1LDEz
IEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4g
cDsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6
ZV90IHNpemUpIAoreworICAgIHZvaWQqIHAgPSBudWxscHRyOworICAgIHBvc2l4X21lbWFsaWdu
KCZwLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBwOworfQorCiB2b2lkIGZhc3RBbGln
bmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBmcmVlKHApOwpAQCAtMjMxLDYgKzI0MiwxMSBAQCB2
b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0dXJuIGJtYWxs
b2M6OmFwaTo6bWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsKIH0KIAordm9pZCogdHJ5RmFzdEFs
aWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHJldHVy
biBibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7Cit9CisKIHZvaWQg
ZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIGJtYWxsb2M6OmFwaTo6ZnJlZShwKTsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0Zhc3RNYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUzLDYgKzUzLDcgQEAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEZyZWUodm9pZCopOwogCiAvLyBBbGxvY2F0aW9u
cyBmcm9tIGZhc3RBbGlnbmVkTWFsbG9jKCkgbXVzdCBiZSBmcmVlZCB1c2luZyBmYXN0QWxpZ25l
ZEZyZWUoKS4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUZhc3RB
bGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCopOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6
ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqKTsKQEAgLTEwNyw2ICsxMDgsNyBAQCB1c2lu
ZyBXVEY6OmZhc3RNYWxsb2NTaXplOwogdXNpbmcgV1RGOjpmYXN0UmVhbGxvYzsKIHVzaW5nIFdU
Rjo6ZmFzdFN0ckR1cDsKIHVzaW5nIFdURjo6ZmFzdFplcm9lZE1hbGxvYzsKK3VzaW5nIFdURjo6
dHJ5RmFzdEFsaWduZWRNYWxsb2M7CiB1c2luZyBXVEY6OnRyeUZhc3RDYWxsb2M7CiB1c2luZyBX
VEY6OnRyeUZhc3RNYWxsb2M7CiB1c2luZyBXVEY6OnRyeUZhc3RaZXJvZWRNYWxsb2M7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMjAz
OTIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgogI2luY2x1ZGUgPGhlYXAvV2Vha0lubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRp
b25zLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFy
c2VyLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEx
ICszNSw5IEBACiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKICNpbmNsdWRlICJD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCIKICNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0Rl
YnVnZ2luZy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09OT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3RydWN0dXJlSW5saW5lcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1ZNLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDM5
MjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNCBAQAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtl
ZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTmVlZCB0byAjaW5jbHVkZSBtb3JlIHRoaW5n
cyBub3cuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5jcHA6CisKIDIwMTYtMDctMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQ3Jhc2ggd2l0aCBhbiBJbnZhbGlkIFdlYiBQcm9jZXNzIElQQyBNZXNzYWdlIElE
OiBXZWJQYWdlUHJveHkuQXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2sK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk5QSlNPYmplY3QuaCIKICNpbmNsdWRlICJO
UFJ1bnRpbWVPYmplY3RNYXAuaCIKICNpbmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSWRl
bnRpZmllcklubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVj
dC5oPgpJbmRleDogU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL2JtYWxsb2Mv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTYtMDctMjkgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCdXR0ZXJmbGllcyBzaG91
bGQgYmUgYWxsb2NhdGVkIGluIEF1eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGll
ZFNwYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjAxMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFRoZSBKU0MgR0MgbmVlZHMgdG8gYmUgYWJsZSB0byB0cnlNZW1hbGlnbiwgYW5kIHRo
aXMgcmVmYWN0b3JzIHRoZSBjb2RlIHRvIGV4cG9zZSBzdWNoIGEKKyAgICAgICAgZnVuY3Rpb24u
CisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZUltcGwpOgorICAg
ICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpyZWFsbG9jYXRlKToKKyAgICAgICAgKiBibWFsbG9j
L0FsbG9jYXRvci5oOgorICAgICAgICAqIGJtYWxsb2MvQ2FjaGUuaDoKKyAgICAgICAgKGJtYWxs
b2M6OkNhY2hlOjphbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6dHJ5QWxsb2Nh
dGUpOgorICAgICAgICAqIGJtYWxsb2MvYm1hbGxvYy5oOgorICAgICAgICAoYm1hbGxvYzo6YXBp
OjptYWxsb2MpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbik6CisgICAgICAg
IChibWFsbG9jOjphcGk6Om1lbWFsaWduKToKKwogMjAxNi0wNy0xMyAgRW5yaWNhIENhc3VjY2kg
IDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1z
IGluIHhjY29uZmlnIGZpbGVzIHRvIG1hdGNoIHRoZSBzZGsgbmFtZXMuCkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQs
MTggQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZQogCiB2b2lkKiBB
bGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogeworICAg
IGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0cnVlOworICAgIHJldHVybiBhbGxvY2F0ZUltcGwoYWxp
Z25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgYm9vbCBjcmFz
aE9uRmFpbHVyZSA9IGZhbHNlOworICAgIHJldHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBz
aXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVJbXBs
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBib29sIGNyYXNoT25GYWlsdXJlKQorewog
ICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCiAgICAgaWYgKCFtX2lzQm1h
bGxvY0VuYWJsZWQpIHsKQEAgLTgwLDcgKzkyLDEwIEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2Nh
dGUoc2l6ZV90IGFsaWdubWUKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKHJvdW5kVXBUb011bHRp
cGxlT2YoYWxpZ25tZW50LCBzaXplKSk7CiAKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIFBlclByb2Nl
c3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBz
aXplKTsKKyAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsK
KyAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisgICAgICAgIHJldHVybiBoZWFwLT5hbGxvY2F0ZUxh
cmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGhlYXAtPnRyeUFsbG9jYXRl
TGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKIH0KIAogdm9pZCogQWxsb2NhdG9yOjpyZWFs
bG9jYXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDEyICs0MywxNSBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVf
dCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAg
ICB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIHJl
YWxsb2NhdGUodm9pZCosIHNpemVfdCk7CiAKICAgICB2b2lkIHNjYXZlbmdlKCk7CiAKIHByaXZh
dGU6CisgICAgdm9pZCogYWxsb2NhdGVJbXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgYm9v
bCBjcmFzaE9uRmFpbHVyZSk7CisgICAgCiAgICAgYm9vbCBhbGxvY2F0ZUZhc3RDYXNlKHNpemVf
dCwgdm9pZComKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgc3RhdGljIHZv
aWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKik7CiAg
ICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7CkBAIC03OSw2ICs4MCwx
NCBAQCBpbmxpbmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBzaXplCiAgICAgcmV0dXJu
IGNhY2hlLT5hbGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKIH0KIAoraW5saW5lIHZvaWQqIENh
Y2hlOjp0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBD
YWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlmICgh
Y2FjaGUpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKGFsaWdubWVu
dCwgc2l6ZSk7CisgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGln
bm1lbnQsIHNpemUpOworfQorCiBpbmxpbmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIENhY2hlKiBjYWNoZSA9IFBlclRocmVhZDxD
YWNoZT46OmdldEZhc3RDYXNlKCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxs
b2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkocmV2
aXNpb24gMjAzOTIwKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDMsNiArNDMsMTIgQEAgaW5saW5lIHZvaWQqIG1hbGxvYyhzaXplX3Qg
c2l6ZSkKICAgICByZXR1cm4gQ2FjaGU6OmFsbG9jYXRlKHNpemUpOwogfQogCisvLyBSZXR1cm5z
IG51bGwgb24gZmFpbHVyZS4KK2lubGluZSB2b2lkKiB0cnlNZW1hbGlnbihzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gQ2FjaGU6OnRyeUFsbG9jYXRlKGFsaWdu
bWVudCwgc2l6ZSk7Cit9CisKIC8vIENyYXNoZXMgb24gZmFpbHVyZS4KIGlubGluZSB2b2lkKiBt
ZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzk1MCkK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2
LTA3LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQnV0dGVy
ZmxpZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBpbiBBdXhpbGlhcnkgTWFya2VkU3BhY2UgaW5zdGVh
ZCBvZiBDb3BpZWRTcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwMTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBhZGRzIGEgbmV3IHZhbGlkYXRpb24gZmxhZyB0byB0aGUgVk0sIHdoaWNo
IGlzIHZlcnkgY2hlYXAgYW5kIHNob3VsZG4ndCBldmVyIGJyZWFrCisgICAgICAgIGFueXRoaW5n
LiBUaGlzIGVuYWJsZXMgdGhlIGZsYWcgZm9yIGFsbCBuby1jaml0IHRlc3RzLCBzaW5jZSB0aG9z
ZSBhcmUgdGhlIG9uZXMgd2hlcmUgd2UgYXJlCisgICAgICAgIGFscmVhZHkgaGFwcHkgdG8gcGF5
IHNvbWUgcHJpY2UgZm9yIGFsdGVyZXJlZCBjb3ZlcmFnZS4KKworICAgICAgICAqIFNjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTYtMDctMzAgIE1hbnVlbCBSZWdvIENhc2Fzbm92
YXMgIDxyZWdvQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZDogYWRkIG15c2VsZiB0
byB0aGUgcmV2aWV3ZXJzIGxpc3QuCkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJ
KHJldmlzaW9uIDIwMzkyMCkKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJ
KHdvcmtpbmcgY29weSkKQEAgLTQyMCw3ICs0MjAsNyBAQCAkbnVtUGFzc2VzID0gMAogIyBXZSBm
b3JjZSBhbGwgdGVzdHMgdG8gdXNlIGEgc21hbGxlciAoMS41TSkgc3RhY2sgc28gdGhhdCBzdGFj
ayBvdmVyZmxvdyB0ZXN0cyBjYW4gcnVuIGZhc3Rlci4KIEJBU0VfT1BUSU9OUyA9IFsiLS11c2VG
VExKSVQ9ZmFsc2UiLCAiLS11c2VGdW5jdGlvbkRvdEFyZ3VtZW50cz10cnVlIiwgIi0tbWF4UGVy
VGhyZWFkU3RhY2tVc2FnZT0xNTcyODY0Il0KIEVBR0VSX09QVElPTlMgPSBbIi0tdGhyZXNob2xk
Rm9ySklUQWZ0ZXJXYXJtVXA9MTAiLCAiLS10aHJlc2hvbGRGb3JKSVRTb29uPTEwIiwgIi0tdGhy
ZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcD0yMCIsICItLXRocmVzaG9sZEZvck9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwPTIwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTIwIiwgIi0t
dGhyZXNob2xkRm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcD0yMCIsICItLXRocmVzaG9sZEZvckZU
TE9wdGltaXplU29vbj0yMCIsICItLW1heGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoPTE1
MDAwMCJdCi1OT19DSklUX09QVElPTlMgPSBbIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICIt
LXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwMCJdCitOT19DSklUX09QVElPTlMgPSBbIi0t
dXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEw
MCIsICItLXJlc2V0RnJlZUNlbGxzQmFkbHk9dHJ1ZSJdCiBGVExfT1BUSU9OUyA9IFsiLS11c2VG
VExKSVQ9dHJ1ZSJdCiAKICRydW5saXN0ID0gW10K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284977</attachid>
            <date>2016-07-31 20:10:32 -0700</date>
            <delta_ts>2016-08-02 17:29:59 -0700</delta_ts>
            <desc>oh man this might actually work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>196570</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNl
IGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFrZSB0aGUgR0MgY29uY3VycmVu
dCAoYnVnIDE0OTQzMiksIHdlIHdvdWxkIGVpdGhlciBuZWVkIHRvIGVuYWJsZSBjb25jdXJyZW50
CisgICAgICAgIGNvcHlpbmcgb3Igd2Ugd291bGQgbmVlZCB0byBub3QgY29weS4gQ29uY3VycmVu
dCBjb3B5aW5nIGNhcnJpZXMgYSAxLTIlIHRocm91Z2hwdXQgb3ZlcmhlYWQKKyAgICAgICAgZnJv
bSB0aGUgYmFycmllcnMgYWxvbmUuIENvbnNpZGVyaW5nIHRoYXQgTWFya2VkU3BhY2UgZG9lcyBh
IGRlY2VudCBqb2Igb2YgYXZvaWRpbmcKKyAgICAgICAgZnJhZ21lbnRhdGlvbiwgaXQncyB1bmxp
a2VseSB0aGF0IGl0J3Mgd29ydGggcGF5aW5nIDEtMiUgdGhyb3VnaHB1dCBmb3IgY29weWluZy4g
U28sIHdlIHdhbnQKKyAgICAgICAgdG8gZ2V0IHJpZCBvZiBjb3BpZWQgc3BhY2UuIFRoaXMgY2hh
bmdlIG1vdmVzIGNvcGllZCBzcGFjZSdzIGJpZ2dlc3QgY2xpZW50IG92ZXIgdG8gbWFya2VkCisg
ICAgICAgIHNwYWNlLgorICAgICAgICAKKyAgICAgICAgTW92aW5nIGJ1dHRlcmZsaWVzIHRvIG1h
cmtlZCBzcGFjZSBtZWFucyBoYXZpbmcgdGhlbSB1c2UgdGhlIG5ldyBBdXhpbGlhcnkgSGVhcENl
bGwKKyAgICAgICAgYWxsb2NhdGlvbiBwYXRoLiBUaGlzIGlzIGEgZmFpcmx5IG1lY2hhbmljYWwg
Y2hhbmdlLiBBdCBhIGhpZ2ggbGV2ZWwgdGhpcyBkb2VzIHRoZXNlIHRoaW5nczoKKyAgICAgICAg
CisgICAgICAgIC0gV2UgdXNlIEF1eGlsaWFyeUJhcnJpZXIgaW5zdGVhZCBvZiBDb3B5QmFycmll
ci4KKyAgICAgICAgCisgICAgICAgIC0gV2UgdXNlIHRyeUFsbG9jYXRlQXV4aWxpYXJ5IGluc3Rl
YWQgb2YgdHJ5QWxsb2NhdGVTdG9yYWdlLiBJIGdvdCByaWQgb2YgdGhlIHNpbGx5CisgICAgICAg
ICAgQ2hlY2tlZEJvb2xlYW4gc3R1ZmYsIHNpbmNlIGl0J3Mgc28gbXVjaCBtb3JlIHRyb3VibGUg
dGhhbiBpdCdzIHdvcnRoLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgSklUcyBoYXZlIHRvIGVt
aXQgaW5saW5lZCBtYXJrZWQgc3BhY2UgYWxsb2NhdGlvbnMgaW5zdGVhZCBvZiBpbmxpbmUgY29w
eSBzcGFjZQorICAgICAgICAgIGFsbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgLSBFdmVy
eW9uZSBoYXMgdG8gZ2V0IHVzZWQgdG8gemVyb2luZyB0aGVpciBidXR0ZXJmbGllcyBhZnRlciBh
bGxvY2F0aW9uIGluc3RlYWQgb2YgcmVseWluZworICAgICAgICAgIG9uIHRoZW0gYmVpbmcgcHJl
LXplcm9lZCBieSB0aGUgR0MuIENvcGllZCBzcGFjZSB3b3VsZCB6ZXJvIHRoaW5ncyBmb3IgeW91
LCB3aGlsZSBtYXJrZWQKKyAgICAgICAgICBzcGFjZSBkb2Vzbid0LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIEl0IHN0aWxsIGZhaWxzIHNvbWUg
aW50ZXJuYWwgZnV6emluZyB0ZXN0cyBhbmQgSSBoYXZlbid0CisgICAgICAgIG1lYXN1cmVkIHBl
cmZvcm1hbmNlIHlldC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5l
d09iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmluaXRpYWxp
emVBcnJheUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0UmlnaHRTaGlmdFNuaXBwZXQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZUhlYXBDZWxsKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVPYmplY3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0b3JGb3JTaXplKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVKU0FycmF5KToKKyAg
ICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkNvbnNlcnZh
dGl2ZVJvb3RzOjpncm93KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAg
ICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6OnJvb3RzKToKKyAgICAgICAgKiBoZWFwL0NvcHlUb2tlbi5oOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0
b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9yYWdlQWxsb2NhdG9y
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Omlz
Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxs
b2NhdGVPYmplY3RPZlR5cGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdWJzcGFjZUZvck9iamVj
dE9mVHlwZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZSk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkRnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZmluZEdDT2JqZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNWYWx1ZUdDT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNQb2ludGVyR0NPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
OjpyZXRpcmUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlQ
b3BGcmVlTGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZUltcGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2sp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxLaW5kKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpoZWFwKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0YWtlTGFzdEFjdGl2ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6dHJ5
Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNBdG9tQWxpZ25lZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjZWxsQWxpZ24pOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tGb3IpOgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0
c1dpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9y
T2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnRyeUFsbG9jYXRl
QXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhp
bGlhcnkpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeSk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwpOgorICAgICAgICAoSlNDOjpTZXRD
dXJyZW50Q2VsbFNjb3BlOjpTZXRDdXJyZW50Q2VsbFNjb3BlKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KiBsbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0F1eGls
aWFyeUJhcnJpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OkF1
eGlsaWFyeUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkF1
eGlsaWFyeUJhcnJpZXI6OnNsb3QpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6c2V0V2l0aG91
dEJhcnJpZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQpOgorICAgICAgICAq
IHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJp
Z2h0KToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6
CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmNyZWF0
ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVu
dGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NhbGxlZS5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRp
Z3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29weUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFj
a2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
bWlzZS5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanM6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorCiAyMDE2LTA3LTI5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIEJ5VmFsSW5mbyBpcyBvbmx5IHVzZWQgaW4gSklUIGVuYWJs
ZWQgZW52aXJvbm1lbnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsOCBAQAog
CQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE0MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9OwogCQkwRjM4QjAxOTE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwICovOyB9OwogCQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYz
OEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5
MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmNwcCAqLzsgfTsKIAkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM5MkM4ODFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCAq
LzsgfTsKIAkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi87
IH07CkBAIC01NzIsNiArNTc0LDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJl
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3
QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTND
ODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUy
MzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQURFNjczMUQ0RDIzQkUwMDc2
ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi87IH07CiAJ
CTBGQUY3RUZEMTY1QkE5MUIwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVCQTkxOTAw
MEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZF
IC8qIEV4aXRLaW5kLmNwcCAqLzsgfTsKQEAgLTI1MTgsNiArMjUyMSw4IEBACiAJCTBGMzhCMDE0
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5oOyBwYXRoID0gZGZnL0RGR0NvbXBp
bGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDE1MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdD
b21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAx
NjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5oOyBwYXRoID0gZGZnL0RGR0Nv
bXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM4RDJBMDFE
NDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVySW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM5MkM4NzFCNDYxODg0MDA4
NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRGdXp6LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOTJDODgxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEZ1enouaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzY1LDYgKzI3NzAsNyBA
QAogCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdB
OEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBREU2NzIxRDREMjNCQzAwNzY4
NDU3IC8qIEhlYXBVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBV
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQUY3RUZBMTY1QkE5MTkwMDBD
ODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4aXRLaW5kLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNDYsNiArNTI1Miw3IEBACiAJCQkJQzI0RDMx
RTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi8sCiAJCQkJQzJFNTI2QkIx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCiAJCQkJQzJFNTI2QkMxNTkwRUYw
MDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAorCQkJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFw
VmVyaWZpZXIuY3BwICovLAogCQkJCUZFN0JBNjBFMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVy
aWZpZXIuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxT
d2VlcGVyLmNwcCAqLywKQEAgLTU2MDcsNiArNTYxNCw4IEBACiAJCQkJRjY5MkE4NEQwMjU1NTk3
RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg0RTAyNTU1OTdE
MDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuaCAqLywKIAkJCQkwRkI3RjM4QTE1RUQ4RTM4MDBG
MTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8sCisJCQkJMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5
IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCAqLywKKwkJCQkwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkg
LyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLywKIAkJCQk1MjY3OEY4QzFBMDMxMDA5MDA2
QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmNwcCAqLywKIAkJCQk1MjY3OEY4RDFBMDMxMDA5
MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggKi8sCiAJCQkJMTQ3QjgzQUEwRTZEQjhD
OTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi8sCkBAIC01NzcyLDcg
KzU3ODEsNiBAQAogCQkJCTcwREMzRTA4MUIyREYyQzcwMDA1NDI5OSAvKiBJdGVyYXRvclByb3Rv
dHlwZS5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAq
LywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAotCQkJCTUz
OUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovLAogCQkJCTBGMkI2
NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKIAkJCQkwRjJCNjZC
NTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAogCQkJCTBGMkI2NkI2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLApAQCAtNTc4
Miw2ICs1NzkwLDcgQEAKIAkJCQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwICovLAogCQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oICovLAogCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlld0lubGluZXMuaCAqLywKKwkJCQk1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyog
SlNBcnJheUlubGluZXMuaCAqLywKIAkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2Fs
bGVlLmNwcCAqLywKQEAgLTcyNjEsNiArNzI3MCw3IEBACiAJCQkJMEYzMzhFMUMxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5
NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJCMUJEMTdGQTQwMDFB
QTQxMyAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKIAkJCQkyQTExMTI0NjE5MkZDRTc5MDA1
RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTc2OTMsNiAr
NzcwMyw3IEBACiAJCQkJQTE1ODdENkUxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZv
cm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMEYxQzAzMEQ2QzAwMzhCQkNBIC8qIFNu
aXBwZXRPcGVyYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3MDFCNERDMTQxMDBENjk4
NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE1ODdENzUxQjREQzFDNjAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzOThGQUIxQzc1MERBNDAwNjBBOTYzIC8q
IEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzIxQjREQzE0MTAwRDY5
ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03
ODE1LDYgKzc4MjYsNyBAQAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdD
QkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0
MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjA2LDM0ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAg
Q29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2Nh
dG9yKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
LSAgICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yID0gdm0uaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5l
bWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0
aCk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcg
KGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5i
cmFuY2hTdWJQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpT
aWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVn
UHRyKHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1Zh
bHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0g
b2xkIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxh
YmxlCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8
IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1Miw3ICs4NTIsNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
V2l0CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkFycmF5
IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpKSk7CiAKICAg
ICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVyZSwg
c2l6ZSk7Ci0gICAgcmVzdWx0LT5idXR0ZXJmbHkoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIGJhY2tp
bmcgc3RvcmUgaXMgaW4gdG8tc3BhY2UuCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4o
cmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTA3LDI3ICszOTA3LDMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIp
OwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BS
LCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3Rv
cmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAor
ICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgbmFuID0gSlNWYWx1
ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMucGF5bG9hZCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBK
U1ZhbHVlIGhvbGU7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSkKKyAgICAgICAgICAgICAgICBob2xlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgUE5hTik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaG9sZSA9IEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMudGFnKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMucGF5
bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKKyAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhW
YXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODY5LDI3ICszODY5LDMxIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0
Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihU
cnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBt
X2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5l
bWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1f
aml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwKKyAgICAgICAgICAgICAgICBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2Rl
LT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBz
dG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkp
KSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRf
dD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVH
UFIsIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoMkdQ
Uik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5s
YWJlbCgpOwotICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5saW5rVG8obG9vcCwgJm1faml0
KTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1f
aml0LmxhYmVsKCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxs
b2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRH
UFIsCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QWxsb2NhdGVSYXdPYmplCiAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3By
KCk7CiAKICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoID49IG51bUVsZW1lbnRzKTsKLSAgICB2ZWN0
b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIHZlY3Rvckxlbmd0aCk7CisgICAg
dmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChz
dHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aCk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKIApAQCAtMTAzLDEyICsxMDMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIHNpemUgKz0gb3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXpl
b2YoSlNWYWx1ZSk7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KAotICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0ZWRJbW0zMihzaXpl
KSwgc3RvcmFnZUdQUikpOwotICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCi0gICAgICAg
ICAgICBtX2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKHZlY3Rvckxlbmd0aCAqIHNpemVvZihKU1Zh
bHVlKSksIHN0b3JhZ2VHUFIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ppdC5hZGRQ
dHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlR1BSKTsKKyAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEoc2l6ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuZW1p
dEFsbG9jYXRlKHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMp
OworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKAorICAgICAgICAgICAgVHJ1c3RlZElt
bTMyKG91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksCisgICAgICAgICAgICBzdG9yYWdlR1BSKTsKICAgICB9IGVsc2UKICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdlR1BSKTsKIApAQCAtMTI3LDE0ICsx
MjcsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1Jhd09iamVjdCwgcmVzdWx0R1BSLCBzdG9y
YWdlR1BSLAogICAgICAgICBzdHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aCkpOwogCi0gICAgaWYgKGhh
c0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSAmJiBudW1FbGVtZW50cyA8IHZlY3Rv
ckxlbmd0aCkgeworICAgIGlmIChudW1FbGVtZW50cyA8IHZlY3Rvckxlbmd0aCkgewogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2Fz
dDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVv
Zihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciB2
YWx1ZTsKLSAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CisgICAgICAgIGlmIChoYXNEb3VibGUoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1FbGVtZW50czsgaSA8IHZl
Y3Rvckxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0z
Mih2YWx1ZS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKHZhbHVlLmFzQml0
cy5wYXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRv
dWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7
CkBAIC02NzI2LDE4ICs2NzMyLDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxv
Y2F0ZVByb3AKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsK
ICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNj
cmF0Y2gyLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwog
ICAgICAgICAKICAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPm91dE9m
TGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgPT0g
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAKLSAg
ICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJhc2lj
U3RvcmFnZSgKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihpbml0aWFsT3V0T2ZMaW5lQ2FwYWNp
dHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0KLSAgICBtX2ppdC5hZGRQdHIo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRj
aEdQUjEpOworICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6
ZW9mKEpTVmFsdWUpOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6
ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOworICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7
CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENh
bGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aElu
aXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKQEAgLTY3NzIsMTYgKzY3ODQsMjEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIFN0b3JhZ2VPcGVyYW5k
IG9sZFN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CiAgICAgR1BSUmVnIG9sZFN0b3JhZ2VHUFIgPSBvbGRTdG9yYWdlLmdwcigpOwog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOwogICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwotICAgICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVt
cCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShUcnVzdGVkSW1t
MzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFkZFB0cihKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7CisgICAgCisgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1eGls
aWFyeURhdGEobmV3U2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgbV9qaXQuZW1p
dEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRo
KTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihuZXdT
aXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgCiAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwg
dGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBuZXdT
aXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNCw3ICs1MTQsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHVibGlj
TGVuZ3RoID0gcmVzdWx0QXJyYXkuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIHB1YmxpY0xlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9CisgICAgICAgICAg
ICAgICAgICAgICAgICBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0
cnVjdHVyZSwgcHVibGljTGVuZ3RoKTsKIAogICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogaW5kZXhVSUQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmluZGV4LmltcGwoKTsKICAg
ICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlucHV0VUlEID0gdm0oKS5wcm9w
ZXJ0eU5hbWVzLT5pbnB1dC5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
NjYsNyArMzc2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKG1pbkNhcGFjaXR5KSkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVWYXJpYWJsZVNp
emVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCi0gICAgICAgICAgICAgICAgc2l6ZSwgc3RydWN0
dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgbV9vdXQu
emVyb0V4dFB0cihzaXplKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLnZhbHVl
LCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOwpAQCAtNDA2Miw5
ICs0MDYyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9
IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBM
VmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVy
Zmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9j
YXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxp
YXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUg
c3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFpbENhc2UpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuc3ViKGVu
ZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9
IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgb2JqZWN0ID0g
YWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZhaWxDYXNlKTsK
ICAgICAgICAgICAgIApAQCAtNjkxOSwxMSArNjkyMSwxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5z
ZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRF
bmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIExWYWx1ZSBzdGFy
dE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAgICAgICAgICAgICAgICAgIGFsbG9j
YXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0ZXJm
bHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKIAogICAg
ICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6ZSkpOworICAgICAgICAgICAgICAg
ICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGZhc3RC
dXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAg
ICAgICAgICAKQEAgLTc3MTcsMTAgKzc3MjEsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgTFZhbHVlIHZl
Y3Rvckxlbmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAgICAgIGlmICghaGFzRG91
YmxlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBhbHJlYWR5IGluaXRp
YWxpemVkIGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhhc0RvdWJs
ZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0
d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9s
ZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOwogCiAgICAg
ICAgIC8vIERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFOLgogICAgICAgICBMQmFz
aWNCbG9jayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03NzM1LDkgKzc3NDAsNyBA
QCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkoSW50MzIsIG9yaWdp
bmFsSW5kZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LnBoaShwb2ludGVyVHlw
ZSgpLCBvcmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmU2NCgK
LSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4p
KSwKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0
aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291dC5zdG9yZTY0KGhvbGUs
IFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgo
KSwgcG9pbnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5leHRJbmRleCA9IG1fb3V0
LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03Nzk4LDEyICs3ODAxLDEz
IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFs
dWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkpLCBz
bG93UGF0aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVzICog
c2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHZt
KCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5dGVzKTsKKyAgICAgICAg
TFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0
cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmFkZCht
X291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7
CisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgCiAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC04MzczLDcgKzgzNzcs
NyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0KIAot
ICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xv
d1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJh
c2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0g
bV9vdXQubmV3QmxvY2soKTsKICAgICAKQEAgLTgzOTQsNyArODM5OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKAogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihyZXN1bHQs
IG1faGVhcHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAgICAgICAgICBhbGxvY2F0b3IsIG1f
aGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7Ci0KKyAgICAgICAgCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtODQwOCw3ICs4NDEyLDcgQEAgcHJpdmF0
ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC04NDM2LDQ2ICs4NDQwLDU0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xv
d1BhdGgpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0g
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNp
emUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2UsIExW
YWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VT
dGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0
d28uIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3Rl
cCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXBy
ZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVlIHN1
YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9m
VHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxD
YXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJnZU9y
T3ZlcnNpemVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9j
ayBsYXJnZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBMVmFs
dWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291
dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVj
aXNlQ3V0b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNp
emUsIG1fb3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5j
b25zdEludFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291dC5i
cmFuY2goaXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVy
c2l6ZUNhc2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
KTsKICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAg
ICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBz
dWJzcGFjZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5k
ZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0
ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1
ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9j
ayk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikp
LAorICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQ
dHIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxseShs
YXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFkZHJl
c3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1
YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQu
emVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0
TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291
dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNw
YWNlOjppbXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxv
Y2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGko
cG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAgICAg
CisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3Is
IGxhcmdlQWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNp
emUoTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Js
b2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9v
dXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlVmFy
aWFibGVTaXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgdm0o
KS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xvd1Bh
dGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1NjAsMjggKzg1NzIsMjYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKQogICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6
Om1heChCQVNFX1ZFQ1RPUl9MRU4sIG51bUVsZW1lbnRzKTsKKyAgICAgICAgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1
Y3R1cmUsIG51bUVsZW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3Jh
Z2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJbmRleGlu
Z0hlYWRlcikpLAotICAgICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICBNYXJrZWRBbGxvY2F0
b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKAorICAg
ICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoICsgc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSk7CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENl
bGwobV9vdXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgCi0g
ICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoCi0gICAgICAgICAgICBlbmRPZlN0
b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCkp
OworICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBt
X291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgIAotICAg
ICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgb2JqZWN0
ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRo
KTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihudW1F
bGVtZW50cyksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAg
ICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHZlY3Rvckxlbmd0aCksIGJ1dHRl
cmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksCi0gICAgICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllc1tpXSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKworICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAg
aWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIGhv
bGUgPSBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7
IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaG9sZSwg
YnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKICAgICAgICAg
CiAgICAgICAgIHJldHVybiBBcnJheVZhbHVlcyhvYmplY3QsIGJ1dHRlcmZseSk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNs
dWRlICJIZWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBVdGlsLmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBA
IC01MSwxNiArNTIsMTYgQEAgQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3RzKE1h
cgogQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCiB7CiAgICAgaWYgKG1f
cm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5k
UmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICAgICAg
T1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6
ZW9mKEhlYXBDZWxsKikpOwogfQogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkKIHsK
ICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNhcGFjaXR5ID8g
bm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKLSAgICBKU0NlbGwqKiBuZXdSb290
cyA9IHN0YXRpY19jYXN0PEpTQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChu
ZXdDYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSkpOwotICAgIG1lbWNweShuZXdSb290cywgbV9y
b290cywgbV9zaXplICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICBIZWFwQ2VsbCoqIG5ld1Jvb3Rz
ID0gc3RhdGljX2Nhc3Q8SGVhcENlbGwqKj4oT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQo
bmV3Q2FwYWNpdHkgKiBzaXplb2YoSGVhcENlbGwqKSkpOworICAgIG1lbWNweShuZXdSb290cywg
bV9yb290cywgbV9zaXplICogc2l6ZW9mKEhlYXBDZWxsKikpOwogICAgIGlmIChtX3Jvb3RzICE9
IG1faW5saW5lUm9vdHMpCi0gICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2Uo
bV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSk7CisgICAgICAgIE9TQWxsb2Nh
dG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihIZWFw
Q2VsbCopKTsKICAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgbV9yb290cyA9IG5l
d1Jvb3RzOwogfQpAQCAtNzIsMTMgKzczLDE0IEBAIGlubGluZSB2b2lkIENvbnNlcnZhdGl2ZVJv
b3RzOjpnZW5lcmljQWQKIAogICAgIG1fY29waWVkU3BhY2UtPnBpbklmTmVjZXNzYXJ5KHApOwog
Ci0gICAgaWYgKCFIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsICptX2Jsb2NrcywgcCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKLSAgICAg
ICAgZ3JvdygpOwotCi0gICAgbV9yb290c1ttX3NpemUrK10gPSBzdGF0aWNfY2FzdDxKU0NlbGwq
PihwKTsKKyAgICBIZWFwVXRpbDo6ZmluZEdDT2JqZWN0UG9pbnRlcnMoCisgICAgICAgIGZpbHRl
ciwgKm1fYmxvY2tzLCBwLAorICAgICAgICBbJl0gKHZvaWQqIHApIHsKKyAgICAgICAgICAgIGlm
IChtX3NpemUgPT0gbV9jYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBncm93KCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1fcm9vdHNbbV9zaXplKytdID0gYml0d2lzZV9jYXN0PEhlYXBD
ZWxsKj4ocCk7CisgICAgICAgIH0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
aAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsOCArMzEsOCBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIEhlYXBDZWxsOwogY2xhc3MgSklUU3R1
YlJvdXRpbmVTZXQ7Ci1jbGFzcyBKU0NlbGw7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsK
IHB1YmxpYzoKQEAgLTQ0LDExICs0NCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQodm9pZCog
YmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmKTsKICAg
ICAKICAgICBzaXplX3Qgc2l6ZSgpOwotICAgIEpTQ2VsbCoqIHJvb3RzKCk7CisgICAgSGVhcENl
bGwqKiByb290cygpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW5saW5l
Q2FwYWNpdHkgPSAxMjg7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25JbmxpbmVDYXBhY2l0
eSA9IDgxOTIgLyBzaXplb2YoSlNDZWxsKik7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25J
bmxpbmVDYXBhY2l0eSA9IDgxOTIgLyBzaXplb2YoSGVhcENlbGwqKTsKICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KICAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVyKHZvaWQq
LCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29rJik7CkBAIC01OCwxMiArNTgsMTIgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIGdyb3coKTsKIAotICAgIEpTQ2VsbCoqIG1fcm9vdHM7CisgICAg
SGVhcENlbGwqKiBtX3Jvb3RzOwogICAgIHNpemVfdCBtX3NpemU7CiAgICAgc2l6ZV90IG1fY2Fw
YWNpdHk7CiAgICAgTWFya2VkQmxvY2tTZXQqIG1fYmxvY2tzOwogICAgIENvcGllZFNwYWNlKiBt
X2NvcGllZFNwYWNlOwotICAgIEpTQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBhY2l0eV07
CisgICAgSGVhcENlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsKIAogaW5s
aW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCkBAIC03MSw3ICs3MSw3IEBAIGlu
bGluZSBzaXplX3QgQ29uc2VydmF0aXZlUm9vdHM6OnNpemUoKQogICAgIHJldHVybiBtX3NpemU7
CiB9CiAKLWlubGluZSBKU0NlbGwqKiBDb25zZXJ2YXRpdmVSb290czo6cm9vdHMoKQoraW5saW5l
IEhlYXBDZWxsKiogQ29uc2VydmF0aXZlUm9vdHM6OnJvb3RzKCkKIHsKICAgICByZXR1cm4gbV9y
b290czsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShyZXZp
c2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw2IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKICAgICBUeXBlZEFy
cmF5VmVjdG9yQ29weVRva2VuLAogICAgIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwKICAgICBE
aXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDEyICs1OTgsNiBAQCB2b2lkIEhl
YXA6OmNvcHlCYWNraW5nU3RvcmVzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgQ29weVdvcmtMaXN0JiB3b3JrTGlzdCA9IGJsb2NrLT53b3JrTGlz
dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDb3B5V29ya2xpc3RJdGVtIGl0ZW0g
OiB3b3JrTGlzdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnRva2Vu
KCkgPT0gQnV0dGVyZmx5Q29weVRva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXRlbS5jZWxsKCksIGNvcHlWaXNpdG9yLCBCdXR0ZXJmbHlDb3B5VG9rZW4p
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCktPm1ldGhvZFRhYmxlKCktPmNvcHlCYWNr
aW5nU3RvcmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2VsbCgpLCBj
b3B5VmlzaXRvciwgaXRlbS50b2tlbigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTEzNDcsOCArMTM0MSwxNSBAQCB2b2lkIEhlYXA6OnJlc2V0QWxsb2NhdG9ycygpCiAKIHZvaWQg
SGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
dmVyYm9zZSA9IGZhbHNlOworICAgIAogICAgIEdDUEhBU0UoVXBkYXRlQWxsb2NhdGlvbkxpbWl0
cyk7CiAgICAgCisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAg
ICAgICAgZGF0YUxvZygiYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAiLCBtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlLCAiXG4iKTsKKyAgICB9CisgICAgCiAgICAgLy8gQ2FsY3VsYXRlIG91ciBj
dXJyZW50IGhlYXAgc2l6ZSB0aHJlc2hvbGQgZm9yIHRoZSBwdXJwb3NlIG9mIGZpZ3VyaW5nIG91
dCB3aGVuIHdlIHNob3VsZAogICAgIC8vIHJ1biBhbm90aGVyIGNvbGxlY3Rpb24uIFRoaXMgaXNu
J3QgdGhlIHNhbWUgYXMgZWl0aGVyIHNpemUoKSBvciBjYXBhY2l0eSgpLCB0aG91Z2ggaXQgc2hv
dWxkCiAgICAgLy8gYmUgc29tZXdoZXJlIGJldHdlZW4gdGhlIHR3by4gVGhlIGtleSBpcyB0byBt
YXRjaCB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgY2FsbHMgdG8KQEAgLTEzNjQsNiAr
MTM2NSw4IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAgICAgLy8gb2Yg
ZnJhZ21lbnRhdGlvbiwgdGhpcyBtYXkgYmUgc3Vic3RhbnRpYWwuIEZvcnR1bmF0ZWx5LCBtYXJr
ZWQgc3BhY2UgcmFyZWx5IGZyYWdtZW50cyBiZWNhdXNlCiAgICAgLy8gY2VsbHMgdXN1YWxseSBo
YXZlIGEgbmFycm93IHJhbmdlIG9mIHNpemVzLiBTbywgdGhlIHVuZGVyZXN0aW1hdGlvbiBpcyBw
cm9iYWJseSBPSy4KICAgICBjdXJyZW50SGVhcFNpemUgKz0gbV90b3RhbEJ5dGVzVmlzaXRlZDsK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygidG90YWxCeXRlc1Zpc2l0ZWQgPSAi
LCBtX3RvdGFsQnl0ZXNWaXNpdGVkLCAiLCBjdXJyZW50SGVhcFNpemUgPSAiLCBjdXJyZW50SGVh
cFNpemUsICJcbiIpOwogCiAgICAgLy8gRm9yIGNvcGllZCBzcGFjZSwgd2UgdXNlIHRoZSBjYXBh
Y2l0eSBvZiBzdG9yYWdlIHNwYWNlLiBUaGlzIGlzIGJlY2F1c2UgY29waWVkIHNwYWNlIG1heSBn
ZXQKICAgICAvLyBiYWRseSBmcmFnbWVudGVkIGJldHdlZW4gZnVsbCBjb2xsZWN0aW9ucy4gVGhp
cyBhcmlzZXMgd2hlbiBlYWNoIGVkZW4gY29sbGVjdGlvbiBldmFjdWF0ZXMKQEAgLTEzNzksMTAg
KzEzODIsMTUgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjY4CiAgICAgQVNTRVJU
KG1fdG90YWxCeXRlc0NvcGllZCA8PSBtX3N0b3JhZ2VTcGFjZS5zaXplKCkpOwogICAgIGN1cnJl
bnRIZWFwU2l6ZSArPSBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpOworICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBkYXRhTG9nKCJzdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSA9ICIsIG1fc3RvcmFn
ZVNwYWNlLmNhcGFjaXR5KCksICIsIGN1cnJlbnRIZWFwU2l6ZSA9ICIsIGN1cnJlbnRIZWFwU2l6
ZSwgIlxuIik7CiAKICAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGF0IGV4
dHJhTWVtb3J5U2l6ZSgpIGVuZHMgdXAgY29ycmVzcG9uZGluZyB0byBhbGxvY2F0aW9uLXRpbWUK
ICAgICAvLyBleHRyYSBtZW1vcnkgcmVwb3J0aW5nLgogICAgIGN1cnJlbnRIZWFwU2l6ZSArPSBl
eHRyYU1lbW9yeVNpemUoKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJl
eHRyYU1lbW9yeVNpemUoKSA9ICIsIGV4dHJhTWVtb3J5U2l6ZSgpLCAiLCBjdXJyZW50SGVhcFNp
emUgPSAiLCBjdXJyZW50SGVhcFNpemUsICJcbiIpOwogICAgIAogICAgIGlmIChPcHRpb25zOjpn
Y01heEhlYXBTaXplKCkgJiYgY3VycmVudEhlYXBTaXplID4gT3B0aW9uczo6Z2NNYXhIZWFwU2l6
ZSgpKQogICAgICAgICBIZWFwU3RhdGlzdGljczo6ZXhpdFdpdGhGYWlsdXJlKCk7CkBAIC0xMzky
LDI5ICsxNDAwLDM4IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAgICAg
ICAgIC8vIHRoZSBuZXcgYWxsb2NhdGlvbiBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVudCBzaXpl
IG9mIHRoZSBoZWFwLCB3aXRoIGEKICAgICAgICAgLy8gZml4ZWQgbWluaW11bS4KICAgICAgICAg
bV9tYXhIZWFwU2l6ZSA9IG1heChtaW5IZWFwU2l6ZShtX2hlYXBUeXBlLCBtX3JhbVNpemUpLCBw
cm9wb3J0aW9uYWxIZWFwU2l6ZShjdXJyZW50SGVhcFNpemUsIG1fcmFtU2l6ZSkpOworICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkZ1bGw6IG1heEhlYXBTaXplID0g
IiwgbV9tYXhIZWFwU2l6ZSwgIlxuIik7CiAgICAgICAgIG1fbWF4RWRlblNpemUgPSBtX21heEhl
YXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkZ1bGw6IG1heEVkZW5TaXplID0gIiwgbV9tYXhFZGVuU2l6ZSwgIlxuIik7
CiAgICAgICAgIG1fc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0ID0gY3VycmVudEhlYXBTaXplOwor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkZ1bGw6IHNpemVBZnRl
ckxhc3RGdWxsQ29sbGVjdCA9ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7CiAgICAgICAgIG1f
Ynl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxsQ29sbGVjdCA9IDA7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRnVsbDogYnl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RG
dWxsQ29sbGVjdCA9ICIsIDAsICJcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLSAgICAgICAgCiAgICAgICAgIEFTU0VSVChjdXJy
ZW50SGVhcFNpemUgPj0gbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCk7Ci0gICAgICAgIG1fbWF4RWRl
blNpemUgPSBtX21heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgICAgICAvLyBUaGVv
cmV0aWNhbGx5LCB3ZSBzaG91bGRuJ3QgZXZlciBzY2FuIG1vcmUgbWVtb3J5IHRoYW4gdGhlIGhl
YXAgc2l6ZSB3ZSBwbGFubmVkIHRvIGhhdmUuCisgICAgICAgIC8vIEJ1dCB3ZSBhcmUgc2xvcHB5
LCBzbyB3ZSBoYXZlIHRvIGRlZmVuZCBhZ2FpbnN0IHRoZSBvdmVyZmxvdy4KKyAgICAgICAgbV9t
YXhFZGVuU2l6ZSA9IGN1cnJlbnRIZWFwU2l6ZSA+IG1fbWF4SGVhcFNpemUgPyAwIDogbV9tYXhI
ZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKCJFZGVuOiBtYXhFZGVuU2l6ZSA9ICIsIG1fbWF4RWRlblNpemUsICJcbiIp
OwogICAgICAgICBtX3NpemVBZnRlckxhc3RFZGVuQ29sbGVjdCA9IGN1cnJlbnRIZWFwU2l6ZTsK
LSAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIk1heCBoZWFwIHNp
emU6ICIsIG1fbWF4SGVhcFNpemUsICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygiQ3VycmVu
dCBoZWFwIHNpemU6ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7Ci0gICAgICAgICAgICBkYXRh
TG9nKCJTaXplIGFmdGVyIGxhc3QgZWRlbiBjb2xsZWN0aW9uOiAiLCBtX3NpemVBZnRlckxhc3RF
ZGVuQ29sbGVjdCwgIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZG91YmxlIGVkZW5Ub09sZEdl
bmVyYXRpb25SYXRpbyA9IChkb3VibGUpbV9tYXhFZGVuU2l6ZSAvIChkb3VibGUpbV9tYXhIZWFw
U2l6ZTsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJFZGVuIHRv
IG9sZCBnZW5lcmF0aW9uIHJhdGlvOiAiLCBlZGVuVG9PbGRHZW5lcmF0aW9uUmF0aW8sICJcbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiRWRlbjogc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0ID0g
IiwgY3VycmVudEhlYXBTaXplLCAiXG4iKTsKKyAgICAgICAgZG91YmxlIGVkZW5Ub09sZEdlbmVy
YXRpb25SYXRpbyA9IChkb3VibGUpbV9tYXhFZGVuU2l6ZSAvIChkb3VibGUpbV9tYXhIZWFwU2l6
ZTsKICAgICAgICAgZG91YmxlIG1pbkVkZW5Ub09sZEdlbmVyYXRpb25SYXRpbyA9IDEuMCAvIDMu
MDsKICAgICAgICAgaWYgKGVkZW5Ub09sZEdlbmVyYXRpb25SYXRpbyA8IG1pbkVkZW5Ub09sZEdl
bmVyYXRpb25SYXRpbykKICAgICAgICAgICAgIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbiA9IHRy
dWU7CiAgICAgICAgIC8vIFRoaXMgc2VlbXMgc3VzcGVjdCBhdCBmaXJzdCwgYnV0IHdoYXQgaXQg
ZG9lcyBpcyBlbnN1cmUgdGhhdCB0aGUgbnVyc2VyeSBzaXplIGlzIGZpeGVkLgogICAgICAgICBt
X21heEhlYXBTaXplICs9IGN1cnJlbnRIZWFwU2l6ZSAtIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3Q7
CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRWRlbjogbWF4SGVh
cFNpemUgPSAiLCBtX21heEhlYXBTaXplLCAiXG4iKTsKICAgICAgICAgbV9tYXhFZGVuU2l6ZSA9
IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiRWRlbjogbWF4RWRlblNpemUgPSAiLCBtX21heEVkZW5TaXpl
LCAiXG4iKTsKICAgICAgICAgaWYgKG1fZnVsbEFjdGl2aXR5Q2FsbGJhY2spIHsKICAgICAgICAg
ICAgIEFTU0VSVChjdXJyZW50SGVhcFNpemUgPj0gbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Qp
OwogICAgICAgICAgICAgbV9mdWxsQWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUoY3VycmVu
dEhlYXBTaXplIC0gbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3QpOwpAQCAtMTQyMiw2ICsxNDM5
LDggQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICB9CiAKICAgICBt
X3NpemVBZnRlckxhc3RDb2xsZWN0ID0gY3VycmVudEhlYXBTaXplOworICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBkYXRhTG9nKCJzaXplQWZ0ZXJMYXN0Q29sbGVjdCA9ICIsIG1fc2l6ZUFmdGVy
TGFzdENvbGxlY3QsICJcbiIpOwogICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAwOwog
CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEzICs4MywxNSBAQCB0eXBlZGVmIEhhc2hDb3VudGVk
U2V0PGNvbnN0IGNoYXIqPiBUeXBlCiAKIGVudW0gSGVhcFR5cGUgeyBTbWFsbEhlYXAsIExhcmdl
SGVhcCB9OwogCitjbGFzcyBIZWFwVXRpbDsKKwogY2xhc3MgSGVhcCB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSGVhcCk7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBm
cmllbmQgY2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKICAgICBzdGF0aWMgSGVhcCogaGVhcChj
b25zdCBKU1ZhbHVlKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZhbHVlcwotICAgIHN0YXRpYyBIZWFw
KiBoZWFwKGNvbnN0IEpTQ2VsbCopOworICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEhlYXBD
ZWxsKik7CiAKICAgICAvLyBUaGlzIGNvbnN0YW50IGRldGVybWluZXMgaG93IG1hbnkgYmxvY2tz
IHdlIGl0ZXJhdGUgYmV0d2VlbiBjaGVja3Mgb2Ygb3VyIAogICAgIC8vIGRlYWRsaW5lIHdoZW4g
Y2FsbGluZyBIZWFwOjppc1BhZ2VkT3V0LiBEZWNyZWFzaW5nIGl0IHdpbGwgY2F1c2UgdXMgdG8g
ZGV0ZWN0IApAQCAtMTAyLDExICsxMDQsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgdGVz
dEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgc2V0TWFya2VkKGNv
bnN0IHZvaWQqKTsKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBydW4gYWZ0ZXIgc3Rv
cEFsbG9jYXRpb24oKSBpcyBjYWxsZWQgYW5kIAotICAgIC8vIGJlZm9yZSBsaXZlbmVzcyBkYXRh
IGlzIGNsZWFyZWQgdG8gYmUgYWNjdXJhdGUuCi0gICAgc3RhdGljIGJvb2wgaXNQb2ludGVyR0NP
YmplY3QoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIHZvaWQqIHBvaW50ZXIpOwot
ICAgIHN0YXRpYyBib29sIGlzVmFsdWVHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIsIE1hcmtlZEJs
b2NrU2V0JiwgSlNWYWx1ZSk7Ci0KICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwq
KTsKICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICB2
b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKQEAgLTE1MCw3ICsxNDcs
MTEgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0
aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9j
YXRvckZvcihieXRlcyk7IH0KICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVj
dFdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5kZXN0
cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNz
VHlwZT4gTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5
dGVzKTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6
ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmF1eGlsaWFyeUFsbG9jYXRvckZvcihi
eXRlcyk7IH0KICAgICBDb3BpZWRBbGxvY2F0b3ImIHN0b3JhZ2VBbGxvY2F0b3IoKSB7IHJldHVy
biBtX3N0b3JhZ2VTcGFjZS5hbGxvY2F0b3IoKTsgfQorICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxp
YXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0
ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5
UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2Us
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5
QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOwog
ICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRP
d25lciwgdm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CiAgICAgdm9pZCBhc2NyaWJlT3duZXIoSlND
ZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7CkBAIC0yNjcsNiArMjY4LDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgR0NMb2dnaW5nOwogICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZDsK
ICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OworICAgIGZyaWVuZCBjbGFzcyBIZWFwVXRpbDsK
ICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogICAgIGZyaWVuZCBjbGFzcyBKSVRTdHVi
Um91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMDM5MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1
ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgogI2luY2x1ZGUgIkpTQ2Vs
bC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgpAQCAt
NTksNyArNjAsNyBAQCBpbmxpbmUgYm9vbCBIZWFwOjppc0NvbGxlY3RpbmcoKQogICAgIHJldHVy
biBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24gfHwgbV9vcGVyYXRpb25J
blByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uOwogfQogCi1pbmxpbmUgSGVhcCogSGVhcDo6aGVh
cChjb25zdCBKU0NlbGwqIGNlbGwpCitpbmxpbmUgSGVhcCogSGVhcDo6aGVhcChjb25zdCBIZWFw
Q2VsbCogY2VsbCkKIHsKICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5o
ZWFwKCk7CiB9CkBAIC0xOTksNyArMjAwLDcgQEAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRl
V2l0aG91dERlc3RydQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci12b2lkKiBI
ZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogSGVh
cDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogewogICAgIC8vIEpTQ2VsbDo6
Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVj
dG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VSVCgoIUNs
YXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAm
IFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBK
U0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMTAsNyArMjExLDcgQEAgdm9pZCog
SGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDbGFzc1R5cGU+Ci1NYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yT2Jq
ZWN0T2ZUeXBlKCkKK2lubGluZSBNYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNl
Rm9yT2JqZWN0T2ZUeXBlKCkKIHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMg
b2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBK
U0Rlc3RydWN0aWJsZU9iamVjdC4KICAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1
Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFs
KSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+
Ojp2YWx1ZSkpOwpAQCAtMjIxLDcgKzIyMiw3IEBAIE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVh
cDo6c3Vic3BhY2VGb3IKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotTWFya2Vk
QWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQor
aW5saW5lIE1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNp
emVfdCBieXRlcykKIHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0
cyBhbGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3Ry
dWN0aWJsZU9iamVjdC4KICAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24g
fHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB8fCBz
dGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+Ojp2YWx1
ZSkpOwpAQCAtMjMxLDYgKzIzMiwzNyBAQCBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRv
ckZvck9iamVjCiAgICAgcmV0dXJuIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9y
KGJ5dGVzKTsKIH0KIAoraW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2Vs
bCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9IG1f
b2JqZWN0U3BhY2UuYWxsb2NhdGVBdXhpbGlhcnkoYnl0ZXMpOworI2lmIEVOQUJMRShBTExPQ0FU
SU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBieXRlcyBv
ZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCByZXN1bHQp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5kaWYKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlh
cnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVz
dWx0ID0gbV9vYmplY3RTcGFjZS50cnlBbGxvY2F0ZUF1eGlsaWFyeShieXRlcyk7CisjaWYgRU5B
QkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcg
JWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGludGVuZGVkT3du
ZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKKyNl
bmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBIZWFwOjp0cnlSZWFs
bG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogb2xkQmFzZSwgc2l6
ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworICAgIHZvaWQqIG5ld0Jhc2UgPSB0cnlB
bGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCBuZXdTaXplKTsKKyAgICBpZiAoIW5ld0Jh
c2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIG1lbWNweShuZXdCYXNlLCBvbGRCYXNl
LCBvbGRTaXplKTsKKyAgICByZXR1cm4gbmV3QmFzZTsKK30KKwogaW5saW5lIENoZWNrZWRCb29s
ZWFuIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVf
dCBieXRlcywgdm9pZCoqIG91dFB0cikKIHsKICAgICBDaGVja2VkQm9vbGVhbiByZXN1bHQgPSBt
X3N0b3JhZ2VTcGFjZS50cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKTsKQEAgLTM1NCwzMyArMzg2
LDYgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGlkRnJlZUJsb2NrKHNpemVfdCBjYQogI2VuZGlmCiB9
CiAKLWlubGluZSBib29sIEhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KFRpbnlCbG9vbUZpbHRlciBm
aWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCwgdm9pZCogcG9pbnRlcikKLXsK
LSAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKHBvaW50
ZXIpOwotICAgIGlmIChmaWx0ZXIucnVsZU91dChiaXR3aXNlX2Nhc3Q8Qml0cz4oY2FuZGlkYXRl
KSkpIHsKLSAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1hcmtlZEJsb2NrU2V0LnNldCgp
LmNvbnRhaW5zKGNhbmRpZGF0ZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhjYW5k
aWRhdGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNhbmRpZGF0ZS0+aXNM
aXZlQ2VsbChwb2ludGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWlubGluZSBib29sIEhlYXA6OmlzVmFsdWVHQ09iamVjdChUaW55Qmxvb21GaWx0
ZXIgZmlsdGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBpc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBzdGF0aWNf
Y2FzdDx2b2lkKj4odmFsdWUuYXNDZWxsKCkpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBIZWFwSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBVdGlsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFV0aWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQXJlIHlvdSB0aXJlZCBvZiB3YWl0
aW5nIGZvciBhbGwgb2YgV2ViS2l0IHRvIGJ1aWxkIGJlY2F1c2UgeW91IGNoYW5nZWQgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIGEKKy8vIGZ1bmN0aW9uIGluIEhlYXBJbmxpbmVzLmg/ICBEb2VzIGl0
IGJvdGhlciB5b3UgdGhhdCB5b3UncmUgd2FpdGluZyBvbiByZWJ1aWxkaW5nIHRoZSBKUyBET00K
Ky8vIGJpbmRpbmdzIGV2ZW4gdGhvdWdoIHlvdXIgY2hhbmdlIGlzIGluIGEgZnVuY3Rpb24gY2Fs
bGVkIGZyb20gb25seSAyIC5jcHAgZmlsZXM/ICBUaGVuIEhlYXBVdGlsLmgKKy8vIGlzIGZvciB5
b3UhICBFdmVyeXRoaW5nIGluIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGEgc3RhdGljIG1ldGhvZCB0
aGF0IHRha2VzIGEgSGVhcCYgaWYgbmVlZGVkLgorLy8gVGhpcyBpcyBhIGZyaWVuZCBvZiBIZWFw
LCBzbyB5b3UgY2FuIGFjY2VzcyBhbGwgb2YgSGVhcCdzIHByaXZhdGVzLgorLy8KKy8vIFRoaXMg
ZW5kcyB1cCBiZWluZyBhbiBpc3N1ZSBiZWNhdXNlIEhlYXAgZXhwb3NlcyBhIGxvdCBvZiBtZXRo
b2RzIHRoYXQgb3VnaHQgdG8gYmUgaW5saW5lIGZvcgorLy8gcGVyZm9ybWFuY2Ugb3IgdGhhdCBt
dXN0IGJlIGlubGluZSBiZWNhdXNlIHRoZXkgYXJlIHRlbXBsYXRlcy4gIFRoaXMgY2xhc3Mgb3Vn
aHQgdG8gY29udGFpbgorLy8gbWV0aG9kcyB0aGF0IGFyZSB1c2VkIGZvciB0aGUgaW1wbGVtZW50
YXRpb24gb2YgdGhlIGNvbGxlY3Rvciwgb3IgZm9yIHVudXN1YWwgY2xpZW50cyB0aGF0IG5lZWQK
Ky8vIHRvIHJlYWNoIGRlZXAgaW50byB0aGUgY29sbGVjdG9yIGZvciBzb21lIHJlYXNvbi4gIERv
bid0IHB1dCB0aGluZ3MgaW4gaGVyZSB0aGF0IHdvdWxkIGNhdXNlIHlvdQorLy8gdG8gaGF2ZSB0
byBpbmNsdWRlIGl0IGZyb20gbW9yZSB0aGFuIGEgaGFuZGZ1bCBvZiBwbGFjZXMsIHNpbmNlIHRo
YXQgd291bGQgZGVmZWF0IHRoZSBwdXJwb3NlLgorLy8gVGhpcyBjbGFzcyBpc24ndCBoZXJlIHRv
IGxvb2sgcHJldHR5LiAgSXQncyB0byBsZXQgdXMgaGFjayB0aGUgR0MgbW9yZSBlYXNpbHkhCisK
K2NsYXNzIEhlYXBVdGlsIHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUg
cnVuIGFmdGVyIHN0b3BBbGxvY2F0aW9uKCkgaXMgY2FsbGVkIGFuZCAKKyAgICAvLyBiZWZvcmUg
bGl2ZW5lc3MgZGF0YSBpcyBjbGVhcmVkIHRvIGJlIGFjY3VyYXRlLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZmluZEdDT2JqZWN0UG9pbnRlcnMoCisgICAg
ICAgIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1Nl
dCwgdm9pZCogcGFzc2VkUG9pbnRlciwKKyAgICAgICAgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7
CisgICAgICAgIGNoYXIqIHBvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocGFzc2VkUG9pbnRl
cik7CisgICAgCisgICAgICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6
YmxvY2tGb3IocG9pbnRlcik7CisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIGEgYnV0dGVy
Zmx5IHBvaW50ZXIgdG8gcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGEgYnV0dGVyZmx5LiBDaGVjayB0
aGlzIG5vdy4KKyAgICAgICAgaWYgKHBvaW50ZXIgPD0gYml0d2lzZV9jYXN0PGNoYXIqPihjYW5k
aWRhdGUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAgICAgLy8gV2UgbWF5
IGJlIGludGVyZXN0ZWQgaW4gdGhlIGxhc3QgY2VsbCBvZiB0aGUgcHJldmlvdXMgTWFya2VkQmxv
Y2suCisgICAgICAgICAgICBjaGFyKiBwcmV2aW91c1BvaW50ZXIgPSBwb2ludGVyIC0gc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSAtIDE7CisgICAgICAgICAgICBNYXJrZWRCbG9jayogcHJldmlvdXND
YW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocHJldmlvdXNQb2ludGVyKTsKKyAgICAg
ICAgICAgIGlmICghZmlsdGVyLnJ1bGVPdXQoYml0d2lzZV9jYXN0PEJpdHM+KHByZXZpb3VzQ2Fu
ZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAmJiBtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlu
cyhwcmV2aW91c0NhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAmJiBwcmV2aW91c0NhbmRpZGF0
ZS0+Y2VsbEtpbmQoKSA9PSBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSB7CisgICAgICAgICAgICAgICAg
cHJldmlvdXNQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHByZXZpb3VzQ2FuZGlkYXRlLT5j
ZWxsQWxpZ24ocHJldmlvdXNQb2ludGVyKSk7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3Vz
Q2FuZGlkYXRlLT5pc0xpdmVDZWxsKHByZXZpb3VzUG9pbnRlcikpCisgICAgICAgICAgICAgICAg
ICAgIGZ1bmMocHJldmlvdXNQb2ludGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IAorICAgICAgICBpZiAoZmlsdGVyLnJ1bGVPdXQoYml0d2lzZV9jYXN0PEJpdHM+KGNhbmRpZGF0
ZSkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAhbWFya2VkQmxvY2tTZXQu
c2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAKKyAgICAgICAgaWYgKCFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhjYW5k
aWRhdGUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gdHJ5UG9pbnRlciA9
IFsmXSAodm9pZCogcG9pbnRlcikgeworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+aXNMaXZl
Q2VsbChwb2ludGVyKSkKKyAgICAgICAgICAgICAgICBmdW5jKHBvaW50ZXIpOworICAgICAgICB9
OworICAgIAorICAgICAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpID09IEhlYXBDZWxsOjpK
U0NlbGwpIHsKKyAgICAgICAgICAgIGlmICghTWFya2VkQmxvY2s6OmlzQXRvbUFsaWduZWQocG9p
bnRlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgICAgIHRy
eVBvaW50ZXIocG9pbnRlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAK
KyAgICAgICAgLy8gQSBidXR0ZXJmbHkgY291bGQgcG9pbnQgaW50byB0aGUgbWlkZGxlIG9mIGFu
IG9iamVjdC4KKyAgICAgICAgY2hhciogYWxpZ25lZFBvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oY2FuZGlkYXRlLT5jZWxsQWxpZ24ocG9pbnRlcikpOworICAgICAgICB0cnlQb2ludGVyKGFs
aWduZWRQb2ludGVyKTsKKyAgICAKKyAgICAgICAgLy8gQWxzbywgYSBidXR0ZXJmbHkgY291bGQg
cG9pbnQgYXQgdGhlIGVuZCBvZiBhbiBvYmplY3QgcGx1cyBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
LiBJbiB0aGF0CisgICAgICAgIC8vIGNhc2UsIHRoaXMgaXMgcG9pbnRpbmcgdG8gdGhlIG9iamVj
dCB0byB0aGUgcmlnaHQgb2YgdGhlIG9uZSB3ZSBzaG91bGQgYmUgbWFya2luZy4KKyAgICAgICAg
aWYgKGNhbmRpZGF0ZS0+YXRvbU51bWJlcihhbGlnbmVkUG9pbnRlcikgPiBNYXJrZWRCbG9jazo6
Zmlyc3RBdG9tKCkKKyAgICAgICAgICAgICYmIHBvaW50ZXIgPD0gYWxpZ25lZFBvaW50ZXIgKyBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKQorICAgICAgICAgICAgdHJ5UG9pbnRlcihhbGlnbmVkUG9p
bnRlciAtIGNhbmRpZGF0ZS0+Y2VsbFNpemUoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBi
b29sIGlzUG9pbnRlckdDT2JqZWN0SlNDZWxsKAorICAgICAgICBUaW55Qmxvb21GaWx0ZXIgZmls
dGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIGNvbnN0IHZvaWQqIHBvaW50ZXIp
CisgICAgeworICAgICAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxvY2s6OmJs
b2NrRm9yKHBvaW50ZXIpOworICAgICAgICBpZiAoZmlsdGVyLnJ1bGVPdXQoYml0d2lzZV9jYXN0
PEJpdHM+KGNhbmRpZGF0ZSkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAh
bWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghTWFya2VkQmxv
Y2s6OmlzQXRvbUFsaWduZWQocG9pbnRlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5zKGNhbmRp
ZGF0ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
Y2FuZGlkYXRlLT5jZWxsS2luZCgpICE9IEhlYXBDZWxsOjpKU0NlbGwpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoIWNhbmRpZGF0ZS0+aXNMaXZlQ2Vs
bChwb2ludGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbHVlR0NPYmpl
Y3QoCisgICAgICAgIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJr
ZWRCbG9ja1NldCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUuaXND
ZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBpc1BvaW50
ZXJHQ09iamVjdEpTQ2VsbChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBzdGF0aWNfY2FzdDx2b2lk
Kj4odmFsdWUuYXNDZWxsKCkpKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgTWFya2Vk
QWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+ZGlkUmV0aXJlQmxvY2so
ZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMpCiB7CiAgICAgaWYgKG1f
Y3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayA9PSBtX25leHRC
bG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQogCi1pbmxpbmUgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCBieXRl
cykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAgIG1faGVhcC0+bV9vcGVy
YXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxv
Y2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0
Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jl
c3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFtX2N1cnJlbnRCbG9jayk7
CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6
OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBi
eXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gYWxs
b2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogTWFy
a2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKK3sKKyAgICBi
b29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJ
bXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBib29sIGNyYXNoT25GYWlsdXJlKQor
ewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2Nr
KCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKIApAQCAtMTU1LDM4ICsxNjcs
NTYgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKAogICAgIEFTU0VS
VCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qu
Ynl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKKyAg
ICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAg
ICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkpIHsKLSAg
ICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgICAgICByZXN1bHQgPSB0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAgICAgaWYgKHJlc3VsdCkKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgQVNTRVJUKCFtX2hlYXAtPnNo
b3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0gYWxsb2NhdGVC
bG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAgICBNYXJrZWRCbG9jayogYmxvY2sg
PSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAoIWJsb2NrKSB7CisgICAgICAgIGlm
IChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAg
ICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlKGJ5
dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsK
ICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1NYXJrZWRCbG9j
ayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBieXRlcykKK3N0YXRpYyBz
aXplX3QgYmxvY2tIZWFkZXJTaXplKCkKK3sKKyAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSk7Cit9CisK
K3NpemVfdCBNYXJrZWRBbGxvY2F0b3I6OmJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCBieXRlcykK
IHsKICAgICBzaXplX3QgbWluQmxvY2tTaXplID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKLSAg
ICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFy
a2VkQmxvY2s6OmF0b21TaXplPihzaXplb2YoTWFya2VkQmxvY2spKSArIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKKyAgICBzaXplX3QgbWlu
QWxsb2NhdGlvblNpemUgPSBibG9ja0hlYWRlclNpemUoKSArIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKICAgICBtaW5BbGxvY2F0aW9uU2l6
ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihXVEY6OnBhZ2VTaXplKCksIG1pbkFsbG9jYXRp
b25TaXplKTsKLSAgICBzaXplX3QgYmxvY2tTaXplID0gc3RkOjptYXgobWluQmxvY2tTaXplLCBt
aW5BbGxvY2F0aW9uU2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6ZSwgbWlu
QWxsb2NhdGlvblNpemUpOworfQogCi0gICAgc2l6ZV90IGNlbGxTaXplID0gbV9jZWxsU2l6ZSA/
IG1fY2VsbFNpemUgOiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21T
aXplPihieXRlcyk7CitzaXplX3QgTWFya2VkQWxsb2NhdG9yOjpvcHRpbWFsU2l6ZUZvckxhcmdl
QWxsb2NhdGlvbihzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGJsb2NrU2l6ZUZvckJ5dGVz
KGJ5dGVzKSAtIGJsb2NrSGVhZGVyU2l6ZSgpOworfQogCi0gICAgcmV0dXJuIE1hcmtlZEJsb2Nr
OjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVz
KTsKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2soc2l6ZV90
IGJ5dGVzKQoreworICAgIHNpemVfdCBibG9ja1NpemUgPSBibG9ja1NpemVGb3JCeXRlcyhieXRl
cyk7CisgICAgc2l6ZV90IGNlbGxTaXplID0gbV9jZWxsU2l6ZSA/IG1fY2VsbFNpemUgOiBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7CisgICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBj
ZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJs
b2NrKE1hcmtlZEJsb2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiAr
NTMsNyBAQCBwdWJsaWM6CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQg
Y2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KICAgICB2
b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAg
ICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE1hcmtlZEJsb2NrKiB0YWtl
TGFzdEFjdGl2ZUJsb2NrKCkKICAgICB7CkBAIC02OCwxMyArNjksMTggQEAgcHVibGljOgogICAg
IHZvaWQgaW5pdChIZWFwKiwgTWFya2VkU3BhY2UqLCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMmKTsKIAogICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxp
bmUpOworICAgIAorICAgIHN0YXRpYyBzaXplX3QgYmxvY2tTaXplRm9yQnl0ZXMoc2l6ZV90KTsK
KyAgICBzdGF0aWMgc2l6ZV90IG9wdGltYWxTaXplRm9yTGFyZ2VBbGxvY2F0aW9uKHNpemVfdCk7
CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93
Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7Ci0gICAgdm9pZCog
dHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0
cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUlt
cGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdp
dGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29s
bGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lkKiB0cnlQb3BGcmVlTGlzdChzaXplX3QpOwot
ICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNpemVfdCk7CisgICAgTWFya2VkQmxvY2sq
IHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0
Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZvaWQgcmV0aXJlKE1hcmtlZEJsb2NrKiwgTWFy
a2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBAIC0xMTMsMjEgKzExOSwzNSBAQCBpbmxpbmUg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogCiAgICAgbV9hdHRyaWJ1dGVzID0gYXR0
cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUo
c2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJl
ZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKSB7CisgICAgICAgIHZvaWQqIHJl
c3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOworICAgICAgICBpZiAocmVzdWx0ICYm
ICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBtZW1zZXQocmVzdWx0LCAweENELCBieXRl
cyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIG1fZnJlZUxpc3Qu
aGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1l
bXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0dXJuIGhlYWQ7Cit9CisKIGlubGluZSB2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBieXRlcykKIHsKICAgICBNYXJr
ZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgaWYgKFVOTElL
RUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5
dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVz
KTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1l
bXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgIGlmICghQVNTRVJU
X0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOwogICAgIHJldHVy
biBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICszNSwzMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29sIGNvbXB1dGVCYWxhbmNlID0gZmFsc2U7CiBzdGF0
aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhl
YXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNp
emVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykKK3N0
YXRpYyBib29sIHJlc2V0RnJlZUNlbGxzQmFkbHkoKQoreworICAgIHJldHVybiAhQVNTRVJUX0RJ
U0FCTEVEIHx8IE9wdGlvbnM6OnJlc2V0RnJlZUNlbGxzQmFkbHkoKTsKK30KKworc3RhdGljIHZv
aWQgcmVzZXRCYWRseSh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gc2l6ZSAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7IGktLTspIHsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihiYXNlKVtpXSA9IEpTVmFsdWU6OmVuY29kZSgKKyAg
ICAgICAgICAgIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oNjY2
ICogOCkpKTsKKyAgICB9Cit9CisKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRl
KEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHks
IHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykK
IHsKICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5jZSsrOwogICAgICAg
ICBpZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxvY2sg
QmFsYW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtlZEJsb2NrKiBibG9j
ayA9IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0eSkp
IE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsK
KyAgICB2b2lkKiBibG9ja1NwYWNlID0gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBj
YXBhY2l0eSk7CisgICAgaWYgKCFibG9ja1NwYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAocmVzZXRGcmVlQ2VsbHNCYWRseSgpKQorICAgICAgICByZXNldEJhZGx5KGJsb2Nr
U3BhY2UsIGNhcGFjaXR5KTsKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGws
IGJsb2NrU3BhY2UpIE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBh
dHRyaWJ1dGVzKTsKICAgICBoZWFwLmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJl
dHVybiBibG9jazsKIH0KQEAgLTkyLDExICsxMTAsMTEgQEAgaW5saW5lIHZvaWQgTWFya2VkQmxv
Y2s6OmNhbGxEZXN0cnVjdG9yKAogICAgIGNlbGwtPnphcCgpOwogfQogCi10ZW1wbGF0ZTxNYXJr
ZWRCbG9jazo6QmxvY2tTdGF0ZSBibG9ja1N0YXRlLCBNYXJrZWRCbG9jazo6U3dlZXBNb2RlIHN3
ZWVwTW9kZSwgYm9vbCBjYWxsRGVzdHJ1Y3RvcnM+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6Qmxv
Y2tTdGF0ZSBibG9ja1N0YXRlLCBNYXJrZWRCbG9jazo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgRGVz
dHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OlJlc2V0TW9kZSByZXNl
dE1vZGU+CiBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnNwZWNpYWxpemVkU3dl
ZXAoKQogewogICAgIEFTU0VSVChibG9ja1N0YXRlICE9IEFsbG9jYXRlZCAmJiBibG9ja1N0YXRl
ICE9IEZyZWVMaXN0ZWQpOwotICAgIEFTU0VSVCghKCFjYWxsRGVzdHJ1Y3RvcnMgJiYgc3dlZXBN
b2RlID09IFN3ZWVwT25seSkpOworICAgIEFTU0VSVCghKGRlc3RydWN0aW9uTW9kZSA9PSBEb2Vz
Tm90TmVlZERlc3RydWN0aW9uICYmIHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkpKTsKIAogICAgIC8v
IFRoaXMgcHJvZHVjZXMgYSBmcmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhy
b3VnaCB0aGUgYmxvY2suCiAgICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgYWxsb2NhdGlv
biBjb2RlIG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZQpAQCAtMTA5LDExICsxMjcsMTMg
QEAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJsb2NrOjpzcGVjaQogCiAgICAgICAgIEhl
YXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmYXRvbXMoKVtp
XSk7CiAKLSAgICAgICAgaWYgKGNhbGxEZXN0cnVjdG9ycyAmJiBibG9ja1N0YXRlICE9IE5ldykK
KyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBOZWVkc0Rlc3RydWN0aW9uICYmIGJsb2Nr
U3RhdGUgIT0gTmV3KQogICAgICAgICAgICAgY2FsbERlc3RydWN0b3IoY2VsbCk7CiAKICAgICAg
ICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKICAgICAgICAgICAgIEZyZWVD
ZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPihjZWxsKTsKKyAgICAg
ICAgICAgIGlmIChyZXNldE1vZGUgPT0gUmVzZXRCYWRseSkKKyAgICAgICAgICAgICAgICByZXNl
dEJhZGx5KGZyZWVDZWxsLCBjZWxsU2l6ZSgpKTsKICAgICAgICAgICAgIGZyZWVDZWxsLT5uZXh0
ID0gaGVhZDsKICAgICAgICAgICAgIGhlYWQgPSBmcmVlQ2VsbDsKICAgICAgICAgICAgICsrY291
bnQ7CkBAIC0xMzksMTcgKzE1OSwyNSBAQCBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxv
Y2s6OnN3ZWVwCiAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwogCiAgICAgaWYgKG1fYXR0cmli
dXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQotICAgICAgICByZXR1cm4gc3dl
ZXBIZWxwZXI8dHJ1ZT4oc3dlZXBNb2RlKTsKLSAgICByZXR1cm4gc3dlZXBIZWxwZXI8ZmFsc2U+
KHN3ZWVwTW9kZSk7CisgICAgICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFJlc2V0TW9kZTxO
ZWVkc0Rlc3RydWN0aW9uPihzd2VlcE1vZGUpOworICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVj
dFJlc2V0TW9kZTxEb2VzTm90TmVlZERlc3RydWN0aW9uPihzd2VlcE1vZGUpOworfQorCit0ZW1w
bGF0ZTxEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlPgorTWFya2VkQmxvY2s6OkZyZWVM
aXN0IE1hcmtlZEJsb2NrOjpzd2VlcEhlbHBlclNlbGVjdFJlc2V0TW9kZShTd2VlcE1vZGUgc3dl
ZXBNb2RlKQoreworICAgIGlmIChyZXNldEZyZWVDZWxsc0JhZGx5KCkpCisgICAgICAgIHJldHVy
biBzd2VlcEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlPGRlc3RydWN0aW9uTW9kZSwgUmVz
ZXRCYWRseT4oc3dlZXBNb2RlKTsKKyAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTdGF0ZUFu
ZFN3ZWVwTW9kZTxkZXN0cnVjdGlvbk1vZGUsIERvbnRSZXNldD4oc3dlZXBNb2RlKTsKIH0KIAot
dGVtcGxhdGU8Ym9vbCBjYWxsRGVzdHJ1Y3RvcnM+Ci1NYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFy
a2VkQmxvY2s6OnN3ZWVwSGVscGVyKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCit0ZW1wbGF0ZTxEZXN0
cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6UmVzZXRNb2RlIHJlc2V0
TW9kZT4KK01hcmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXBIZWxwZXJTZWxl
Y3RTdGF0ZUFuZFN3ZWVwTW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIHN3aXRjaCAo
bV9zdGF0ZSkgewogICAgIGNhc2UgTmV3OgogICAgICAgICBBU1NFUlQoc3dlZXBNb2RlID09IFN3
ZWVwVG9GcmVlTGlzdCk7Ci0gICAgICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPE5ldywgU3dl
ZXBUb0ZyZWVMaXN0LCBjYWxsRGVzdHJ1Y3RvcnM+KCk7CisgICAgICAgIHJldHVybiBzcGVjaWFs
aXplZFN3ZWVwPE5ldywgU3dlZXBUb0ZyZWVMaXN0LCBkZXN0cnVjdGlvbk1vZGUsIHJlc2V0TW9k
ZT4oKTsKICAgICBjYXNlIEZyZWVMaXN0ZWQ6CiAgICAgICAgIC8vIEhhcHBlbnMgd2hlbiBhIGJs
b2NrIHRyYW5zaXRpb25zIHRvIGZ1bGx5IGFsbG9jYXRlZC4KICAgICAgICAgQVNTRVJUKHN3ZWVw
TW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpOwpAQCAtMTYwLDggKzE4OCw4IEBAIE1hcmtlZEJsb2Nr
OjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXAKICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7
CiAgICAgY2FzZSBNYXJrZWQ6CiAgICAgICAgIHJldHVybiBzd2VlcE1vZGUgPT0gU3dlZXBUb0Zy
ZWVMaXN0Ci0gICAgICAgICAgICA/IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcFRvRnJl
ZUxpc3QsIGNhbGxEZXN0cnVjdG9ycz4oKQotICAgICAgICAgICAgOiBzcGVjaWFsaXplZFN3ZWVw
PE1hcmtlZCwgU3dlZXBPbmx5LCBjYWxsRGVzdHJ1Y3RvcnM+KCk7CisgICAgICAgICAgICA/IHNw
ZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcFRvRnJlZUxpc3QsIGRlc3RydWN0aW9uTW9kZSwg
cmVzZXRNb2RlPigpCisgICAgICAgICAgICA6IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2Vl
cE9ubHksIGRlc3RydWN0aW9uTW9kZSwgcmVzZXRNb2RlPigpOwogICAgIH0KIAogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMiArMTA5LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbXV0YWJsZSBSZXR1cm5UeXBlIG1fY291bnQ7
CiAgICAgICAgIH07CiAKLSAgICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiBjcmVhdGUoSGVhcCYs
IE1hcmtlZEFsbG9jYXRvciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25z
dCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7CisgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogdHJ5
Q3JlYXRlKEhlYXAmLCBNYXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBj
ZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEhlYXAmLCBNYXJrZWRCbG9jayopOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlz
QXRvbUFsaWduZWQoY29uc3Qgdm9pZCopOworICAgICAgICB2b2lkKiBjZWxsQWxpZ24odm9pZCop
OwogICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGJsb2NrRm9yKGNvbnN0IHZvaWQqKTsKICAg
ICAgICAgc3RhdGljIHNpemVfdCBmaXJzdEF0b20oKTsKKyAgICAgICAgc2l6ZV90IGF0b21OdW1i
ZXIoY29uc3Qgdm9pZCopOwogICAgICAgICAKICAgICAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5h
bGl6ZSgpOwogCkBAIC0xODQsMTUgKzE4NiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBhdG9tQWxpZ25tZW50TWFzayA9IGF0b21TaXplIC0gMTsKIAog
ICAgICAgICBlbnVtIEJsb2NrU3RhdGUgeyBOZXcsIEZyZWVMaXN0ZWQsIEFsbG9jYXRlZCwgTWFy
a2VkLCBSZXRpcmVkIH07Ci0gICAgICAgIHRlbXBsYXRlPGJvb2wgY2FsbERlc3RydWN0b3JzPiBG
cmVlTGlzdCBzd2VlcEhlbHBlcihTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOworICAgICAgICB0ZW1w
bGF0ZTxEZXN0cnVjdGlvbk1vZGU+IEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0UmVzZXRNb2Rl
KFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CisgICAgICAgIGVudW0gUmVzZXRNb2RlIHsgRG9udFJl
c2V0LCBSZXNldEJhZGx5IH07CisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSwgUmVz
ZXRNb2RlPiBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlKFN3ZWVw
TW9kZSA9IFN3ZWVwT25seSk7CiAKICAgICAgICAgdHlwZWRlZiBjaGFyIEF0b21bYXRvbVNpemVd
OwogCiAgICAgICAgIE1hcmtlZEJsb2NrKE1hcmtlZEFsbG9jYXRvciosIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7CiAgICAgICAg
IEF0b20qIGF0b21zKCk7Ci0gICAgICAgIHNpemVfdCBhdG9tTnVtYmVyKGNvbnN0IHZvaWQqKTsK
ICAgICAgICAgdm9pZCBjYWxsRGVzdHJ1Y3RvcihIZWFwQ2VsbCopOwotICAgICAgICB0ZW1wbGF0
ZTxCbG9ja1N0YXRlLCBTd2VlcE1vZGUsIGJvb2wgY2FsbERlc3RydWN0b3JzPiBGcmVlTGlzdCBz
cGVjaWFsaXplZFN3ZWVwKCk7CisgICAgICAgIHRlbXBsYXRlPEJsb2NrU3RhdGUsIFN3ZWVwTW9k
ZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBSZXNldE1vZGU+IEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAo
KTsKICAgICAgICAgCiAgICAgICAgIE1hcmtlZEJsb2NrKiBtX3ByZXY7CiAgICAgICAgIE1hcmtl
ZEJsb2NrKiBtX25leHQ7CkBAIC0yMzYsNiArMjM5LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICByZXR1cm4gIShyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYXRvbUFsaWdubWVudE1h
c2spOwogICAgIH0KIAorICAgIGlubGluZSB2b2lkKiBNYXJrZWRCbG9jazo6Y2VsbEFsaWduKHZv
aWQqIHApCisgICAgeworICAgICAgICBCaXRzIGJhc2UgPSByZWludGVycHJldF9jYXN0PEJpdHM+
KGF0b21zKCkgKyBmaXJzdEF0b20oKSk7CisgICAgICAgIEJpdHMgYml0cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Qml0cz4ocCk7CisgICAgICAgIGJpdHMgLT0gYmFzZTsKKyAgICAgICAgYml0cyAtPSBi
aXRzICUgY2VsbFNpemUoKTsKKyAgICAgICAgYml0cyArPSBiYXNlOworICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYml0cyk7CisgICAgfQorCiAgICAgaW5saW5lIE1hcmtl
ZEJsb2NrKiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY29uc3Qgdm9pZCogcCkKICAgICB7CiAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE1hcmtlZEJsb2NrKj4ocmVpbnRlcnByZXRfY2Fz
dDxCaXRzPihwKSAmIGJsb2NrTWFzayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEyICs2MiwxNSBAQCBw
dWJsaWM6CiAgICAgfk1hcmtlZFNwYWNlKCk7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6
ZSgpOwogCisgICAgc3RhdGljIHNpemVfdCBvcHRpbWFsU2l6ZUZvcihzaXplX3QpOworICAgIAog
ICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yKHNpemVfdCk7CiAgICAgTWFya2VkQWxs
b2NhdG9yJiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKHNpemVfdCk7CiAgICAgTWFya2VkQWxsb2Nh
dG9yJiBhdXhpbGlhcnlBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdp
dGhEZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3Rv
cihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKIAogICAgIFN1YnNwYWNlJiBzdWJzcGFj
ZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlOyB9
CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKCkgeyBy
ZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpAQCAtMTgyLDYgKzE4NSwxMSBAQCBpbmxpbmUgdm9pZCog
TWFya2VkU3BhY2U6OmFsbG9jYXRlQXV4aWxpCiAgICAgcmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRv
ckZvcihieXRlcykuYWxsb2NhdGUoYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkU3Bh
Y2U6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gYXV4
aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS50cnlBbGxvY2F0ZShieXRlcyk7Cit9CisKIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJs
b2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgZm9yRWFjaFN1YnNwYWNlKApAQCAt
MjUxLDYgKzI1OSwxNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaFN1YnNwYWNl
CiAgICAgZnVuYyhtX2F1eGlsaWFyeVNwYWNlLCBhdHRyaWJ1dGVzKTsKIH0KIAorQUxXQVlTX0lO
TElORSBzaXplX3QgTWFya2VkU3BhY2U6Om9wdGltYWxTaXplRm9yKHNpemVfdCBieXRlcykKK3sK
KyAgICBpZiAoYnl0ZXMgPD0gcHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihwcmVjaXNlU3RlcCwgYnl0ZXMpOworICAgIGlmIChieXRlcyA8PSBp
bXByZWNpc2VDdXRvZmYpCisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
aW1wcmVjaXNlU3RlcCwgYnl0ZXMpOworICAgIHJldHVybiBNYXJrZWRBbGxvY2F0b3I6Om9wdGlt
YWxTaXplRm9yTGFyZ2VBbGxvY2F0aW9uKGJ5dGVzKTsKK30KKwogaW5saW5lIE1hcmtlZEFsbG9j
YXRvciYgTWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcihTdWJzcGFjZSYgc3BhY2UsIHNpemVfdCBi
eXRlcykKIHsKICAgICBBU1NFUlQoYnl0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTk2LDYgKzk2LDggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIHsKICAg
ICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pCiAg
ICAgICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBoYXZlIG1l
cmdlZCBieSBub3cuCisgICAgZWxzZQorICAgICAgICByZXNldCgpOwogCiAgICAgaWYgKEhlYXBQ
cm9maWxlciogaGVhcFByb2ZpbGVyID0gdm0oKS5oZWFwUHJvZmlsZXIoKSkKICAgICAgICAgbV9o
ZWFwU25hcHNob3RCdWlsZGVyID0gaGVhcFByb2ZpbGVyLT5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIo
KTsKQEAgLTExOCwxMCArMTIwLDQyIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNr
KCkKIAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2
YXRpdmVSb290cykKIHsKLSAgICBKU0NlbGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJv
b3RzKCk7CisgICAgSGVhcENlbGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7
CiAgICAgc2l6ZV90IHNpemUgPSBjb25zZXJ2YXRpdmVSb290cy5zaXplKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGFwcGVuZChyb290c1tpXSk7Cisg
ICAgICAgIGFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KHJvb3RzW2ldKTsKK30KKwordm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkoSGVhcENlbGwqIGhlYXBDZWxsKQorewor
ICAgIGlmICghaGVhcENlbGwpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NFUlQoIW1f
aXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKTsKKyAgICAKKyAgICBpZiAoSGVhcDo6
dGVzdEFuZFNldE1hcmtlZChoZWFwQ2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBN
YXJrZWRCbG9jayogYmxvY2sgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoaGVhcENlbGwpOworICAg
IHN3aXRjaCAoYmxvY2stPmNlbGxLaW5kKCkpIHsKKyAgICBjYXNlIEhlYXBDZWxsOjpKU0NlbGw6
IHsKKyAgICAgICAgSlNDZWxsKiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2Vs
bCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWpzQ2VsbC0+c3RydWN0dXJlKCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5l
d0dyZXkpOworCisgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGJsb2NrLCBqc0NlbGwpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEhlYXBDZWxsOjpBdXhpbGlh
cnk6IHsKKyAgICAgICAgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKGJsb2NrLCBoZWFwQ2VsbCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9IH0KIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpT
VmFsdWUgdmFsdWUpCkBAIC0xNjgsMTcgKzIwMiw0NSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpzZXRN
YXJrZWRBbmRBcHBlbmRUb01hCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNr
KEpTQ2VsbCogY2VsbCkKIHsKKyAgICBhcHBlbmRUb01hcmtTdGFjayhNYXJrZWRCbG9jazo6Ymxv
Y2tGb3IoY2VsbCksIGNlbGwpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtT
dGFjayhNYXJrZWRCbG9jayogYmxvY2ssIEpTQ2VsbCogY2VsbCkKK3sKICAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Ci0KKyAg
ICAKKyAgICAvLyBGSVhNRTogVGhlc2UgImp1c3Qgd29yayIgYmVjYXVzZSB0aGUgR0MgcmVzZXRz
IHRoZXNlIGZpZWxkcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gQnV0CisgICAgLy8gdGhh
dCB3b24ndCBiZSB0aGUgY2FzZSB3aGVuIHdlIGRvIGNvbmN1cnJlbnQgR0MuCiAgICAgbV92aXNp
dENvdW50Kys7Ci0gICAgbV9ieXRlc1Zpc2l0ZWQgKz0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNl
bGwpLT5jZWxsU2l6ZSgpOworICAgIG1fYnl0ZXNWaXNpdGVkICs9IGJsb2NrLT5jZWxsU2l6ZSgp
OworICAgIAogICAgIG1fc3RhY2suYXBwZW5kKGNlbGwpOwogCiAgICAgaWYgKFVOTElLRUxZKG1f
aGVhcFNuYXBzaG90QnVpbGRlcikpCiAgICAgICAgIG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBw
ZW5kTm9kZShjZWxsKTsKIH0KIAordm9pZCBTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25z
dCB2b2lkKiBiYXNlKQoreworICAgIGlmIChIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGJhc2UpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKE1hcmtlZEJs
b2NrOjpibG9ja0ZvcihiYXNlKSwgYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oYmFzZSkpOworfQor
Cit2b2lkIFNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxvY2sqIGJs
b2NrLCBIZWFwQ2VsbCopCit7CisgICAgLy8gV2UgZ2V0IGhlcmUgb25jZSBwZXIgR0MgdW5kZXIg
dGhlc2UgY2lyY3Vtc3RhbmNlczoKKyAgICAvLworICAgIC8vIEVkZW4gY29sbGVjdGlvbjogaWYg
dGhlIGNlbGwgd2FzIGFsbG9jYXRlZCBzaW5jZSB0aGUgbGFzdCBjb2xsZWN0aW9uIGFuZCBpcyBs
aXZlIHNvbWVob3cuCisgICAgLy8KKyAgICAvLyBGdWxsIGNvbGxlY3Rpb246IGlmIHRoZSBjZWxs
IGlzIGxpdmUgc29tZWhvdy4KKyAgICAKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBtX2J5dGVz
VmlzaXRlZCArPSBibG9jay0+Y2VsbFNpemUoKTsKK30KKwogY2xhc3MgU2V0Q3VycmVudENlbGxT
Y29wZSB7CiBwdWJsaWM6CiAgICAgU2V0Q3VycmVudENlbGxTY29wZShTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgSlNDZWxsKiBjZWxsKQpAQCAtMjAyLDkgKzI2NCw5IEBAIHByaXZhdGU6CiBB
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxs
KiBjZWxsKQogewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7Ci0KKyAgICAKICAg
ICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwotCisg
ICAgCiAgICAgbV9jdXJyZW50T2JqZWN0Q2VsbFN0YXRlQmVmb3JlVmlzaXRpbmcgPSBjZWxsLT5j
ZWxsU3RhdGUoKTsKICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRCbGFjayk7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJl
dmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDggKzM3LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBjbGFzcyBHQ1RocmVhZFNo
YXJlZERhdGE7CiBjbGFzcyBIZWFwOworY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBIZWFwU25hcHNo
b3RCdWlsZGVyOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSklUV3JpdGVCYXJyaWVyOwor
Y2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyOwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKIGNsYXNzIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7
CkBAIC0xMDUsNiArMTA3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZl
cmVuY2VzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7Cisg
ICAgCisgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBz
aXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbworICAgIC8vIHRo
aXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCisgICAgdm9pZCBt
YXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOwogCiAgICAgdm9pZCBjb3B5TGF0ZXIoSlND
ZWxsKiwgQ29weVRva2VuLCB2b2lkKiwgc2l6ZV90KTsKICAgICAKQEAgLTEyNCwxMCArMTMwLDEz
IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoSlNWYWx1ZSk7IC8vIFRoaXMgaXMg
cHJpdmF0ZSB0byBlbmNvdXJhZ2UgY2xpZW50cyB0byB1c2UgV3JpdGVCYXJyaWVyPFQ+LgorICAg
IHZvaWQgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkoSGVhcENlbGwqKTsKICAgICB2b2lkIGFwcGVu
ZEhpZGRlbihKU1ZhbHVlKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TWFya2Vk
QW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFj
ayhKU0NlbGwqKTsKKyAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKE1hcmtlZEJsb2NrKiwgSlND
ZWxsKik7CisgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxvY2sqLCBIZWFw
Q2VsbCopOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290
cygpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDExICsyOSw5IEBACiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgogI2luY2x1ZGUgIkVycm9y
LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJP
YmplY3RDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsMTcgKzQ3Miw2
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICAgICAgcmVw
YXRjaFB1dEJ5SUQoZXhlYywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0
dWJJbmZvLCBEaXJlY3QpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxv
Y2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgRW5jb2RlZEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0KLSAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpID4gYmFzZS0+c3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7Ci0gICAgQVNTRVJUKCF2bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKS5mYXN0UGF0aFNob3Vs
ZFN1Y2NlZWQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUp
KSk7Ci0gICAgYmFzZS0+c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2Fy
eSh2bSwgc3RydWN0dXJlKTsKLSAgICBiYXNlLT5wdXREaXJlY3Qodm0sIG9mZnNldCwgSlNWYWx1
ZTo6ZGVjb2RlKHZhbHVlKSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTdHJp
bmdPclN5bWJvbChKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygp
IHx8IHZhbHVlLmlzU3ltYm9sKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNiBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRl
KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRM
aXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBX
VEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3Jh
Z2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5
VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJNb2R1bGVBbmFseXplci5oIgogCi0jaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJKU01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRp
b25zLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC03MiwxMSArNzIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIC8v
IFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3Rv
ciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQogLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0
ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQotI2Rl
ZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAgICAKKyNkZWZpbmUgQkFTRV9DT05USUdVT1VTX1ZF
Q1RPUl9MRU4gM1UKKyNkZWZpbmUgQkFTRV9BUlJBWV9TVE9SQUdFX1ZFQ1RPUl9MRU4gNFUKKwog
Ly8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBh
cnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50CiAvLyBpcyBhZGRlZC4KLSNkZWZpbmUgRklSU1Rf
VkVDVE9SX0dST1cgNFUKKyNkZWZpbmUgRklSU1RfQVJSQVlfU1RPUkFHRV9WRUNUT1JfR1JPVyA0
VQogCiAjZGVmaW5lIE1JTl9CRVlPTkRfTEVOR1RIX1NQQVJTRV9JTkRFWCAxMDAwCiAKQEAgLTk2
LDcgKzk3LDcgQEAgaW5saW5lIGJvb2wgaW5kZXhJc1N1ZmZpY2llbnRseUJleW9uZExlbgogICAg
IHJldHVybiBpID49IE1JTl9CRVlPTkRfTEVOR1RIX1NQQVJTRV9JTkRFWCAmJiBpID4gbGVuZ3Ro
OwogfQogCi1pbmxpbmUgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK2lubGluZSBJbmRleGluZ0hlYWRl
ciBpbmRleGluZ0hlYWRlckZvckFycmF5U3RvcmFnZSh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ0hlYWRlciByZXN1bHQ7CiAgICAgcmVzdWx0
LnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwpAQCAtMTA0LDkgKzEwNSw5IEBAIGlubGluZSBJbmRl
eGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1p
bmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQg
bGVuZ3RoKQoraW5saW5lIEluZGV4aW5nSGVhZGVyIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5
U3RvcmFnZSh1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9y
QXJyYXkobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHJldHVybiBpbmRleGluZ0hlYWRl
ckZvckFycmF5U3RvcmFnZShsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9y
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlT
dG9yYWdlLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5U3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiQXJyYXlDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUg
IkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJT
cGFyc2VBcnJheVZhbHVlTWFwLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC05OSw2ICsxMDAsNDIgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyB2ZWN0b3JMZW5n
dGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAgICB9CisgICAgCisgICAgc3Rh
dGljIHNpemVfdCB0b3RhbFNpemVGb3IodW5zaWduZWQgaW5kZXhCaWFzLCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwg
c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHRvdGFsU2l6
ZShzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
b3RhbFNpemVGb3IobV9pbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIHZlY3Rvckxlbmd0aCgp
KTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHRvdGFsU2l6ZShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b3RhbFNpemUoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIG9wdGlt
YWxWZWN0b3JMZW5ndGgodW5zaWduZWQgaW5kZXhCaWFzLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0g
c3RkOjptYXgoQkFTRV9BUlJBWV9TVE9SQUdFX1ZFQ1RPUl9MRU4sIHZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgIAorICAgICAgICBzaXplX3QgY2VsbFNpemUgPSBNYXJrZWRTcGFjZTo6b3B0aW1hbFNp
emVGb3IodG90YWxTaXplRm9yKGluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVu
Z3RoKSk7CisgICAgICAgIAorICAgICAgICB2ZWN0b3JMZW5ndGggPSAoY2VsbFNpemUgLSB0b3Rh
bFNpemVGb3IoaW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5LCAwKSkgLyBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KTsKKworICAgICAgICByZXR1cm4gdmVjdG9yTGVuZ3RoOworICAgIH0K
KyAgICAKKyAgICB1bnNpZ25lZCBvcHRpbWFsVmVjdG9yTGVuZ3RoKHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb3B0
aW1hbFZlY3Rvckxlbmd0aChtX2luZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVu
Z3RoKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgb3B0aW1hbFZlY3Rvckxlbmd0aChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG9wdGltYWxWZWN0b3JMZW5ndGgoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCB2ZWN0b3JMZW5ndGgpOworICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlC
YXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworY2xhc3MgVk07
CisKKy8vIEFuIEF1eGlsaWFyeSBiYXJyaWVyIGlzIGEgYmFycmllciB0aGF0IGRvZXMgbm90IHRy
eSB0byByZWFzb24gYWJvdXQgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBpbnRvCisvLyBpdCwgb3Ro
ZXIgdGhhbiBpbnRlcnByZXRpbmcgYSBmYWxzaXNoIHZhbHVlIGFzIG5vdCBuZWVkIGEgYmFycmll
ci4gSXQncyBPSyB0byB1c2UgdGhpcyBmb3IgZWl0aGVyCisvLyBKU0NlbGxzIG9yIGFueSBvdGhl
ciBraW5kIG9mIGRhdGEsIHNvIGxvbmcgYXMgaXQgcmVzcG9uZHMgdG8gb3BlcmF0b3IhKCkuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CitwdWJsaWM6Cisg
ICAgQXV4aWxpYXJ5QmFycmllcigpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgQXV4aWxpYXJ5QmFycmllcihWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgdm9p
ZCBjbGVhcigpIHsgbV92YWx1ZSA9IFQoKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+CisgICAgdm9pZCBzZXQoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIGNvbnN0IFQm
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBzbG90KCkgeyBy
ZXR1cm4gJm1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICB2b2lkIHNldFdpdGhvdXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBtX3ZhbHVlID0gc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUIG1fdmFsdWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVT4KK0F1eGls
aWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJpZXIoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBV
JiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dGVtcGxhdGU8dHlwZW5hbWUgVT4KK3ZvaWQgQXV4aWxpYXJ5QmFycmllcjxUPjo6c2V0KFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgVSYmIHZhbHVlKQoreworICAgIG1fdmFsdWUgPSBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseS5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNiArOTAsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAx
KTsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdW5zaWduZWQgb3B0aW1h
bENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCk7CisgICAgc3RhdGljIHVuc2lnbmVkIG9wdGltYWxDb250aWd1b3VzVmVj
dG9yTGVuZ3RoKFN0cnVjdHVyZSosIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgCiAgICAg
Ly8gVGhpcyBtZXRob2QgaXMgaGVyZSBub3QganVzdCBiZWNhdXNlIGl0J3MgaGFuZHksIGJ1dCB0
byByZW1pbmQgeW91IHRoYXQKICAgICAvLyB0aGUgd2hvbGUgcG9pbnQgb2YgYnV0dGVyZmxpZXMg
aXMgdG8gZG8gZXZpbCBwb2ludGVyIGFyaXRobWV0aWMuCiAgICAgc3RhdGljIEJ1dHRlcmZseSog
ZnJvbVBvaW50ZXIoY2hhciogcHRyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNSwxMiArMzUsMjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0FMV0FZU19JTkxJTkUgdW5z
aWduZWQgQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIHZlY3Rvckxlbmd0
aCA9IHN0ZDo6bWF4KEJBU0VfQ09OVElHVU9VU19WRUNUT1JfTEVOLCB2ZWN0b3JMZW5ndGgpOwor
ICAgIHNpemVfdCBjZWxsU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVl
LCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKTsKKyAgICBjZWxsU2l6ZSA9
IE1hcmtlZFNwYWNlOjpvcHRpbWFsU2l6ZUZvcihjZWxsU2l6ZSk7CisgICAgdmVjdG9yTGVuZ3Ro
ID0gKGNlbGxTaXplIC0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIDApKSAv
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgcmV0dXJuIHZlY3Rvckxlbmd0aDsKK30KKwor
QUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9y
TGVuZ3RoKFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7Cisg
ICAgcmV0dXJuIG9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSA/IHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA6IDAsIHZlY3Rvckxlbmd0aCk7Cit9CisKIGlubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2Vs
bCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQogewotICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxv
Y2F0ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgc2l6ZSwgJnRlbXApKTsKLSAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsK
KyAgICB2b2lkKiBiYXNlID0gdm0uaGVhcC5hbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVy
LCBzaXplKTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTks
NyArMTMyLDggQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAg
IHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBv
bGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVy
LCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0
b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOwotICAgIGlmICghdm0uaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZShpbnRlbmRl
ZE93bmVyLCAmdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgdGhlQmFzZSA9IHZtLmhl
YXAudHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCB0aGVCYXNlLCBvbGRTaXpl
LCBuZXdTaXplKTsKKyAgICBpZiAoIXRoZUJhc2UpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJl
dHVybiBmcm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAko
cmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDE5IEBAIENsb25lZEFy
Z3VtZW50czo6Q2xvbmVkQXJndW1lbnRzKFZNJiB2bSwKIENsb25lZEFyZ3VtZW50cyogQ2xvbmVk
QXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKICAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0Z1bmN0aW9uKiBjYWxsZWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGxlbmd0aCk7CisgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gbGVuZ3RoOwogICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZvaWQqIHRl
bXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxl
bmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgdm9pZCogdGVtcCA9
IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYgKCF0ZW1wKQogICAgICAgICByZXR1
cm4gMDsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVt
cCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBidXR0ZXJmbHktPnNl
dFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVu
Z3RoKGxlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgdmVj
dG9yTGVuZ3RoOyArK2kpCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFy
KCk7CiAKICAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9CiAgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPENsb25lZEFyZ3VtZW50cz4odm0uaGVhcCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
YXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNyw4IEBACiAjaW5j
bHVkZSAiR2VuZXJhdG9yUHJvdG90eXBlLmgiCiAKICNpbmNsdWRlICJKU0NCdWlsdGlucy5oIgot
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIkdlbmVyYXRvclByb3Rv
dHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKHRoZXRhbGVjcmFm
dGVyQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAxNSBTdWtvbHNhayBTYWtzaHV3b25n
IChzdWtvbHNha0BnbWFpbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Myw4ICszNCw3IEBACiAjaW5jbHVkZSAiSW50bENvbGxhdG9yQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0jaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4
ICszNCw3IEBACiAjaW5jbHVkZSAiSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0jaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5l
cy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsOCBAQAogI2luY2x1ZGUg
IkludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkludGxPYmplY3QuaCIK
ICNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJMb29rdXAuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDEwICszNCw4IEBACiAjaW5jbHVkZSAiSW50bERhdGVUaW1lRm9y
bWF0LmgiCiAjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlv
bi5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
Y3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDggQEAKICNp
bmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiU2xvdFZp
c2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwxMiBAQCB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIDAKKyNkZWZpbmUgTE9HSVQoKSBkYXRh
TG9nKFJhd1BvaW50ZXIodGhpcyksICI6ICIsIFdURl9QUkVUVFlfRlVOQ1RJT04sICJcbiIpOwor
I2Vsc2UKKyNkZWZpbmUgTE9HSVQoKSBkbyB7IH0gd2hpbGUoZmFsc2UpCisjZW5kaWYKKwogU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTQXJyYXkpOwogCiBjb25zdCBD
bGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU05vbkZpbmFsT2JqZWN0Ojpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheSl9OwpAQCAtNjEsNiArNjcsOCBA
QCBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uCiAKIHZvaWQgSlNBcnJh
eTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRhYmxlKQogewor
ICAgIExPR0lUKCk7CisgICAgCiAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCAhd3Jp
dGFibGUpOwogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAg
ICByZXR1cm47CkBAIC0yMzgsMTEgKzI0NiwxMyBAQCB2b2lkIEpTQXJyYXk6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2ZWN0b3Is
IGJ1dCBsZWF2ZXMgdGhlIG5ldyBzcGFjZSBmb3IgY291bnQgc2xvdHMgdW5jbGVhcmVkLgogYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdm0sIGJvb2wgYWRkVG9Gcm9udCwg
dW5zaWduZWQgY291bnQpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pOwogICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0
eSA9IHN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgdW5zaWduZWQgcHJv
cGVydHlTaXplID0gc3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lU2l6ZSgpOwotCisgICAgCiAgICAg
Ly8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4K
ICAgICBBU1NFUlQoIWFkZFRvRnJvbnQgfHwgY291bnQgPiBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7
CiAKQEAgLTI1NCw3ICsyNjQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNl
KFZNJiB2CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxhcmdlIHNob3VsZCB3ZSBs
aWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJlcXVpcmVkVmVjdG9yTGVu
Z3RoLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7Ci0gICAgdW5z
aWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwgbGVu
Z3RoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG9sZFZlY3Rvckxlbmd0
aCwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5ndGgg
aXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291bnQg
PiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTI2NSw3
ICsyNzYsMTAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAg
IEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKICAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNp
dHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAg
IC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1
ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICB1bnNpZ25l
ZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJB
U0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOworICAgIC8vIEZJWE1F
OiBUaGlzIGNvZGUgc2hvdWxkIGJlIGZpeGVkIHRvIGF2b2lkIGludGVybmFsIGZyYWdtZW50YXRp
b24uIEl0J3Mgbm90IHN1cGVyIGhpZ2gKKyAgICAvLyBwcmlvcml0eSBzaW5jZSBpbmNyZWFzZVZl
Y3Rvckxlbmd0aCgpIHdpbGwgImZpeCIgYW55IG1pc3Rha2VzIHdlIG1ha2UsIGJ1dCBpdCB3b3Vs
ZCBiZSBjb29sCisgICAgLy8gdG8gZ2V0IHRoaXMgcmlnaHQgZXZlbnR1YWxseS4KKyAgICB1bnNp
Z25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4
KEJBU0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOLCByZXF1aXJlZFZlY3Rvckxlbmd0aCkgPDwg
MSk7CiAKICAgICAvLyBTdGVwIDI6CiAgICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRvIGNob29z
ZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJldXNl
IHRoZSBleGlzdGluZyBvbmUuCkBAIC0yNzMsMTUgKzI4NywxOSBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7CiAgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFj
aXR5OworICAgIGJvb2wgYWxsb2NhdGVkTmV3U3RvcmFnZTsKICAgICAvLyBJZiB0aGUgY3VycmVu
dCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28gbGFyZ2Uh
KSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KICAgICBpZiAoY3VycmVudENhcGFjaXR5ID4gZGVz
aXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFjaXR5LCBy
ZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKICAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5
LT5iYXNlKHN0cnVjdHVyZSh2bSkpOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBjdXJy
ZW50Q2FwYWNpdHk7CisgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAgICB9
IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2Fw
YWNpdHkpKTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBu
ZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uaGVhcC50
cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBuZXdTaXplKTsKKyAgICAgICAgaWYgKCFuZXdBbGxv
Y0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBh
Y2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKKyAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFnZSA9IHRy
dWU7CiAgICAgfQogCiAgICAgLy8gU3RlcCAzOgpAQCAtMzExLDEzICszMjksMTkgQEAgYm9vbCBK
U0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgICAgICBBU1NFUlQoY291bnQg
KyB1c2VkVmVjdG9yTGVuZ3RoIDw9IG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIG1lbW1vdmUo
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOwogICAgICAgICBt
ZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIGJ1
dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1ZhbHVl
KSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6
OnNpemVGb3IoMCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGFsbG9jYXRlZE5ld1N0b3JhZ2Up
IHsKKyAgICAgICAgICAgIC8vIFdlIHdpbGwgc2V0IHRoZSB2ZWN0b3JMZW5ndGggdG8gbmV3VmVj
dG9yTGVuZ3RoLiBXZSBwb3B1bGF0ZWQgcmVxdWlyZWRWZWN0b3JMZW5ndGgKKyAgICAgICAgICAg
IC8vICh1c2VkVmVjdG9yTGVuZ3RoICsgY291bnQpLCB3aGljaCBpcyBsZXNzLiBDbGVhciB0aGUg
ZGlmZmVyZW5jZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJlcXVpcmVkVmVjdG9y
TGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgfQog
ICAgIH0gZWxzZSBpZiAoKG5ld0FsbG9jQmFzZSAhPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0dXJl
KHZtKSkpIHx8IChuZXdJbmRleEJpYXMgIT0gc3RvcmFnZS0+bV9pbmRleEJpYXMpKSB7CiAgICAg
ICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6
ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9mKEpT
VmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3IsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoSlNWYWx1ZSkgKiB1
c2VkVmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG5ld1Zl
Y3RvciA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdW
ZWN0b3JMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigpOworICAg
ICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIo
KTsKICAgICB9CiAKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JM
ZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKQEAgLTMyOSw4ICszNTMsMTAgQEAgYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogCiBib29sIEpTQXJyYXk6OnNldExlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wg
dGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKKyAgICBMT0dJVCgpOwor
ICAgIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwotCisgICAgCiAg
ICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBzcGFyc2UgbW9k
ZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lmJy4KICAgICBBU1NFUlQoaXNMZW5n
dGhXcml0YWJsZSgpIHx8IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKIApAQCAtMzkzLDYgKzQxOSw4
IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKIAogYm9vbCBKU0Fy
cmF5OjphcHBlbmRNZW1jcHkoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIHVuc2lnbmVkIHN0YXJ0
SW5kZXgsIEpTQzo6SlNBcnJheSogb3RoZXJBcnJheSkKIHsKKyAgICBMT0dJVCgpOworICAgIAog
ICAgIGlmICghY2FuRmFzdENvcHkodm0sIG90aGVyQXJyYXkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTQzMyw2ICs0NjEsOCBAQCBib29sIEpTQXJyYXk6OmFwcGVuZE1lbWNweShFeGVj
U3RhdGUqIGV4CiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQogeworICAgIExPR0lUKCk7Cisg
ICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBz
d2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtNDk3LDYg
KzUyNyw4IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKIAogSlNW
YWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogeworICAgIExPR0lUKCk7CisgICAg
CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CkBAIC01OTQsNiArNjI2LDggQEAgSlNWYWx1ZSBK
U0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogLy8gIC0gcHVzaGluZyB0byBhbiBhcnJheSBv
ZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBl
cnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
CiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKQEAgLTcz
MCw2ICs3NjQsOCBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAK
IEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGV4ZWMsIHVuc2lnbmVkIHN0
YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgYXV0
byBhcnJheVR5cGUgPSBpbmRleGluZ1R5cGUoKTsKICAgICBzd2l0Y2ggKGFycmF5VHlwZSkgewog
ICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOgpAQCAtNzYwLDYgKzc5Niw4IEBAIEpTQXJyYXkqIEpT
QXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGUKIAogYm9vbCBKU0FycmF5OjpzaGlmdENvdW50
V2l0aEFycmF5U3RvcmFnZShWTSYgdm0sIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICB1
bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICBSRUxFQVNFX0FTU0VS
VChjb3VudCA8PSBvbGRMZW5ndGgpOwogICAgIApAQCAtODY1LDYgKzkwMyw4IEBAIGJvb2wgSlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKIAogYm9vbCBKU0FycmF5OjpzaGlmdENv
dW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkJiBzdGFydElu
ZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgPiAwKTsKIApAQCAtOTYzLDYg
KzEwMDMsOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxi
YWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0SW5kZXgg
PD0gbGVuZ3RoKTsKQEAgLTExMDAsNiArMTE0Miw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50V2l0aEFueUluZGV4aW4KIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUq
IGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogeworICAgIExPR0lUKCk7CisgICAg
CiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogdmVjdG9yOwpAQCAtMTE2Niw2ICsxMjEwLDggQEAgdm9pZCBKU0Fy
cmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogCiB2b2lkIEpTQXJyYXk6OmNvcHlUb0Fy
Z3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBMT0dJVCgpOworICAg
IAogICAgIHVuc2lnbmVkIGkgPSBvZmZzZXQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
ZWN0b3I7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTc3LDcgKzE3Nyw4IEBAIHByaXZh
dGU6CiBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoVk0m
IHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQmIHZl
Y3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7Ci0gICAgdmVjdG9yTGVu
Z3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHZlY3Rvckxlbmd0
aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoCisgICAgICAgIGlu
dGVuZGVkT3duZXIgPyBpbnRlbmRlZE93bmVyLT5zdHJ1Y3R1cmUodm0pIDogMCwgbGVuZ3RoKTsK
ICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgaGVhZGVyLnNl
dFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gQnV0dGVyZmx5
OjpjcmVhdGUoCkBAIC0xODgsMTEgKzE4OSwxMSBAQCBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVD
b250aWd1b3VzQXJyYXlCCiBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShW
TSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsK
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAotICAgICAgICB2
bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXko
aW5pdGlhbExlbmd0aCksCi0gICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RP
Ul9MRU4pKTsKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIDAsIDAsIHRydWUsIGJhc2VJbmRl
eGluZ0hlYWRlckZvckFycmF5U3RvcmFnZShpbml0aWFsTGVuZ3RoKSwKKyAgICAgICAgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKEJBU0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOKSk7CiAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICBzdG9y
YWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsK
KyAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciA9IDA7CiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KQEAgLTIxNSwxMiArMjE2LDE3
IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCAKICAgICAgICAgaWYg
KGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKAogICAgICAgICAgICAgc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCiAg
ICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5
U3RvcmFnZSk7CiAgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KHZtLCAw
LCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJBU0Vf
QVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVybiBj
cmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CkBAIC0yMjgsNDAg
KzIzNCw0NyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAKIGlu
bGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7Ci0gICAgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3Ro
KTsKLSAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAg
ICBpZiAoaW5pdGlhbExlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU3RvcmFnZSA9IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OwotICAgIGlm
IChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkp
IHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKTsKKyAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkp
IHsKICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKTsKLQotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5
QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3Jh
Z2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkp
Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGhhc1VuZGVjaWRlZChpbmRleGlu
Z1R5cGUpCisgICAgICAgICAgICB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUpCisgICAgICAgICAg
ICB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzQ29udGlndW91
cyhpbmRleGluZ1R5cGUpKTsKKworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0
ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKGluaXRpYWxMZW5ndGgpOworICAg
ICAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBC
dXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5n
dGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIGlmICghdGVtcCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZy
b21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwogICAgICAgICBidXR0ZXJmbHktPnNl
dFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgICAgICBidXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkp
IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0
b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXSA9IFBOYU47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFn
ZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQXJy
YXlTdG9yYWdlOjpvcHRpbWFsVmVjdG9yTGVuZ3RoKGluaXRpYWxMZW5ndGgpOworICAgICAgICB2
b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IodmVjdG9yTGVuZ3RoKSkpOworICAgICAgICBpZiAoIXRlbXApCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0
ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKICAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwogICAgICAgICBzdG9y
YWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlh
bExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRlcmZs
eSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI3LDEzICsyNyw5IEBACiAjaW5jbHVkZSAiSlNDYWxsZWUuaCIKIAogI2luY2x1ZGUgIkdl
dHRlclNldHRlci5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNDZWxsLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEwLDI1ICs1MTAsMTUgQEAgQXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YQogICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICphbnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdh
dGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CiAgICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0
aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5LgogICAgIEhlYXAq
IGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpOworICAgIFZNJiB2bSA9ICpoZWFwLT52bSgp
OwogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CiAgICAgCiAgICAgQVNTRVJU
KCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKIAotICAgIHNpemVfdCBzaXplID0g
dGhpc09iamVjdC0+Ynl0ZVNpemUoKTsKLSAgICAKLSAgICBpZiAodGhpc09iamVjdC0+bV9tb2Rl
ID09IEZhc3RUeXBlZEFycmF5Ci0gICAgICAgICYmICF0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKSAm
JiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKLSAgICAgICAgQVNTRVJUKHRoaXNP
YmplY3QtPm1fdmVjdG9yKTsKLSAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVt
b3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KLSAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHku
c2V0V2l0aG91dEJhcnJpZXIoCi0gICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8SW5kZXhpbmdIZWFk
ZXIqPih0aGlzT2JqZWN0LT52ZWN0b3IoKSktPmJ1dHRlcmZseSgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7
Ci0gICAgICAgIFZNJiB2bSA9ICpoZWFwLT52bSgpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS5zZXQodm0sIHRoaXNPYmplY3QsIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlS
aWdodCgKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpLCB2bSwgdGhpc09iamVj
dCwgdGhpc09iamVjdC0+c3RydWN0dXJlKCksCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsIDApKTsKLSAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworICAgIHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwgdGhpc09iamVjdCwgQnV0dGVyZmx5OjpjcmVh
dGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKSwgdm0s
IHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLAorICAgICAgICB0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsIDApKTsKIAogICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDEyICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlNNYXBJdGVyYXRvci5oIgogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNp
bmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTbG90
VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyMDM5MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjcsMTQgKzI3LDEwIEBACiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuaCIKIAogI2luY2x1ZGUgIkVycm9yLmgiCi0jaW5jbHVkZSAiSWRlbnRpZmll
cklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1
bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlUmVjb3JkLmgiCiAjaW5jbHVkZSAi
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxNCArMjgsMTAgQEAKIAogI2luY2x1
ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgotI2luY2x1ZGUgIklkZW50aWZp
ZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJK
U0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFw
LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjAzOTIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw2ICs1NSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIDAKKyNk
ZWZpbmUgTE9HSVQoKSBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6ICIsIFdURl9QUkVUVFlf
RlVOQ1RJT04sICJcbiIpOworI2Vsc2UKKyNkZWZpbmUgTE9HSVQoKSBkbyB7IH0gd2hpbGUoZmFs
c2UpCisjZW5kaWYKKwogLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBh
cnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uIFdlIHVzZSB0aGlzCiAvLyBhcyBhIHNpbXBsZSBoZXVy
aXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAw
LgogLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9H
Uk9XIGRlZmluZWQgaW4KQEAgLTg4LDc3ICs5NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRD
bGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVj
dDo6Y29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJm
bHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKLXsKLSAgICBBU1NFUlQoYnV0dGVyZmx5KTsKLSAgICAK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwotICAgIAotICAg
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OwotICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKLSAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXM7Ci0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IHRoaXMtPmhhc0luZGV4aW5n
SGVhZGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewotICAgICAg
ICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHko
c3RydWN0dXJlKTsKLSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVy
ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwotICAgICAgICBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUlu
Qnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0
eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBp
ZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHks
IHByb3BlcnR5Q2FwYWNpdHkpKSkgewotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24odmlzaXRvciwg
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgcHJvcGVydGllcy4K
LSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnBy
b3BlcnR5U3RvcmFnZSgpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9
IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNvdW50
ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KQotICAgICAgICAgICAgKC0tY3VycmVudFRhcmdldCkt
PnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKC0tY3VycmVudFNvdXJjZSktPmdldCgpKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKLSAgICAgICAg
ICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDb3B5IHRoZSBhcnJheSBp
ZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjdXJyZW50VGFyZ2V0OwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBjdXJyZW50U291cmNlOwotICAgICAgICAgICAgc2l6ZV90IGNvdW50OwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAg
ICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJf
SU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQ
RVM6IHsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5jb250
aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKTsKLSAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7
Ci0gICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRl
ckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Ci0gICAgICAgICAgICAg
ICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9y
OwotICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gMDsKLSAgICAgICAgICAgICAgICBjdXJyZW50U291
cmNlID0gMDsKLSAgICAgICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1lbWNweShjdXJyZW50VGFyZ2V0LCBj
dXJyZW50U291cmNlLCBjb3VudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcihuZXdCdXR0
ZXJmbHkpOwotICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKLSAgICB9IAotfQotCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAg
ICAgQVNTRVJUKGJ1dHRlcmZseSk7CkBAIC0xNzUsMTMgKzExMCwxNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgIHByZUNhcGFjaXR5ID0gMDsKICAg
ICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwogICAgIH0KLSAgICBzaXplX3Qg
Y2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgCisgICAgSGVhcENlbGwqIGJhc2UgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihi
dXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpKTsKIAorICAgIEFT
U0VSVChIZWFwOjpoZWFwKGJhc2UpID09IHZpc2l0b3IuaGVhcCgpKTsKKworICAgIC8vIEtlZXAg
dGhlIGJ1dHRlcmZseSBhbGl2ZS4KKyAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkoYmFzZSk7Cisg
ICAgCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3Jh
Z2VTaXplKTsKLSAgICB2aXNpdG9yLmNvcHlMYXRlcigKLSAgICAgICAgdGhpcywgQnV0dGVyZmx5
Q29weVRva2VuLAotICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwogICAgIAogICAgIC8vIE1hcmsgdGhlIGFycmF5
IGlmIGFwcHJvcHJpYXRlLgogICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKQEAg
LTIyNSwxOSArMTYzLDYgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bAogI2VuZGlmCiB9CiAKLXZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBj
ZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQotewotICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotCi0gICAgaWYgKHRva2VuICE9
IEJ1dHRlcmZseUNvcHlUb2tlbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKGJ1
dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+Y29weUJ1dHRlcmZseSh2aXNpdG9yLCBidXR0
ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCkpOwotfQotCiB2
b2lkIEpTT2JqZWN0OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxsLCBIZWFwU25hcHNob3RCdWls
ZGVyJiBidWlsZGVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7CkBAIC03NzgsMTcgKzcwMywyMCBAQCB2b2lkIEpTT2JqZWN0Ojpub3RpZnlQ
cmVzZW5jZU9mSW5kZXhlZEFjCiAgICAgZ2xvYmFsT2JqZWN0KCktPmhhdmVBQmFkVGltZSh2bSk7
CiB9CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZShW
TSYgdm0sIHVuc2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVsZW1lbnRTaXplKQorQnV0dGVyZmx5KiBK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKFZNJiB2bSwgdW5zaWduZWQgbGVu
Z3RoKQogeworICAgIExPR0lUKCk7CiAgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRF
WCk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGluZ1R5cGUoKTsKICAgICBBU1NF
UlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRUeXBlKSk7CiAgICAg
QVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CiAgICAgQVNTRVJU
KCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOwotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHByb3BlcnR5
Q2FwYWNpdHksIGxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLCB2
bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBm
YWxzZSwgMCwKLSAgICAgICAgZWxlbWVudFNpemUgKiB2ZWN0b3JMZW5ndGgpOworICAgICAgICBt
X2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgcHJvcGVydHlDYXBhY2l0eSwg
ZmFsc2UsIDAsCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgp
OwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0
dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICByZXR1cm4gbmV3QnV0
dGVyZmx5OwpAQCAtNzk3LDcgKzcyNSw3IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxJbmRleGUKIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQo
Vk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9y
YWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgpOwog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVV
bmRlY2lkZWQpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJl
LCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHk7CkBAIC04MDYsNyArNzM0
LDkgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbFVuZGVjaQogQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIoVk0mIHZtLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3Jl
YXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVl
KCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxs
b2NhdGVJbnQzMik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1
cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0lu
dDMyKCk7CkBAIC04MTUsNyArNzQ1LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpj
cmVhdGVJbml0aQogQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxEb3Vi
bGUoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRT
dG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihkb3VibGUpKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAg
ICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZSk7
CkBAIC04MjYsNyArNzU2LDkgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYQogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91
cyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0
b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0t
OykKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5
VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gbmV3QnV0
dGVyZmx5LT5jb250aWd1b3VzKCk7CkBAIC04MzQsNiArNzY2LDcgQEAgQ29udGlndW91c0pTVmFs
dWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVh
dGVBcnJheVN0b3JhZ2UoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCkKIHsKKyAgICBMT0dJVCgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgSW5kZXhp
bmdUeXBlIG9sZFR5cGUgPSBpbmRleGluZ1R5cGUoKTsKQEAgLTg0OSw2ICs3ODIsOCBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJz
ZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAg
cmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IHZlY3Rvckxlbmd0
aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTg1NiwxMiArNzkxLDE4IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3Rv
cmEKIAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShW
TSYgdm0pCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgMCwgQkFTRV9WRUNU
T1JfTEVOKTsKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKAorICAgICAgICB2bSwgMCwg
QXJyYXlTdG9yYWdlOjpvcHRpbWFsVmVjdG9yTGVuZ3RoKDAsIHN0cnVjdHVyZSh2bSktPm91dE9m
TGluZUNhcGFjaXR5KCksIDApKTsKIH0KIAogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpj
b252ZXJ0VW5kZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRl
ZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3Bl
cnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5n
ZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiB9CkBAIC04ODEsNiArODIyLDExIEBAIENvbnRpZ3Vv
dXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWMKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09i
amVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJU
KGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisKICAgICBzZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBt
X2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOwogfQpAQCAtOTE3LDcgKzg2Myw5IEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKIAogICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0
Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIC8vIE5vIG5lZWQgdG8gY29w
eSBlbGVtZW50cy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkt
LTspCisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
SlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsK
ICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+
YnV0dGVyZmx5KCkpOwpAQCAtOTM4LDExICs4ODYsMTIgQEAgQ29udGlndW91c0RvdWJsZXMgSlNP
YmplY3Q6OmNvbnZlcnRJbnQzMgogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJl
bnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBj
dXJyZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CiAgICAgICAg
IEpTVmFsdWUgdiA9IGN1cnJlbnQtPmdldCgpOwotICAgICAgICBpZiAoIXYpIHsKKyAgICAgICAg
Ly8gTk9URTogU2luY2UgdGhpcyBtYXkgYmUgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHYg
Y291bGQgYmUgZ2FyYmFnZS4gSWYgaXQncyBnYXJiYWdlLAorICAgICAgICAvLyB0aGF0IG1lYW5z
IGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAgICAgIGlmICghdi5pc0ludDMyKCkp
IHsKICAgICAgICAgICAgICpjdXJyZW50QXNEb3VibGUgPSBQTmFOOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHYuaXNJbnQzMigpKTsKICAgICAgICAg
KmN1cnJlbnRBc0RvdWJsZSA9IHYuYXNJbnQzMigpOwogICAgIH0KICAgICAKQEAgLTk2NiwxMyAr
OTE1LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7
CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlT
dG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2
ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0g
ICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKHYpOworICAgICAgICBpZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0xMDE0LDEzICs5NjEsMTEgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0
b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0
Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKSB7
Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CisgICAgICAgIG5l
d1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShKU1Zh
bHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVlID09IHZhbHVl
KQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFu
c2l0aW9uKTsKQEAgLTEwNDEsMTMgKzk4NiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
b252ZXJ0Q29udGlndW91CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHku
Z2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNv
bnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZl
Y3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsr
KSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgaWYgKHYpCiAgICAgICAgICAg
ICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7
CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAt
MjM4MSw3ICsyMzI0LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bgogICAgICAgICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUodm0pLT5uZWVkc1Nsb3dQdXRJbmRl
eGluZygpKSB7CiAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBpbmRleGluZyB0eXBlIHRvIHRo
ZSBTbG93UHV0QXJyYXlTdG9yYWdlIGFuZCByZXRyeS4KLSAgICAgICAgICAgIGNyZWF0ZUFycmF5
U3RvcmFnZSh2bSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAg
ICAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3Ro
KDAsIDAsIDAsIGkgKyAxKSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0QnlJbmRleCh0aGlzLCBl
eGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjUy
Miw3ICsyNDY1LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwog
ICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVB
cnJheVN0b3JhZ2Uodm0sIDAsIDApKTsKICAgICAgICAgfQogICAgICAgICBpZiAoc3RydWN0dXJl
KHZtKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgewotICAgICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVu
Z3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBj
cmVhdGVBcnJheVN0b3JhZ2Uodm0sIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgMCwg
aSArIDEpKTsKICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldCh2bSwgdGhpcywg
dmFsdWUpOwogICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjQxLDcgKzI1ODQsOCBAQCB2b2lkIEpTT2JqZWN0
OjpwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHByb3BlcnR5TmFtZSwgZnVuY3Rpb24sIGF0dHJpYnV0ZXMpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3Vy
cmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJl
ZExlbmd0aCkKKy8vIE5PVEU6IFRoaXMgbWV0aG9kIGlzIGZvciBBcnJheVN0b3JhZ2UgdmVjdG9y
cy4KK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1
bnNpZ25lZCBpbmRleEJpYXMsIHVuc2lnbmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVk
IGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKGRl
c2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAKQEAgLTI2NjAsMjMg
KzI2MDQsMjUgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogCiAg
ICAgbGFzdEFycmF5U2l6ZSA9IHN0ZDo6bWluKGluY3JlYXNlZExlbmd0aCwgRklSU1RfVkVDVE9S
X0dST1cpOwogCi0gICAgcmV0dXJuIHN0ZDo6bWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCk7CisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rv
ckxlbmd0aCgKKyAgICAgICAgaW5kZXhCaWFzLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwKKyAgICAgICAgc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5l
d1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQogewotICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aDsKLSAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgdW5zaWduZWQgaW5kZXhCaWFz
ID0gMDsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSAwOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDA7CiAgICAgCiAgICAgaWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgp
KSkgeworICAgICAgICBpZiAoQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JO
dWxsKCkpCisgICAgICAgICAgICBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAg
ICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwog
ICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKLSAgICAgICAgbGVuZ3RoID0gMDsK
ICAgICB9CiAKLSAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVu
Z3RoLCBkZXNpcmVkTGVuZ3RoKTsKKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKGluZGV4
QmlhcywgdmVjdG9yTGVuZ3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgpOwogfQogCiB0ZW1wbGF0
ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZT4KQEAgLTI3MjksNiArMjY3NSw3IEBAIHVuc2ln
bmVkIEpTT2JqZWN0Ojpjb3VudEVsZW1lbnRzKCkKIAogYm9vbCBKU09iamVjdDo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgoVk0mIHZtLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CisgICAgTE9HSVQoKTsK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBp
bmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZy
b20gc3BhcnNlIHZhbHVlIG1hcAogICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0
byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50
bHkuCiAgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCkBAIC0y
NzM2LDYgKzI2ODMsMTQgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0m
IAogCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CiAgICAgCisg
ICAgdW5zaWduZWQgb3B0aW1hbFZlY3Rvckxlbmd0aCA9CisgICAgICAgIHN0b3JhZ2UtPm9wdGlt
YWxWZWN0b3JMZW5ndGgoc3RydWN0dXJlKHZtKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgIGlmIChvcHRpbWFsVmVjdG9yTGVuZ3RoID49IG5ld0xlbmd0aCkgeworICAgICAgICAvLyBU
aGUgY2VsbCB3YXMgYWxyZWFkeSBiaWcgZW5vdWdoIGZvciB0aGUgZGVzaXJlZCBsZW5ndGghCisg
ICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChvcHRpbWFsVmVjdG9yTGVuZ3RoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIGlmIChuZXdMZW5ndGggPj0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWAogICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3Rvcihu
ZXdMZW5ndGgsIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yNzU0LDYgKzI3MDksOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rv
ckxlbmd0aChWTSYgCiAgICAgICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVu
Z3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgICAgICBp
ZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVh
cigpOwogICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5n
dGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5n
U3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3
NjgsNiArMjcyNSw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAK
ICAgICAgICAgbmV3SW5kZXhCaWFzLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVj
dG9yTGVuZ3RoKSk7CiAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5n
dGg7ICsraSkKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uY2xlYXIoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JM
ZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CkBAIC0yNzc2LDMxICsyNzM1LDQ5IEBA
IGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKIAogYm9vbCBKU09iamVj
dDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBMT0dJ
VCgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAg
CiAgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgQVNTRVJUKGhhc0Nv
bnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8fCBo
YXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkp
OwogICAgIEFTU0VSVChsZW5ndGggPiBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAK
LSAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbigKLSAgICAgICAgbGVuZ3Ro
IDw8IDEsCi0gICAgICAgIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIHVuc2lnbmVk
IG9sZFZlY3Rvckxlbmd0aCA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwotICAgIGJ1dHRlcmZseSA9IGJ1dHRlcmZseS0+Z3Jvd0FycmF5
UmlnaHQoCi0gICAgICAgIHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCksIHRydWUsCi0gICAgICAgIG9sZFZlY3Rvckxlbmd0aCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSksCi0gICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpOwotICAgIGlmICghYnV0dGVyZmx5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOworICAgIHVuc2lnbmVkIG5l
d1ZlY3Rvckxlbmd0aDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0
cnVjdHVyZSh2bSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBvcHRpbWFsT2xkTGVuZ3Ro
ID0KKyAgICAgICAgQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9w
ZXJ0eUNhcGFjaXR5LCBvbGRWZWN0b3JMZW5ndGgpOworICAgIGlmIChvcHRpbWFsT2xkTGVuZ3Ro
ID49IGxlbmd0aCkgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHNvbWVvbmUg
ZWxzZSBzZWxlY3RlZCBhIHZlY3RvciBsZW5ndGggdGhhdCBjYXVzZWQgaW50ZXJuYWwKKyAgICAg
ICAgLy8gZnJhZ21lbnRhdGlvbi4gSWYgd2UgZGlkIG91ciBqb2JzIHJpZ2h0LCB0aGlzIHdvdWxk
IG5ldmVyIGhhcHBlbi4gQnV0IEkgYmV0IHdlIHdpbGwgbWVzcworICAgICAgICAvLyB0aGlzIHVw
LCBzbyB0aGlzIGRlZmVuc2Ugc2hvdWxkIHN0YXkuCisgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCA9
IG9wdGltYWxPbGRMZW5ndGg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbmV3VmVjdG9yTGVuZ3Ro
ID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aCgKKyAgICAgICAgICAg
IHByb3BlcnR5Q2FwYWNpdHksIHN0ZDo6bWluKGxlbmd0aCA8PCAxLCBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKSk7CisgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAg
YnV0dGVyZmx5ID0gYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAgICAgICAgIHZtLCB0
aGlzLCBzdHJ1Y3R1cmUsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsCisgICAgICAgICAgICBvbGRW
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbmV3VmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIGlmICghYnV0dGVy
Zmx5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2J1dHRlcmZseS5zZXQo
dm0sIHRoaXMsIGJ1dHRlcmZseSk7CisgICAgfQogCiAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKIAogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBl
KCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5l
d1ZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKCkuZGF0YSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgfQorCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTI4MjEsNiArMjc5OCw3IEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxs
b2NhdGVBbmRTaHJpbmtCdXR0ZXIKIAogQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGlu
ZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCiB7CisgICAg
TE9HSVQoKTsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCiAgICAgLy8gSXQncyBp
bXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3Ig
dGhlIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgIkFy
Z0xpc3QuaCIKICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQXJyYXlT
dG9yYWdlLmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkJ1dHRl
cmZseS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgog
I2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIK
ICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJEZWZlckdDLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgpAQCAtMTAzLDcgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdT
dG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2VsbCosIEhlYXBTbmFwc2hvdEJ1aWxk
ZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0Kik7CkBAIC00MTQsNiArNDEzLDggQEAgcHVibGljOgogICAgICAgICBpbml0
aWFsaXplSW5kZXgodm0sIGksIHYsIGluZGV4aW5nVHlwZSgpKTsKICAgICB9CiAKKyAgICAvLyBO
T1RFOiBDbGllbnRzIG9mIHRoaXMgbWV0aG9kIG1heSBjYWxsIGl0IG1vcmUgdGhhbiBvbmNlIGZv
ciBhbnkgaW5kZXgsIGFuZCB0aGlzIGlzIHN1cHBvc2VkCisgICAgLy8gdG8gd29yay4KICAgICB2
b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CkBAIC02ODYsOCArNjg3LDYgQEAgcHVibGljOgogICAgICAg
ICAKICAgICB2b2lkIHNldFN0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgc2V0
U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7Ci0gICAg
dm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiwgdW5z
aWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5k
UmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYsIFN0cnVjdHVyZSopOwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJik7CiAKQEAgLTc5Nyw3
ICs3OTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0
ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0
b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29w
eVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOwogCiAgICAgLy8gQ2Fs
bCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQg
aGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBA
IC05MDgsNyArOTA2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGlzT2JqZWN0KCk7CiAgICAgdm9p
ZCBpc1N0cmluZygpOwogICAgICAgICAKLSAgICBCdXR0ZXJmbHkqIGNyZWF0ZUluaXRpYWxJbmRl
eGVkU3RvcmFnZShWTSYsIHVuc2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAg
ICBCdXR0ZXJmbHkqIGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZShWTSYsIHVuc2lnbmVkIGxl
bmd0aCk7CiAgICAgICAgIAogICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoVk0mLCBBcnJheVN0b3JhZ2UqKTsK
ICAgICAgICAgCkBAIC05MzIsNyArOTMwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVj
dEluZGV4TW9kZSwgQXJyYXlTdG9yYWdlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9k
ZSk7CiAgICAgICAgIAotICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBj
dXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNp
cmVkTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgaW5k
ZXhCaWFzLCB1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVu
Z3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JM
ZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAKICAgICBBcnJheVN0b3JhZ2UqIGNvbnN0
cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMoVk0mLCB1bnNp
Z25lZCBuZWVkZWRMZW5ndGgpOwpAQCAtOTQ5LDcgKzk0Nyw3IEBAIHByaXZhdGU6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KFZNJik7
CiAKIHByb3RlY3RlZDoKLSAgICBDb3B5QmFycmllcjxCdXR0ZXJmbHk+IG1fYnV0dGVyZmx5Owor
ICAgIEF1eGlsaWFyeUJhcnJpZXI8QnV0dGVyZmx5Kj4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9wYWRkaW5nOwpAQCAtMTQ4Nyw4
ICsxNDg1LDE2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAg
ICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0
b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgbmV3U3RydWN0dXJlKTsKLQorICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKKyAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbmV3U3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOworICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdDYXBhY2l0eSk7
CisgICAgaWYgKG9sZENhcGFjaXR5ID09IG5ld0NhcGFjaXR5KQorICAgICAgICBzZXRTdHJ1Y3R1
cmUodm0sIG5ld1N0cnVjdHVyZSk7CisgICAgZWxzZSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBh
Y2l0eSk7CisgICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJl
LCBuZXdCdXR0ZXJmbHkpOworICAgIH0KICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUp
OwogICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICBpZiAoYXR0cmli
dXRlcyAmIFJlYWRPbmx5KQpAQCAtMTQ5NiwyNyArMTUwMiw2IEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnko
Vk0mIHZtLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCi17
Ci0gICAgQVNTRVJUKG9sZENhcGFjaXR5IDw9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7Ci0gICAgCi0gICAgaWYgKG9sZENhcGFjaXR5ID09IG5ld1N0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
IAotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCi0g
ICAgICAgIHZtLCBvbGRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0
dGVyZmx5KTsKLX0KLQotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxs
b2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mIHZtLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkK
LXsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KAotICAg
ICAgICB2bSwgc3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U3RydWN0dXJl
KTsKLX0KLQogaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eShWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzkyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4
LCAyMDA5LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LCAyMDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAo
ZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVm
IEpTT2JqZWN0SW5saW5lc19oCiAjZGVmaW5lIEpTT2JqZWN0SW5saW5lc19oCiAKKyNpbmNsdWRl
ICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMTIgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUg
IkVycm9yLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0Nl
bGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvbWlz
ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiTWljcm90YXNrLmgiCi0jaW5jbHVkZSAiU2xvdFZp
c2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwxMyArMjksMTEgQEAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRl
ICJFcnJvci5oIgogI2luY2x1ZGUgIkpTQ0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZS5oIgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEz
ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5oIgogCi0jaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJJ
dGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEyICsyNiw5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogCi0jaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlu
bGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAkocmV2aXNpb24g
MjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDcgQEAKICNpbmNsdWRlICJKU1N0cmlu
Z0l0ZXJhdG9yLmgiCiAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJKU0NK
U1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKLSNpbmNsdWRlICJT
dHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJl
Z2lzdHJ5S2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsOSArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
VGVtcGxhdGVSZWdpc3RyeUtleS5oIgogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIK
LSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1l
cy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgot
I2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMCBAQAogI2luY2x1
ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0
b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJNYXBQcm90b3R5
cGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICszMSwxMSBAQAogI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgotI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1
ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlSW5saW5lcy5oIgogCiAjaW5jbHVkZSAiTWFwUHJvdG90eXBlLmx1dC5oIgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDM5MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Miw2ICsxODIsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsK
ICAgICB2KGJvb2wsIHRlc3RUaGVGVEwsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisg
ICAgdihib29sLCByZXNldEZyZWVDZWxsc0JhZGx5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihib29sLCBlYWdlcmx5VXBkYXRlVG9wQ2FsbEZyYW1lLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlT1NSRW50cnlUb0RGRywgdHJ1ZSwgTm9y
bWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDggKzI4LDcgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSWRlbnRp
ZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJQcm94eU9iamVjdC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3
IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxNiArMzQsMTkgQEAgc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IFJlZ0V4cE1hdGNoZQog
CiBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRj
aGVzQXJyYXkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKIHsKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RP
Ul9MRU4sIGluaXRpYWxMZW5ndGgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IGluaXRp
YWxMZW5ndGg7CiAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksICZ0ZW1wKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgdm9pZCogdGVtcCA9
IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYgKCF0ZW1wKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJh
c2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBidXR0ZXJm
bHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1dHRlcmZseS0+c2V0UHVi
bGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGlu
aXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uY2xlYXIoKTsKIAogICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRo
QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiB9CkBAIC02Nyw0MCArNzAsNTQg
QEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaAogICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBoYW5kbGUgYXJyYXkgYWxsb2NhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseS4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ0CiAg
ICAgCisgICAgYXV0byBzZXRQcm9wZXJ0aWVzID0gWyZdICgpIHsKKyAgICAgICAgYXJyYXktPnB1
dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1i
ZXIocmVzdWx0LnN0YXJ0KSk7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1h
dGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKKyAgICB9OworICAgIAorICAg
IHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpOworICAg
IAogICAgIGlmIChVTkxJS0VMWShnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSkpIHsK
ICAgICAgICAgYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9i
YWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBh
dHRlcm5zKCkgKyAxKTsKICAgICAgICAgCisgICAgICAgIHNldFByb3BlcnRpZXMoKTsKKyAgICAg
ICAgCisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzVW5kZWZpbmVkKCkp
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0
ZXJuczsgKytpKQorICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNV
bmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgdGhlIG9iamVjdCBpcyBzYWZl
IHRvIHNjYW4gYnkgR0MuCisgICAgICAgIAogICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4
KHZtLCAwLCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCByZXN1bHQuc3RhcnQsIHJl
c3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpKTsKICAgICAgICAgCi0gICAgICAgIGlmICh1bnNpZ25l
ZCBudW1TdWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOwotICAgICAg
ICAgICAgICAgIGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5p
dGlhbGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2
ZWQodm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0
KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5p
dGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7CisgICAg
ICAgICAgICBpbnQgc3RhcnQgPSBzdWJwYXR0ZXJuUmVzdWx0c1syICogaV07CisgICAgICAgICAg
ICBpZiAoc3RhcnQgPj0gMCkKKyAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4
KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0
LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBhcnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRS
ZWdFeHBNYXRjaGVzQXJyYXkodm0sIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVChhcnJheSk7CiAgICAgICAgIAorICAgICAgICBzZXRQcm9wZXJ0aWVzKCk7CisgICAg
ICAgIAorICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1VuZGVmaW5lZCgp
LCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKKyAgICAgICAgICAgIGFycmF5LT5pbml0
aWFsaXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwor
ICAgICAgICAKKyAgICAgICAgLy8gTm93IHRoZSBvYmplY3QgaXMgc2FmZSB0byBzY2FuIGJ5IEdD
LgorCiAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzU3Vic3RyaW5nT2ZS
ZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFy
dCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICAKLSAgICAgICAgaWYgKHVuc2lnbmVk
IG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpKSB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgc3RhcnQgPSBzdWJwYXR0ZXJuUmVzdWx0c1syICogaV07Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0
aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZl
ZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQp
LCBBcnJheVdpdGhDb250aWd1b3VzKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCksIEFy
cmF5V2l0aENvbnRpZ3VvdXMpOwotICAgICAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKKyAgICAgICAgICAgIGludCBzdGFy
dCA9IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgIGlmIChzdGFydCA+PSAw
KQorICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0
cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0
ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNB
cnJheUluZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKHJlc3VsdC5zdGFydCkpOwotICAgIGFy
cmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQs
IGlucHV0KTsKLQogICAgIHJldHVybiBhcnJheTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZS5oIgogI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNj
b3BlLmgiCisjaW5jbHVkZSAiSGVhcFV0aWwuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUu
aCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCkBAIC0zOTIsNyArMzkzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52
ZXJpZmllZAogICAgICAgICAgICAgSlNWYWx1ZSBjYWxsZWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZENhbGxlZSk7CiAgICAgICAgICAgICBTdGFja0ZyYW1lJiBzdGFja0ZyYW1lID0gc3RhY2tU
cmFjZS5mcmFtZXMubGFzdCgpOwogICAgICAgICAgICAgYm9vbCBhbHJlYWR5SGFzRXhlY3V0YWJs
ZSA9ICEhc3RhY2tGcmFtZS5leGVjdXRhYmxlOwotICAgICAgICAgICAgaWYgKCFIZWFwOjppc1Zh
bHVlR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgY2FsbGVlKSkgeworICAgICAgICAg
ICAgaWYgKCFIZWFwVXRpbDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQs
IGNhbGxlZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIYXNFeGVjdXRhYmxlKQog
ICAgICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VW5r
bm93bjsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MzcsNyArNDM4LDcgQEAgdm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNQ
b2ludGVyR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgZXhlY3V0YWJsZSkpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcFV0aWw6OmlzUG9pbnRlckdDT2JqZWN0SlNDZWxs
KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGV4ZWN1dGFibGUpKTsKICAgICAgICAgICAgIHN0YWNr
RnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpFeGVjdXRhYmxlOwogICAgICAgICAgICAgc3Rh
Y2tGcmFtZS5leGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICAgICAgICAgIG1fbGl2ZUNlbGxQ
b2ludGVycy5hZGQoZXhlY3V0YWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEzICsyOSwxMSBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNTZXQuaCIKICNpbmNsdWRlICJNYXBEYXRhLmgiCiAjaW5jbHVkZSAiU2V0UHJvdG90eXBlLmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTEgQEAKICNpbmNsdWRlICJF
eGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAi
SXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNp
bmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJM
b29rdXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIlNldFByb3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJ
KHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBs
YXRlUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsOSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnkuaCIKIAotI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtNYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCwxMSArMjgsOSBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRl
ICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtNYXAuaCIKLSNpbmNsdWRl
ICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcFByb3RvdHlwZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtT
ZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDExICsyOCw5IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkl0
ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha1NldC5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWFrU2V0UHJvdG90eXBlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJh
eS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanMJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1zdG9y
YWdlLWFycmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisvL0Ag
cnVuRGVmYXVsdAordmFyIHggPSBbMi41LCAxLjVdOworeC5sZW5ndGggPSAxMDAwMDAwMDAwOwor
eC5sZW5ndGggPSAyOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAzLjUpOworaWYg
KHgudG9TdHJpbmcoKSAhPSAiMy41LDIuNSwxLjUiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlmdC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlmdC5q
cwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Nv
bnRpZ3VvdXMtYXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAK
Ky8vQCBydW5EZWZhdWx0Cit2YXIgeCA9IFsnYicsICdhJ107CitBcnJheS5wcm90b3R5cGUudW5z
aGlmdC5jYWxsKHgsICdjJyk7CitpZiAoeC50b1N0cmluZygpICE9ICJjLGIsYSIpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZG91YmxlLWFycmF5LXVuc2hpZnQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXkt
dW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2RvdWJsZS1hcnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NiBAQAorLy9AIHJ1bkRlZmF1bHQKK3ZhciB4ID0gWzIuNSwgMS41XTsKK0FycmF5LnByb3RvdHlw
ZS51bnNoaWZ0LmNhbGwoeCwgMy41KTsKK2lmICh4LnRvU3RyaW5nKCkgIT0gIjMuNSwyLjUsMS41
IikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNjcmliZSh4KTsKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbnQzMi1hcnJheS11bnNoaWZ0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW50
MzItYXJyYXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2IEBACisvL0AgcnVuRGVmYXVsdAordmFyIHggPSBbMiwgMV07CitBcnJheS5wcm90
b3R5cGUudW5zaGlmdC5jYWxsKHgsIDMpOworaWYgKHgudG9TdHJpbmcoKSAhPSAiMywyLDEiKQor
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxp
YXJ5IE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhlIEpTQyBHQyBuZWVkcyBh
IHRyeUZhc3RBbGlnbmVkTWFsbG9jKCksIGFuZCB0aGlzIGV4cG9zZXMgc3VjaCBhIGZ1bmN0aW9u
LgorCisgICAgICAgICogd3RmL0Zhc3RNYWxsb2MuY3BwOgorICAgICAgICAoV1RGOjpmYXN0QWxp
Z25lZE1hbGxvYyk6CisgICAgICAgIChXVEY6OnRyeUZhc3RBbGlnbmVkTWFsbG9jKToKKyAgICAg
ICAgKFdURjo6ZmFzdEFsaWduZWRGcmVlKToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5oOgor
CiAyMDE2LTA3LTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBN
YWtlIFN0cmluZ1ZpZXcgY2FwYWJsZSBvZiBiZWluZyBwYXNzZWQgb3IgcmV0dXJuZWQgaW4gb25s
eSAyIHJlZ2lzdGVycy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAyMDM5MjAp
CisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDYgQEAKLS8vIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDExLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
NSwgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNS0yMDA5LCAyMDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CkBAIC05Nyw2ICs5
NiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0
dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOwogfQogCit2b2lkKiB0cnlGYXN0
QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgcmV0
dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOworfQorCiB2b2lkIGZhc3RBbGln
bmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBfYWxpZ25lZF9mcmVlKHApOwpAQCAtMTExLDYgKzEx
NSwxMyBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50CiAgICAgcmV0
dXJuIHA7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCBzaXplKSAKK3sKKyAgICB2b2lkKiBwID0gbnVsbHB0cjsKKyAgICBwb3NpeF9tZW1h
bGlnbigmcCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gcDsKK30KKwogdm9pZCBmYXN0
QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgZnJlZShwKTsKQEAgLTIzMSw2ICsyNDIsMTEg
QEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBi
bWFsbG9jOjphcGk6Om1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKK3ZvaWQqIHRyeUZh
c3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICBy
ZXR1cm4gYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworfQorCiB2
b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBibWFsbG9jOjphcGk6OmZyZWUo
cCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvV1RG
L3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
IENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Myw2ICs1Myw3
IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RGcmVlKHZvaWQqKTsKIAogLy8gQWxsb2Nh
dGlvbnMgZnJvbSBmYXN0QWxpZ25lZE1hbGxvYygpIG11c3QgYmUgZnJlZWQgdXNpbmcgZmFzdEFs
aWduZWRGcmVlKCkuCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Mo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlG
YXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqKTsKIAogV1RGX0VYUE9SVF9QUklWQVRF
IHNpemVfdCBmYXN0TWFsbG9jU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xMDcsNiArMTA4LDcgQEAg
dXNpbmcgV1RGOjpmYXN0TWFsbG9jU2l6ZTsKIHVzaW5nIFdURjo6ZmFzdFJlYWxsb2M7CiB1c2lu
ZyBXVEY6OmZhc3RTdHJEdXA7CiB1c2luZyBXVEY6OmZhc3RaZXJvZWRNYWxsb2M7Cit1c2luZyBX
VEY6OnRyeUZhc3RBbGlnbmVkTWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0Q2FsbG9jOwogdXNp
bmcgV1RGOjp0cnlGYXN0TWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0WmVyb2VkTWFsbG9jOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9u
IDIwMzkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRv
cklubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWtJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0l0ZXJhdG9yT3Bl
cmF0aW9ucy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgpJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blBhcnNlci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMSArMzUsOSBAQAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCiAjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lv
bnNEZWJ1Z2dpbmcuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVySW5saW5l
cy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTR2xvYmFsT2JqZWN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPTk9iamVj
dC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cnVjdHVyZUlubGluZXMuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
MjAzOTI3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTYtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxsb2NhdGVkIGluIEF1eGlsaWFyeSBN
YXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE5lZWQgdG8gI2luY2x1ZGUgbW9yZSB0
aGluZ3Mgbm93LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBP
YmplY3QuY3BwOgorCiAyMDE2LTA3LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIENyYXNoIHdpdGggYW4gSW52YWxpZCBXZWIgUHJvY2VzcyBJUEMgTWVzc2Fn
ZSBJRDogV2ViUGFnZVByb3h5LkF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxi
YWNrCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJOUEpTT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiTlBSdW50aW1lT2JqZWN0TWFwLmgiCiAjaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FcnJvci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0lkZW50aWZpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxP
YmplY3QuaD4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFs
bG9jL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA3LTI5
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQnV0dGVyZmxpZXMg
c2hvdWxkIGJlIGFsbG9jYXRlZCBpbiBBdXhpbGlhcnkgTWFya2VkU3BhY2UgaW5zdGVhZCBvZiBD
b3BpZWRTcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYwMTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBUaGUgSlNDIEdDIG5lZWRzIHRvIGJlIGFibGUgdG8gdHJ5TWVtYWxpZ24sIGFu
ZCB0aGlzIHJlZmFjdG9ycyB0aGUgY29kZSB0byBleHBvc2Ugc3VjaCBhCisgICAgICAgIGZ1bmN0
aW9uLgorCisgICAgICAgICogYm1hbGxvYy9BbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxv
Yzo6QWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKToK
KyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6cmVhbGxvY2F0ZSk6CisgICAgICAgICogYm1h
bGxvYy9BbGxvY2F0b3IuaDoKKyAgICAgICAgKiBibWFsbG9jL0NhY2hlLmg6CisgICAgICAgIChi
bWFsbG9jOjpDYWNoZTo6YWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeUFs
bG9jYXRlKToKKyAgICAgICAgKiBibWFsbG9jL2JtYWxsb2MuaDoKKyAgICAgICAgKGJtYWxsb2M6
OmFwaTo6bWFsbG9jKToKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24pOgorICAg
ICAgICAoYm1hbGxvYzo6YXBpOjptZW1hbGlnbik6CisKIDIwMTYtMDctMTMgIEVucmljYSBDYXN1
Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgc3VwcG9ydGVkIHBsYXRm
b3JtcyBpbiB4Y2NvbmZpZyBmaWxlcyB0byBtYXRjaCB0aGUgc2RrIG5hbWVzLgpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYg
KzY0LDE4IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNpemUKIAogdm9p
ZCogQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsK
KyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gYWxsb2NhdGVJbXBs
KGFsaWdubWVudCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIGJvb2wg
Y3Jhc2hPbkZhaWx1cmUgPSBmYWxzZTsKKyAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVu
dCwgc2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRl
SW1wbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZSkK
K3sKICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKIAogICAgIGlmICghbV9p
c0JtYWxsb2NFbmFibGVkKSB7CkBAIC04MCw3ICs5MiwxMCBAQCB2b2lkKiBBbGxvY2F0b3I6OmFs
bG9jYXRlKHNpemVfdCBhbGlnbm1lCiAgICAgICAgIHJldHVybiBhbGxvY2F0ZShyb3VuZFVwVG9N
dWx0aXBsZU9mKGFsaWdubWVudCwgc2l6ZSkpOwogCiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgIHJldHVybiBQZXJQ
cm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVu
dCwgc2l6ZSk7CisgICAgSGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNl
KCk7CisgICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAgICByZXR1cm4gaGVhcC0+YWxsb2Nh
dGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBoZWFwLT50cnlBbGxv
Y2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKIHZvaWQqIEFsbG9jYXRvcjo6
cmVhbGxvY2F0ZSh2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MywxMiArNDMsMTUgQEAgcHVibGlj
OgogCiAgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZShz
aXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7
CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lk
KiByZWFsbG9jYXRlKHZvaWQqLCBzaXplX3QpOwogCiAgICAgdm9pZCBzY2F2ZW5nZSgpOwogCiBw
cml2YXRlOgorICAgIHZvaWQqIGFsbG9jYXRlSW1wbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qs
IGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIAogICAgIGJvb2wgYWxsb2NhdGVGYXN0Q2FzZShz
aXplX3QsIHZvaWQqJik7CiAgICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwogICAg
IApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0MSw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAgIHN0YXRp
YyB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShz
aXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCop
OwogICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqLCBzaXplX3QpOwpAQCAtNzksNiAr
ODAsMTQgQEAgaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZQogICAgIHJl
dHVybiBjYWNoZS0+YWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6ZSk7CiB9CiAKK2lubGluZSB2b2lk
KiBDYWNoZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7Cisg
ICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hlPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBp
ZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShhbGln
bm1lbnQsIHNpemUpOworICAgIHJldHVybiBjYWNoZS0+YWxsb2NhdG9yKCkudHJ5QWxsb2NhdGUo
YWxpZ25tZW50LCBzaXplKTsKK30KKwogaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0ZShzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBDYWNoZSogY2FjaGUgPSBQZXJUaHJl
YWQ8Q2FjaGU+OjpnZXRGYXN0Q2FzZSgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9i
bWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJ
KHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDEyIEBAIGlubGluZSB2b2lkKiBtYWxsb2Moc2l6
ZV90IHNpemUpCiAgICAgcmV0dXJuIENhY2hlOjphbGxvY2F0ZShzaXplKTsKIH0KIAorLy8gUmV0
dXJucyBudWxsIG9uIGZhaWx1cmUuCitpbmxpbmUgdm9pZCogdHJ5TWVtYWxpZ24oc2l6ZV90IGFs
aWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIENhY2hlOjp0cnlBbGxvY2F0ZShh
bGlnbm1lbnQsIHNpemUpOworfQorCiAvLyBDcmFzaGVzIG9uIGZhaWx1cmUuCiBpbmxpbmUgdm9p
ZCogbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDM5
NTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAor
MjAxNi0wNy0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEJ1
dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNlIGlu
c3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgYWRkcyBhIG5ldyB2YWxpZGF0aW9uIGZsYWcgdG8gdGhlIFZNLCB3
aGljaCBpcyB2ZXJ5IGNoZWFwIGFuZCBzaG91bGRuJ3QgZXZlciBicmVhaworICAgICAgICBhbnl0
aGluZy4gVGhpcyBlbmFibGVzIHRoZSBmbGFnIGZvciBhbGwgbm8tY2ppdCB0ZXN0cywgc2luY2Ug
dGhvc2UgYXJlIHRoZSBvbmVzIHdoZXJlIHdlIGFyZQorICAgICAgICBhbHJlYWR5IGhhcHB5IHRv
IHBheSBzb21lIHByaWNlIGZvciBhbHRlcmVyZWQgY292ZXJhZ2UuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAyMDE2LTA3LTMwICBNYW51ZWwgUmVnbyBDYXNh
c25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IGFkZCBteXNl
bGYgdG8gdGhlIHJldmlld2VycyBsaXN0LgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzCShyZXZpc2lvbiAyMDM5MjApCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgJG51bVBhc3NlcyA9IDAKICMg
V2UgZm9yY2UgYWxsIHRlc3RzIHRvIHVzZSBhIHNtYWxsZXIgKDEuNU0pIHN0YWNrIHNvIHRoYXQg
c3RhY2sgb3ZlcmZsb3cgdGVzdHMgY2FuIHJ1biBmYXN0ZXIuCiBCQVNFX09QVElPTlMgPSBbIi0t
dXNlRlRMSklUPWZhbHNlIiwgIi0tdXNlRnVuY3Rpb25Eb3RBcmd1bWVudHM9dHJ1ZSIsICItLW1h
eFBlclRocmVhZFN0YWNrVXNhZ2U9MTU3Mjg2NCJdCiBFQUdFUl9PUFRJT05TID0gWyItLXRocmVz
aG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIsICIt
LXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA9MjAiLCAiLS10aHJlc2hvbGRGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcD0yMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplU29vbj0yMCIs
ICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MjAiLCAiLS10aHJlc2hvbGRG
b3JGVExPcHRpbWl6ZVNvb249MjAiLCAiLS1tYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0
aD0xNTAwMDAiXQotTk9fQ0pJVF9PUFRJT05TID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2Ui
LCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMDAiXQorTk9fQ0pJVF9PUFRJT05TID0g
WyItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1V
cD0xMDAiLCAiLS1yZXNldEZyZWVDZWxsc0JhZGx5PXRydWUiXQogRlRMX09QVElPTlMgPSBbIi0t
dXNlRlRMSklUPXRydWUiXQogCiAkcnVubGlzdCA9IFtdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>285168</attachid>
            <date>2016-08-02 17:28:57 -0700</date>
            <delta_ts>2016-08-03 11:29:19 -0700</delta_ts>
            <desc>performance</desc>
            <filename>report.txt</filename>
            <type>text/plain</type>
            <size>83817</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">QmVuY2htYXJrIHJlcG9ydCBmb3IgU3VuU3BpZGVyLCBMb25nU3BpZGVyLCBWOFNwaWRlciwgT2N0
YW5lLCBLcmFrZW4sIEpTUmVncmVzcywgQXNtQmVuY2gsIGFuZCBDb21wcmVzc2lvbkJlbmNoIG9u
IG11cmRlcmZhY2UgKE1hY0Jvb2tQcm8xMSw1KS4KClZNcyB0ZXN0ZWQ6CiJUaXBPZlRyZWUiIGF0
IC9Wb2x1bWVzL0RhdGEvc2Vjb25kYXJ5L09wZW5Tb3VyY2UvV2ViS2l0QnVpbGQvUmVsZWFzZS9q
c2MgKHIyMDM5MjApCiJBdXhCdXR0ZXJmbGllcyIgYXQgL1ZvbHVtZXMvRGF0YS9wcmltYXJ5L09w
ZW5Tb3VyY2UvV2ViS2l0QnVpbGQvUmVsZWFzZS9qc2MgKHIyMDM5MjApCgpDb2xsZWN0ZWQgNiBz
YW1wbGVzIHBlciBiZW5jaG1hcmsvVk0sIHdpdGggNiBWTSBpbnZvY2F0aW9ucyBwZXIgYmVuY2ht
YXJrLiBFbWl0dGVkIGEgY2FsbCB0byBnYygpIGJldHdlZW4gc2FtcGxlIG1lYXN1cmVtZW50cy4K
VXNlZCAxIGJlbmNobWFyayBpdGVyYXRpb24gcGVyIFZNIGludm9jYXRpb24gZm9yIHdhcm0tdXAu
IFVzZWQgdGhlIGpzYy1zcGVjaWZpYyBwcmVjaXNlVGltZSgpIGZ1bmN0aW9uIHRvIGdldCBtaWNy
b3NlY29uZC1sZXZlbAp0aW1pbmcuIFJlcG9ydGluZyBiZW5jaG1hcmsgZXhlY3V0aW9uIHRpbWVz
IHdpdGggOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGluIG1pbGxpc2Vjb25kcy4KCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwT2ZUcmVl
ICAgICAgICAgICAgICAgQXV4QnV0dGVyZmxpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgClN1blNwaWRlcjoKICAgM2QtY3ViZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNC43MDU1Ky0wLjM5MzMgICAgID8gICAgICA1LjA1OTQrLTAuMDgzNSAg
ICAgICAgPyBtaWdodCBiZSAxLjA3NTJ4IHNsb3dlcgogICAzZC1tb3JwaCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ljg3MzIrLTAuMzg0NSAgICAgICAgICAgIDQu
ODAxMCstMC40NTM4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE1MHggZmFzdGVyCiAgIDNkLXJheXRy
YWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNzY2NystMC40MzEx
ICAgICAgICAgICAgNC42NTQ4Ky0wLjE0MzEgICAgICAgICAgbWlnaHQgYmUgMS4wMjQweCBmYXN0
ZXIKICAgYWNjZXNzLWJpbmFyeS10cmVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Mi4wMjg2Ky0wLjQ2NzYgICAgICAgICAgICAyLjAwMTErLTAuNDA1NiAgICAgICAgICBtaWdodCBi
ZSAxLjAxMzd4IGZhc3RlcgogICBhY2Nlc3MtZmFubmt1Y2ggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA1LjIyNjArLTAuNjMyNiAgICAgICAgICAgIDQuODk1OCstMC4yOTQxICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDY3NXggZmFzdGVyCiAgIGFjY2Vzcy1uYm9keSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMzU1NystMC4zNDY1ICAgICAgICAgICAgMi4y
MjExKy0wLjA1MTAgICAgICAgICAgbWlnaHQgYmUgMS4wNjA2eCBmYXN0ZXIKICAgYWNjZXNzLW5z
aWV2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi45Mzc0Ky0wLjI5NDcg
ICAgICAgICAgICAyLjgyOTQrLTAuMTI5OSAgICAgICAgICBtaWdodCBiZSAxLjAzODJ4IGZhc3Rl
cgogICBiaXRvcHMtM2JpdC1iaXRzLWluLWJ5dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAx
LjAxMDQrLTAuMDIzOCAgICAgPyAgICAgIDEuMDQ0OCstMC4wNDE2ICAgICAgICA/IG1pZ2h0IGJl
IDEuMDM0MXggc2xvd2VyCiAgIGJpdG9wcy1iaXRzLWluLWJ5dGUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDIuNDk4MistMC4xMjYwICAgICAgICAgICAgMi40MzM2Ky0wLjAzODYgICAg
ICAgICAgbWlnaHQgYmUgMS4wMjY1eCBmYXN0ZXIKICAgYml0b3BzLWJpdHdpc2UtYW5kICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMS44NjEyKy0wLjAzMDUgICAgID8gICAgICAxLjkx
MDErLTAuMTA1OCAgICAgICAgPyBtaWdodCBiZSAxLjAyNjJ4IHNsb3dlcgogICBiaXRvcHMtbnNp
ZXZlLWJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjg4NjkrLTAuMDI1MSAg
ICAgPyAgICAgIDMuMDg0NSstMC41NjY3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDY4NHggc2xvd2Vy
CiAgIGNvbnRyb2xmbG93LXJlY3Vyc2l2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIu
MjAwMCstMC4wNDQ1ICAgICA/ICAgICAgMi4yMDkwKy0wLjAzOTcgICAgICAgID8KICAgY3J5cHRv
LWFlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4yMTQxKy0wLjA5
MjkgICAgID8gICAgICA0LjM4MzUrLTAuMDg0NiAgICAgICAgPyBtaWdodCBiZSAxLjA0MDJ4IHNs
b3dlcgogICBjcnlwdG8tbWQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyLjY0MTYrLTAuMjY2NiAgICAgICAgICAgIDIuNTMwMystMC4wNjU4ICAgICAgICAgIG1pZ2h0
IGJlIDEuMDQ0MHggZmFzdGVyCiAgIGNyeXB0by1zaGExICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDIuNTc0MCstMC4wNDY2ICAgICA/ICAgICAgMi44ODIxKy0wLjU4MTEg
ICAgICAgID8gbWlnaHQgYmUgMS4xMTk3eCBzbG93ZXIKICAgZGF0ZS1mb3JtYXQtdG9mdGUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi41Mzk4Ky0wLjY1ODIgICAgID8gICAgICA2
LjU5NDArLTAuNDA3NCAgICAgICAgPwogICBkYXRlLWZvcm1hdC14cGFyYiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA0LjYyNzYrLTAuMjc5MCAgICAgICAgICAgIDQuNTE4NSstMC4y
NjY0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI0MnggZmFzdGVyCiAgIG1hdGgtY29yZGljICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNTY4MistMC4xMTI0ICAgICA/ICAg
ICAgMi44NDgxKy0wLjcyNjIgICAgICAgID8gbWlnaHQgYmUgMS4xMDkweCBzbG93ZXIKICAgbWF0
aC1wYXJ0aWFsLXN1bXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy45MzIxKy0w
LjQ0ODYgICAgICAgICAgICAzLjc3NzYrLTAuMTAwMiAgICAgICAgICBtaWdodCBiZSAxLjA0MDl4
IGZhc3RlcgogICBtYXRoLXNwZWN0cmFsLW5vcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxLjg4MzcrLTAuMDQ1MiAgICAgPyAgICAgIDEuOTc2NistMC4yNDQ5ICAgICAgICA/IG1p
Z2h0IGJlIDEuMDQ5M3ggc2xvd2VyCiAgIHJlZ2V4cC1kbmEgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDYuMzkyNCstMC40NzY0ICAgICAgICAgICAgNi4wNDAzKy0wLjE2
MTggICAgICAgICAgbWlnaHQgYmUgMS4wNTgzeCBmYXN0ZXIKICAgc3RyaW5nLWJhc2U2NCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC40MjE4Ky0wLjIxOTYgICAgID8gICAg
ICA0LjQ1ODgrLTAuMzU1MSAgICAgICAgPwogICBzdHJpbmctZmFzdGEgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA1LjMxNDgrLTAuNDM2MCAgICAgPyAgICAgIDUuMzQxNSst
MC4zODE1ICAgICAgICA/CiAgIHN0cmluZy10YWdjbG91ZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDguMjYyMystMC41MDQ3ICAgICAgICAgICAgNy44NDM2Ky0wLjE1MjcgICAg
ICAgICAgbWlnaHQgYmUgMS4wNTM0eCBmYXN0ZXIKICAgc3RyaW5nLXVucGFjay1jb2RlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxNy42NjM1Ky0wLjg4NzEgICAgID8gICAgIDE4LjMx
MDgrLTEuMTk3OSAgICAgICAgPyBtaWdodCBiZSAxLjAzNjZ4IHNsb3dlcgogICBzdHJpbmctdmFs
aWRhdGUtaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjE3NjMrLTAuMjI1NyAg
ICAgPyAgICAgIDQuOTI4MistMS42ODE3ICAgICAgICA/IG1pZ2h0IGJlIDEuMTgwMHggc2xvd2Vy
CgogICA8YXJpdGhtZXRpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0
LjMyOTMrLTAuMDY2MSAgICAgPyAgICAgIDQuMzY4NCstMC4wOTQ0ICAgICAgICA/IG1pZ2h0IGJl
IDEuMDA5MHggc2xvd2VyCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRpcE9mVHJlZSAgICAgICAgICAgICAgIEF1eEJ1dHRlcmZsaWVzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApMb25nU3BpZGVyOgogICAzZC1jdWJlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzY3LjUzNjErLTguNjExOCAg
ICAgPyAgICA3NzguOTUyOCstMTAuNzgxMCAgICAgICA/IG1pZ2h0IGJlIDEuMDE0OXggc2xvd2Vy
CiAgIDNkLW1vcnBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NjMu
OTA4OSstMTEuNTE4NCAgICAgICAgIDU1OC44MjA2Ky0yLjM5NjMgICAgICAgIAogICAzZC1yYXl0
cmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQ5LjE1MzgrLTMuNTk3
NyAgICAgPyAgICA0NTAuMzgzMSstNy40MzMwICAgICAgICA/CiAgIGFjY2Vzcy1iaW5hcnktdHJl
ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ODUuNzM0MCstNi41MjAyICAgICA/ICAg
IDc4OC44MTI2Ky02LjczNjcgICAgICAgID8KICAgYWNjZXNzLWZhbm5rdWNoICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDIzMC45NDQzKy04LjMwNjEgICAgID8gICAgMjM0Ljc5NTAr
LTEwLjA0MjkgICAgICAgPyBtaWdodCBiZSAxLjAxNjd4IHNsb3dlcgogICBhY2Nlc3MtbmJvZHkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTA1LjgyNDIrLTIuODk0OCAgICAg
ISAgICA1MTkuMjMwNistMy4yMzc3ICAgICAgICAhIGRlZmluaXRlbHkgMS4wMjY1eCBzbG93ZXIK
ICAgYWNjZXNzLW5zaWV2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3NC42
MTY0Ky02LjUwODAgICAgICEgICAgMjg4LjkyNzgrLTcuNzk0NiAgICAgICAgISBkZWZpbml0ZWx5
IDEuMDUyMXggc2xvd2VyCiAgIGJpdG9wcy0zYml0LWJpdHMtaW4tYnl0ZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgMzIuNTgxOCstMS43OTk3ICAgICAgICAgICAzMS42NzI0Ky0xLjY2NzQgICAg
ICAgICAgbWlnaHQgYmUgMS4wMjg3eCBmYXN0ZXIKICAgYml0b3BzLWJpdHMtaW4tYnl0ZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA5My43OTAyKy0wLjYxMjAgICAgICAgICAgIDkzLjUw
NTUrLTIuNDgwMSAgICAgICAgCiAgIGJpdG9wcy1uc2lldmUtYml0cyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAzNjYuNTgyMistNS43MjEwICAgICA/ICAgIDM2Ny45NTgwKy0zLjU5NzEg
ICAgICAgID8KICAgY29udHJvbGZsb3ctcmVjdXJzaXZlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDQyOC44NzAxKy0zLjgwMzYgICAgICAgICAgNDI4LjA0NjUrLTQuMDM1OSAgICAgICAgCiAg
IGNyeXB0by1hZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NDguOTk5
MSstNC43OTYwICAgICAhICAgIDc2MS42NDAzKy0xNC43NzczICAgICAgICEgZGVmaW5pdGVseSAx
LjM4NzN4IHNsb3dlcgogICBjcnlwdG8tbWQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNDYyLjA0ODUrLTMuODMzNSAgICAgPyAgICA0NjkuMjE5MCstOS42MzI5ICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDE1NXggc2xvd2VyCiAgIGNyeXB0by1zaGExICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA2MTQuOTY3NCstMTcuNzI1OCAgICA/ICAgIDYyOS41Mjc0
Ky0xMi4xOTEwICAgICAgID8gbWlnaHQgYmUgMS4wMjM3eCBzbG93ZXIKICAgZGF0ZS1mb3JtYXQt
dG9mdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyMS4zODg2Ky0xMi4zODQwICAg
ID8gICAgMzM1Ljk2NDIrLTIuNzg0NSAgICAgICAgPyBtaWdodCBiZSAxLjA0NTR4IHNsb3dlcgog
ICBkYXRlLWZvcm1hdC14cGFyYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTgyLjg5
NDIrLTQuMzU5MyAgICAgPyAgICA1OTAuOTM5MCstOC41MzI2ICAgICAgICA/IG1pZ2h0IGJlIDEu
MDEzOHggc2xvd2VyCiAgIGhhc2gtbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxMzIuOTgxMistMi45MjYyICAgICAhICAgIDE0MC41NjYzKy0yLjE4NjEgICAgICAg
ICEgZGVmaW5pdGVseSAxLjA1NzB4IHNsb3dlcgogICBtYXRoLWNvcmRpYyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNDExLjYzODUrLTQuNzYwNCAgICAgPyAgICA0MTEuOTg1
MCstNC44ODE3ICAgICAgICA/CiAgIG1hdGgtcGFydGlhbC1zdW1zICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyNjcuODg0MistMTAuNTg4MCAgICAgICAgIDI2NC41MzYzKy0yLjYzODQg
ICAgICAgICAgbWlnaHQgYmUgMS4wMTI3eCBmYXN0ZXIKICAgbWF0aC1zcGVjdHJhbC1ub3JtICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyMC4yODU5Ky02Ljc1MzEgICAgICAgICAgNTE5
LjM4NDYrLTUuNTU4MSAgICAgICAgCiAgIHN0cmluZy1iYXNlNjQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA0MDMuNTA3MCstMi4zODAyICAgICA/ICAgIDQwNy45NTcwKy00Ljcw
NjUgICAgICAgID8gbWlnaHQgYmUgMS4wMTEweCBzbG93ZXIKICAgc3RyaW5nLWZhc3RhICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyMi4xNDc1Ky00LjQwMTAgICAgICAgICAg
MzE4LjM0MDUrLTMuNzYzMCAgICAgICAgICBtaWdodCBiZSAxLjAxMjB4IGZhc3RlcgogICBzdHJp
bmctdGFnY2xvdWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYzLjk0OTArLTMu
MTE1MiAgICAgPyAgICAxNjQuOTc0NSstMi40MTU5ICAgICAgICA/CgogICA8Z2VvbWV0cmljPiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM0LjAyMzYrLTEuMDg2MiAgICAg
ISAgICAzNDIuMDg3OSstMS4zNjk2ICAgICAgICAhIGRlZmluaXRlbHkgMS4wMjQxeCBzbG93ZXIK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGlwT2ZUcmVlICAgICAgICAgICAgICAgQXV4QnV0dGVyZmxpZXMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgClY4U3BpZGVyOgogICBjcnlwdG8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMzLjg5MTIrLTAuNTI0NiAgICAgISAgICAgMzUuMTk3NSst
MC41MDI3ICAgICAgICAhIGRlZmluaXRlbHkgMS4wMzg1eCBzbG93ZXIKICAgZGVsdGFibHVlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OS41MTA1Ky0xLjQyODQgICAg
ID8gICAgIDQ5Ljg0MTgrLTEuMzA2MCAgICAgICAgPwogICBlYXJsZXktYm95ZXIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4LjM1MTgrLTEuMTU4MiAgICAgICAgICAgMzcu
ODg0MSstMC40NjI4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEyM3ggZmFzdGVyCiAgIHJheXRyYWNl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkuMzY1MystMC42MTc0
ICAgICA/ICAgICAxOS45MjMwKy0wLjk0NjcgICAgICAgID8gbWlnaHQgYmUgMS4wMjg4eCBzbG93
ZXIKICAgcmVnZXhwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0
OS45NTQxKy0xLjAwMTAgICAgICAgICAgIDQ5LjQyNTIrLTAuMjk5MSAgICAgICAgICBtaWdodCBi
ZSAxLjAxMDd4IGZhc3RlcgogICByaWNoYXJkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDM5LjEyNDcrLTEuMjE3NiAgICAgICAgICAgMzguNzE0MystMC41NjMyICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDEwNnggZmFzdGVyCiAgIHNwbGF5ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMjguMjk2OCstMC4xOTQ4ICAgICA/ICAgICAyOC4z
NTg2Ky0wLjM5NzAgICAgICAgID8KCiAgIDxnZW9tZXRyaWM+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMzUuMzM4MystMC4yOTk1ICAgICA/ICAgICAzNS41NDk2Ky0wLjE2
MTMgICAgICAgID8gbWlnaHQgYmUgMS4wMDYweCBzbG93ZXIKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwT2ZUcmVlICAgICAgICAgICAg
ICAgQXV4QnV0dGVyZmxpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCk9jdGFu
ZToKICAgZW5jcnlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LjE0OTA5Ky0wLjAwMTA2ICAgID8gICAgIDAuMTUwMTYrLTAuMDA0NDIgICAgICAgPwogICBkZWNy
eXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNTIyMzcrLTAu
MDMxNTYgICAgISAgICAgMi43MTQ4MystMC4wMjUzMCAgICAgICAhIGRlZmluaXRlbHkgMS4wNzYz
eCBzbG93ZXIKICAgZGVsdGFibHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAg
ICAgICAwLjEyMjM3Ky0wLjAwMTg5ICAgID8gICAgIDAuMTI1MDUrLTAuMDA0OTcgICAgICAgPyBt
aWdodCBiZSAxLjAyMTl4IHNsb3dlcgogICBlYXJsZXkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuMjcwMzArLTAuMDAxNjcgICAgPyAgICAgMC4yNzM1MystMC4w
MDQzOSAgICAgICA/IG1pZ2h0IGJlIDEuMDEyMHggc2xvd2VyCiAgIGJveWVyICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC41NDgzMistMC4xNjgwOSAgICA/ICAg
ICA0LjcxNjMwKy0wLjE2ODQyICAgICAgID8gbWlnaHQgYmUgMS4wMzY5eCBzbG93ZXIKICAgbmF2
aWVyLXN0b2tlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgICA0LjU5MDI0Ky0w
LjAyNDg4ICAgICAgICAgIDQuNTg4OTcrLTAuMDIwNDEgICAgICAgCiAgIHJheXRyYWNlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgICAgMC43NTE0MistMC4wMDU5NSAgICA/
ICAgICAwLjc1NjMxKy0wLjAwNDc2ICAgICAgID8KICAgcmljaGFyZHMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4MiAgICAgICAwLjA3NzE0Ky0wLjAwMTQyICAgID8gICAgIDAuMDc3
NDErLTAuMDAxMDcgICAgICAgPwogICBzcGxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHgyICAgICAgIDAuMzIyNTIrLTAuMDAyNjQgICAgXiAgICAgMC4zMTQwOCstMC4wMDI1
MiAgICAgICBeIGRlZmluaXRlbHkgMS4wMjY5eCBmYXN0ZXIKICAgcmVnZXhwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgIDE1LjA5MTYzKy0wLjI0NTMzICAgID8gICAg
MTUuNzA0ODkrLTAuNjcwNzkgICAgICAgPyBtaWdodCBiZSAxLjA0MDZ4IHNsb3dlcgogICBwZGZq
cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgMzkuNDE0NTkrLTAu
Mzg1MzggICAgISAgICA0Mi4xNzIxNCstMC4yOTkyNCAgICAgICAhIGRlZmluaXRlbHkgMS4wNzAw
eCBzbG93ZXIKICAgbWFuZHJlZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAg
ICAgIDM5LjUyOTM2Ky0wLjE5NzI4ICAgID8gICAgMzkuNjUyNTcrLTAuMzc2ODUgICAgICAgPwog
ICBnYmVtdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgMjcuOTcw
MDgrLTAuMTQyODEgICAgISAgICAyOS4xOTI1NistMC4xMzY4NCAgICAgICAhIGRlZmluaXRlbHkg
MS4wNDM3eCBzbG93ZXIKICAgY2xvc3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLjQ2MjMxKy0wLjAwMzQ2ICAgID8gICAgIDAuNDYyNzIrLTAuMDAyMjYgICAg
ICAgPwogICBqcXVlcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDYuMTQ5NjkrLTAuMDI3OTAgICAgPyAgICAgNi4yMDA4MCstMC4wNjAyNiAgICAgICA/CiAgIGJv
eDJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgICAgOC41OTQxNist
MC4wNzA3NCAgICAhICAgICA4Ljc2MDMyKy0wLjA1NDQwICAgICAgICEgZGVmaW5pdGVseSAxLjAx
OTN4IHNsb3dlcgogICB6bGliICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgy
ICAgICAzNjEuMTAyNjErLTEwLjEzNDM2ICAgICAgIDM1NS44NTc0NSstMTIuNDQ0OTkgICAgICAg
IG1pZ2h0IGJlIDEuMDE0N3ggZmFzdGVyCiAgIHR5cGVzY3JpcHQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeDIgICAgIDU4Ny4yODg0MSstNS44NTQxMiAgICA/ICAgNjAwLjI1NDE5Ky05
LjI3NDY5ICAgICAgID8gbWlnaHQgYmUgMS4wMjIxeCBzbG93ZXIKCiAgIDxnZW9tZXRyaWM+ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC43NTYxMystMC4wMDcxNyAgICAh
ICAgICA0LjgzNjgzKy0wLjAyNzAzICAgICAgICEgZGVmaW5pdGVseSAxLjAxNzB4IHNsb3dlcgoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
aXBPZlRyZWUgICAgICAgICAgICAgICBBdXhCdXR0ZXJmbGllcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKS3Jha2VuOgogICBhaS1hc3RhciAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA4My4yMjArLTIuMTI4ICAgICAgICAgICAgIDgyLjUwMCstMS4x
MDcgICAgICAgICAKICAgYXVkaW8tYmVhdC1kZXRlY3Rpb24gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMzUuNzMwKy0wLjI4NiAgICAgICEgICAgICAzOS42OTYrLTAuNTE1ICAgICAgICAg
ISBkZWZpbml0ZWx5IDEuMTExMHggc2xvd2VyCiAgIGF1ZGlvLWRmdCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDk1LjM4NystMS4wNjQgICAgICAgICAgICAgOTMuOTgy
Ky0yLjYyOCAgICAgICAgICAgbWlnaHQgYmUgMS4wMTQ5eCBmYXN0ZXIKICAgYXVkaW8tZmZ0ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcuODc3Ky0wLjM2OSAgICAg
ICEgICAgICAzMS43OTQrLTAuNTYzICAgICAgICAgISBkZWZpbml0ZWx5IDEuMTQwNXggc2xvd2Vy
CiAgIGF1ZGlvLW9zY2lsbGF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0
LjYzMCstMC4yNDMgICAgICA/ICAgICAgNDQuODg5Ky0wLjE0MSAgICAgICAgID8KICAgaW1hZ2lu
Zy1kYXJrcm9vbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTcuOTA1Ky0xLjc2
NiAgICAgICAgICAgICA1Ny4zMjkrLTEuMDcwICAgICAgICAgICBtaWdodCBiZSAxLjAxMDF4IGZh
c3RlcgogICBpbWFnaW5nLWRlc2F0dXJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA0Mi44MDkrLTQuNDY0ICAgICAgICAgICAgIDQxLjQ3OSstMC4zNzkgICAgICAgICAgIG1pZ2h0
IGJlIDEuMDMyMHggZmFzdGVyCiAgIGltYWdpbmctZ2F1c3NpYW4tYmx1ciAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDYwLjE3MistNC45MjMgICAgICAgICAgICAgNTcuNDEzKy00LjMyMiAg
ICAgICAgICAgbWlnaHQgYmUgMS4wNDgweCBmYXN0ZXIKICAganNvbi1wYXJzZS1maW5hbmNpYWwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQuMTI4Ky0xLjg1NSAgICAgICAgICAgICAz
Mi40MjkrLTAuOTM2ICAgICAgICAgICBtaWdodCBiZSAxLjA1MjR4IGZhc3RlcgogICBqc29uLXN0
cmluZ2lmeS10aW5kZXJib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAyMC4yNjIrLTAuNTY4
ICAgICAgISAgICAgIDIyLjMzOCstMC45NDcgICAgICAgICAhIGRlZmluaXRlbHkgMS4xMDI1eCBz
bG93ZXIKICAgc3RhbmZvcmQtY3J5cHRvLWFlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMzUuNjU3Ky0yLjA0MSAgICAgID8gICAgICAzNy42NDMrLTAuNzM1ICAgICAgICAgPyBtaWdo
dCBiZSAxLjA1NTd4IHNsb3dlcgogICBzdGFuZm9yZC1jcnlwdG8tY2NtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAzMy4xNzMrLTEuNTI1ICAgICAgPyAgICAgIDMzLjY5NistMS4zNTIg
ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE1OHggc2xvd2VyCiAgIHN0YW5mb3JkLWNyeXB0by1wYmtk
ZjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg3LjA5NystMC41MzkgICAgICAhICAgICAg
OTIuOTQyKy0xLjkxMyAgICAgICAgICEgZGVmaW5pdGVseSAxLjA2NzF4IHNsb3dlcgogICBzdGFu
Zm9yZC1jcnlwdG8tc2hhMjU2LWl0ZXJhdGl2ZSAgICAgICAgICAgICAgICAgICAyOC40NzkrLTAu
MjA2ICAgICAgISAgICAgIDMwLjc5OCstMS43NjUgICAgICAgICAhIGRlZmluaXRlbHkgMS4wODE0
eCBzbG93ZXIKCiAgIDxhcml0aG1ldGljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDQ5LjAzOCstMC42NzUgICAgICA/ICAgICAgNDkuOTIzKy0wLjQwMyAgICAgICAgID8g
bWlnaHQgYmUgMS4wMTgxeCBzbG93ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGlwT2ZUcmVlICAgICAgICAgICAgICAgQXV4QnV0dGVy
ZmxpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkpTUmVncmVzczoKICAgYWJj
LWZvcndhcmQtbG9vcC1lcXVhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMy43MTc4Ky0x
LjMxMDAgICAgICAgICAgIDIyLjk3MzMrLTEuNDgzOSAgICAgICAgICBtaWdodCBiZSAxLjAzMjR4
IGZhc3RlcgogICBhYmMtcG9zdGZpeC1iYWNrd2FyZC1sb29wICAgICAgICAgICAgICAgICAgICAg
ICAgIDI4LjcyMTUrLTAuODA4NCAgICAgICAgICAgMjguNzE0NSstMC42MzcxICAgICAgICAKICAg
YWJjLXNpbXBsZS1iYWNrd2FyZC1sb29wICAgICAgICAgICAgICAgICAgICAgICAgICAyMy43MzEy
Ky0yLjIzNTEgICAgICAgICAgIDIyLjE2MTErLTAuNTA3OCAgICAgICAgICBtaWdodCBiZSAxLjA3
MDl4IGZhc3RlcgogICBhYmMtc2ltcGxlLWZvcndhcmQtbG9vcCAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDIzLjcwMDYrLTEuODg3OSAgICAgICAgICAgMjIuNTYzMSstMS4wNjc3ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDUwNHggZmFzdGVyCiAgIGFiYy1za2lwcHktbG9vcCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjAuMzkwNSstMC44MTM1ICAgICA/ICAgICAyMi4xMjAyKy0y
LjU2NzEgICAgICAgID8gbWlnaHQgYmUgMS4wODQ4eCBzbG93ZXIKICAgYWJzLWJvb2xlYW4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4yMTgxKy0wLjI1NDAgICAgID8g
ICAgICAyLjIyNDQrLTAuMTE3OCAgICAgICAgPwogICBhZGFwdC10by1kb3VibGUtZGl2aWRlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDE0LjMyNjArLTEuMDM5NiAgICAgICAgICAgMTMuNzU3
NystMC40OTI3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDQxM3ggZmFzdGVyCiAgIGFsaWFzZWQtYXJn
dW1lbnRzLWdldGJ5dmFsICAgICAgICAgICAgICAgICAgICAgICAgIDEuMDczOSstMC4xMDY2ICAg
ICA/ICAgICAgMS4xMTAxKy0wLjA5MzEgICAgICAgID8gbWlnaHQgYmUgMS4wMzM4eCBzbG93ZXIK
ICAgYWxsb2NhdGUtYmlnLW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4y
NjI4Ky0wLjEyMzcgICAgID8gICAgICAyLjMyMzgrLTAuMjcxNCAgICAgICAgPyBtaWdodCBiZSAx
LjAyNzB4IHNsb3dlcgogICBhcHBseS1ub3QtYXBwbHkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA0LjE3OTUrLTAuMTE4MCAgICAgPyAgICAgIDQuNDEzNSstMC4zMTg2ICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDU2MHggc2xvd2VyCiAgIGFyZ3VtZW50cy1uYW1lZC1hbmQtcmVmbGVj
dGl2ZSAgICAgICAgICAgICAgICAgICAgIDcuNDg5MCstMC4wOTMwICAgICA/ICAgICAgNy41Njc2
Ky0wLjE3MjUgICAgICAgID8gbWlnaHQgYmUgMS4wMTA1eCBzbG93ZXIKICAgYXJndW1lbnRzLW91
dC1vZi1ib3VuZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgOS4zNzI2Ky0wLjUxNzMgICAg
ICAgICAgICA5LjMxNDQrLTAuNTE3MSAgICAgICAgCiAgIGFyZ3VtZW50cy1zdHJpY3QtbW9kZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUuNDA4MistMC44OTc0ICAgICA/ICAgICAxNS42
MzU2Ky0xLjA4NzQgICAgICAgID8gbWlnaHQgYmUgMS4wMTQ4eCBzbG93ZXIKICAgYXJndW1lbnRz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi41NjU1Ky0wLjY1MDcg
ICAgICAgICAgICA2LjU2MTYrLTAuMzg1OCAgICAgICAgCiAgIGFyaXR5LW1pc21hdGNoLWlubGlu
aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNzg5OSstMC4wMzE0ICAgICA/ICAgICAg
MC44MTU0Ky0wLjAyNjkgICAgICAgID8gbWlnaHQgYmUgMS4wMzIzeCBzbG93ZXIKICAgYXJyYXkt
YWNjZXNzLXBvbHltb3JwaGljLXN0cnVjdHVyZSAgICAgICAgICAgICAgICAgMy44NzA1Ky0wLjM4
ODcgICAgICAgICAgICAzLjc2NDkrLTAuMjE5OSAgICAgICAgICBtaWdodCBiZSAxLjAyODB4IGZh
c3RlcgogICBhcnJheS1ub25hcnJheS1wb2x5bW9yaHBpYy1hY2Nlc3MgICAgICAgICAgICAgICAg
IDE5LjQ0MzQrLTAuODE4MiAgICAgPyAgICAgMjAuMDg2OCstMS43MzY0ICAgICAgICA/IG1pZ2h0
IGJlIDEuMDMzMXggc2xvd2VyCiAgIGFycmF5LXByb3RvdHlwZS1ldmVyeSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNjYuMjUzOSstMC42MzAyICAgICA/ICAgICA2Ni40MjM1Ky0xLjY3MTEg
ICAgICAgID8KICAgYXJyYXktcHJvdG90eXBlLWZvckVhY2ggICAgICAgICAgICAgICAgICAgICAg
ICAgICA2Ny4xNzY2Ky0zLjU2MjAgICAgICAgICAgIDY1Ljg3OTIrLTEuMTIxNyAgICAgICAgICBt
aWdodCBiZSAxLjAxOTd4IGZhc3RlcgogICBhcnJheS1wcm90b3R5cGUtbWFwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDY3LjM4MDcrLTEuNTYxMSAgICAgPyAgICAgNjguNTExMSstMy40
NjMyICAgICAgICA/IG1pZ2h0IGJlIDEuMDE2OHggc2xvd2VyCiAgIGFycmF5LXByb3RvdHlwZS1y
ZWR1Y2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjIuMDQxMystMC42MDcxICAgICA/ICAg
ICA2Mi45NjcwKy0xLjkxMDYgICAgICAgID8gbWlnaHQgYmUgMS4wMTQ5eCBzbG93ZXIKICAgYXJy
YXktcHJvdG90eXBlLXJlZHVjZVJpZ2h0ICAgICAgICAgICAgICAgICAgICAgICA4Ni41MTAxKy0x
Ljc2OTMgICAgICAgICAgIDg0LjMzNjYrLTEuMDc5MSAgICAgICAgICBtaWdodCBiZSAxLjAyNTh4
IGZhc3RlcgogICBhcnJheS1wcm90b3R5cGUtc29tZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDY2LjMwNTUrLTAuOTYyMCAgICAgPyAgICAgNjYuOTA1MystMi4xNjkwICAgICAgICA/CiAg
IGFycmF5LXNwbGljZS1jb250aWd1b3VzICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIuNTY4
OCstMS42MDkyICAgICAgICAgICAyMS4yNzczKy0wLjgyNDYgICAgICAgICAgbWlnaHQgYmUgMS4w
NjA3eCBmYXN0ZXIKICAgYXJyYXktd2l0aC1kb3VibGUtYWRkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMy4xNjE1Ky0wLjM0NzkgICAgICAgICAgICAzLjA3NzgrLTAuMTkyMCAgICAgICAg
ICBtaWdodCBiZSAxLjAyNzJ4IGZhc3RlcgogICBhcnJheS13aXRoLWRvdWJsZS1pbmNyZW1lbnQg
ICAgICAgICAgICAgICAgICAgICAgICAyLjU5ODArLTAuMDg5NSAgICAgPyAgICAgIDIuNzYyMist
MC40MjE4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDYzMnggc2xvd2VyCiAgIGFycmF5LXdpdGgtZG91
YmxlLW11bC1hZGQgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNTYxNystMC40MTI0ICAgICA/
ICAgICAgMy42ODkzKy0wLjU3MTUgICAgICAgID8gbWlnaHQgYmUgMS4wMzU4eCBzbG93ZXIKICAg
YXJyYXktd2l0aC1kb3VibGUtc3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi42NzI5
Ky0wLjQxMDQgICAgICAgICAgICAyLjU1NDIrLTAuMDc3OCAgICAgICAgICBtaWdodCBiZSAxLjA0
NjV4IGZhc3RlcgogICBhcnJheS13aXRoLWludDMyLWFkZC1zdWIgICAgICAgICAgICAgICAgICAg
ICAgICAgICA0LjQ0NzUrLTAuMDUyNCAgICAgXiAgICAgIDQuMTU5MSstMC4wNTcxICAgICAgICBe
IGRlZmluaXRlbHkgMS4wNjkzeCBmYXN0ZXIKICAgYXJyYXktd2l0aC1pbnQzMi1vci1kb3VibGUt
c3VtICAgICAgICAgICAgICAgICAgICAgMi42NjY1Ky0wLjM2MzkgICAgICAgICAgICAyLjY0MDIr
LTAuMDM1MiAgICAgICAgCiAgIEFycmF5QnVmZmVyLURhdGFWaWV3LWFsbG9jLWxhcmdlLWxvbmct
bGl2ZWQgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAzNy45MDg0Ky0wLjgxMDkgICAgICAgICAgIDM3LjY0OTcrLTAuNzUwNSAgICAgICAgCiAg
IEFycmF5QnVmZmVyLURhdGFWaWV3LWFsbG9jLWxvbmctbGl2ZWQgICAgICAgICAgICAgMTUuMTUw
OCstMS40OTc5ICAgICAgICAgICAxNC44NTAwKy0xLjA2ODUgICAgICAgICAgbWlnaHQgYmUgMS4w
MjAzeCBmYXN0ZXIKICAgQXJyYXlCdWZmZXItSW50MzJBcnJheS1ieXRlT2Zmc2V0ICAgICAgICAg
ICAgICAgICAgMy43NjQ1Ky0wLjQ3NjMgICAgICAgICAgICAzLjQ5NzErLTAuMDI4NyAgICAgICAg
ICBtaWdodCBiZSAxLjA3NjV4IGZhc3RlcgogICBBcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
bGFyZ2UtbG9uZy1saXZlZCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDM4LjEyNDErLTAuNTEzNCAgICAgXiAgICAgMzYuMjQwMystMC4zNjgx
ICAgICAgICBeIGRlZmluaXRlbHkgMS4wNTIweCBmYXN0ZXIKICAgQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVyICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkuNjQzMistMC42NzQ4ICAgICAgICAgICAxOS4y
MzM4Ky0wLjA2MzMgICAgICAgICAgbWlnaHQgYmUgMS4wMjEzeCBmYXN0ZXIKICAgQXJyYXlCdWZm
ZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQgICAgICAgICAgICAxNC4xMzI1Ky0wLjUwNjgg
ICAgID8gICAgIDE0LjQ1NDQrLTEuMjE4NCAgICAgICAgPyBtaWdodCBiZSAxLjAyMjh4IHNsb3dl
cgogICBBcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MgICAgICAgICAgICAgICAgICAgICAgIDEz
LjM5MDIrLTEuMDU3OCAgICAgICAgICAgMTIuOTMyMystMC41ODIzICAgICAgICAgIG1pZ2h0IGJl
IDEuMDM1NHggZmFzdGVyCiAgIGFycm93ZnVuY3Rpb24tY2FsbC1pbi1jbGFzcy1jb25zdHJ1Y3Rv
ciAgICAgICAgICAgNTAuODIxMistMC40MTc3ICAgICA/ICAgICA1MS4xNTc3Ky0xLjc5MTkgICAg
ICAgID8KICAgYXJyb3dmdW5jdGlvbi1jYWxsLWluLWNsYXNzLW1ldGhvZCAgICAgICAgICAgICAg
ICAxMy43NjM2Ky0wLjk0MzYgICAgICAgICAgIDEzLjcxODgrLTAuOTQ2MiAgICAgICAgCiAgIGFy
cm93ZnVuY3Rpb24tY2FsbC1pbi1mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgMTEuNjgwNyst
MS4yMjk2ICAgICAgICAgICAxMS4wNDM1Ky0wLjQxMDUgICAgICAgICAgbWlnaHQgYmUgMS4wNTc3
eCBmYXN0ZXIKICAgYXJyb3dmdW5jdGlvbi1jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOC43MjYxKy0wLjEyOTggICAgID8gICAgICA5LjA4ODArLTAuNjM4MyAgICAgICAgPyBt
aWdodCBiZSAxLjA0MTV4IHNsb3dlcgogICBhc21qc19ib29sX2J1ZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA3LjE2MzkrLTAuMTgyOCAgICAgPyAgICAgIDcuMTY2MCstMC4x
NTg1ICAgICAgICA/CiAgIGFzc2lnbi1jdXN0b20tc2V0dGVyLXBvbHltb3JwaGljICAgICAgICAg
ICAgICAgICAgIDIuNTE1MCstMC4xNDU0ICAgICA/ICAgICAgMi42MDcxKy0wLjE1OTIgICAgICAg
ID8gbWlnaHQgYmUgMS4wMzY2eCBzbG93ZXIKICAgYXNzaWduLWN1c3RvbS1zZXR0ZXIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMy45NzY4Ky0wLjUyNDAgICAgICAgICAgICAzLjgxMjQr
LTAuMDU4NCAgICAgICAgICBtaWdodCBiZSAxLjA0MzF4IGZhc3RlcgogICBiYXNpYy1zZXQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ljk2OTUrLTAuMjkyNiAgICAg
PyAgICAgIDcuMTEwNistMC4xOTk0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwMnggc2xvd2VyCiAg
IGJpZy1pbnQtbXVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMDQz
NCstMC4yMjQ3ICAgICAgICAgICAgMi45NDA2Ky0wLjA1MzkgICAgICAgICAgbWlnaHQgYmUgMS4w
MzUweCBmYXN0ZXIKICAgYmlnc3dpdGNoLWluZGlyZWN0LXN5bWJvbC1vci11bmRlZmluZWQgICAg
ICAgICAgICA1OC43Nzk1Ky0wLjk2NDEgICAgID8gICAgIDU5LjIxMjMrLTAuNjczOSAgICAgICAg
PwogICBiaWdzd2l0Y2gtaW5kaXJlY3Qtc3ltYm9sICAgICAgICAgICAgICAgICAgICAgICAgIDcw
LjAwODYrLTAuNjc5NSAgICAgPyAgICAgNzAuOTYxMSstMC43ODk5ICAgICAgICA/IG1pZ2h0IGJl
IDEuMDEzNnggc2xvd2VyCiAgIGJpZ3N3aXRjaC1pbmRpcmVjdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNDIuODcyNystMC44NDQ3ICAgICAgICAgICA0Mi42ODc2Ky0wLjgwMTYgICAg
ICAgIAogICBiaWdzd2l0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDIzLjA3MjErLTIuMDQwNCAgICAgICAgICAgMjEuNzcwMystMC41NDQxICAgICAgICAgIG1pZ2h0
IGJlIDEuMDU5OHggZmFzdGVyCiAgIGJvb2xlYW4tdGVzdCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDIuNzQ1NystMC4xMDIzICAgICA/ICAgICAgMi43NTQ4Ky0wLjA4Mzkg
ICAgICAgID8KICAgYm91bmQtZnVuY3Rpb24tY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOS40MjAwKy0wLjY3MDcgICAgID8gICAgICA5LjQzNzkrLTAuMzM2MCAgICAgICAgPwog
ICBicmFuY2gtZm9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjU5
MjMrLTAuMjM0MSAgICAgICAgICAgIDMuNTQ4NSstMC4wNTM2ICAgICAgICAgIG1pZ2h0IGJlIDEu
MDEyM3ggZmFzdGVyCiAgIGJyYW5jaC1vbi1zdHJpbmctYXMtYm9vbGVhbiAgICAgICAgICAgICAg
ICAgICAgICAgMTAuNTA3MCstMS4wNjIwICAgICAgICAgICAxMC4wNzgwKy0wLjg1MzIgICAgICAg
ICAgbWlnaHQgYmUgMS4wNDI2eCBmYXN0ZXIKICAgYnVnLTE1MzQzMSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMy4wODEwKy0wLjMwNzEgICAgICAgICAgICAyLjkwMzUr
LTAuMDkyMiAgICAgICAgICBtaWdodCBiZSAxLjA2MTF4IGZhc3RlcgogICBidWlsZC1sYXJnZS1v
YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ljg4OTIrLTAuMjk4NyAgICAg
PyAgICAgMjkuMzg3MSstMS40OTIxICAgICAgICA/IG1pZ2h0IGJlIDEuMDE3Mnggc2xvd2VyCiAg
IGJ5LXZhbC1nZW5lcmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMTA2
NystMC41Mjg3ICAgICA/ICAgICAgNC4xMDc2Ky0wLjA3NTMgICAgICAgID8KICAgY2FsbC1vci1u
b3QtY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMS4xMDkyKy0yLjIzNTAg
ICAgICAgICAgIDMwLjAwODArLTAuNjIyMCAgICAgICAgICBtaWdodCBiZSAxLjAzNjd4IGZhc3Rl
cgogICBjYWxsLXNwcmVhZC1hcHBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIy
LjUwMzgrLTAuODA3NiAgICAgPyAgICAgMjIuNzg0MystMC40NjUyICAgICAgICA/IG1pZ2h0IGJl
IDEuMDEyNXggc2xvd2VyCiAgIGNhbGwtc3ByZWFkLWNhbGwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjUuNjA3NystMC43ODM0ICAgICAhICAgICAzMC40MzQ0Ky0wLjcwMzYgICAg
ICAgICEgZGVmaW5pdGVseSAxLjE4ODV4IHNsb3dlcgogICBjYXB0dXJlZC1hc3NpZ25tZW50cyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjMxOTUrLTAuMDM4NiAgICAgICAgICAgIDAu
MzA5OSstMC4wMTExICAgICAgICAgIG1pZ2h0IGJlIDEuMDMxMXggZmFzdGVyCiAgIGNhc3QtaW50
LXRvLWRvdWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuODEwOCstMC4yOTgz
ICAgICAgICAgICAgNC42MTY3Ky0wLjA1MDggICAgICAgICAgbWlnaHQgYmUgMS4wNDIweCBmYXN0
ZXIKICAgY2VsbC1hcmd1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Mi41ODM1Ky0wLjA4MzUgICAgID8gICAgICAyLjczNzIrLTAuNDE3MiAgICAgICAgPyBtaWdodCBi
ZSAxLjA1OTV4IHNsb3dlcgogICBjZmctc2ltcGxpZnkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyLjkwMzcrLTAuNjMzMyAgICAgICAgICAgIDIuNzMxNCstMC4yMzUyICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDYzMXggZmFzdGVyCiAgIGNoYWluLWdldHRlci1hY2Nlc3MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAuNjc2MSstMC42MDEwICAgICAgICAgICAxMC4y
MjI4Ky0wLjIzOTMgICAgICAgICAgbWlnaHQgYmUgMS4wNDQzeCBmYXN0ZXIKICAgY21wZXEtb2Jq
LXRvLW9iai1vdGhlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC4wODQyKy0wLjE3OTgg
ICAgICAgICAgICA3LjkxMzArLTAuMDg5NSAgICAgICAgICBtaWdodCBiZSAxLjAyMTZ4IGZhc3Rl
cgogICBjb25jYXQtYXBwZW5kLW9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2
LjU3ODYrLTAuNTI2OCAgICAgPyAgICAgIDcuMDA2MCstMC4zMzY0ICAgICAgICA/IG1pZ2h0IGJl
IDEuMDY1MHggc2xvd2VyCiAgIGNvbnN0YW50LXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQuMzM0NCstMC4wNjQ3ICAgICA/ICAgICAgNC40MDE1Ky0wLjExNDUgICAg
ICAgID8gbWlnaHQgYmUgMS4wMTU1eCBzbG93ZXIKICAgY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25z
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOC4yOTc2Ky0wLjMxNTQgICAgID8gICAgICA4LjQ5
NDgrLTAuNDM3OSAgICAgICAgPyBtaWdodCBiZSAxLjAyMzh4IHNsb3dlcgogICBjc2UtbmV3LWFy
cmF5LWJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjE0ODArLTAuMjQwNCAg
ICAgICAgICAgIDEuOTQ1OSstMC4xMjY0ICAgICAgICAgIG1pZ2h0IGJlIDEuMTAzOHggZmFzdGVy
CiAgIGNzZS1uZXctYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIu
MTkzMSstMC4xMjczICAgICAgICAgICAgMS45NzI0Ky0wLjE0NzYgICAgICAgICAgbWlnaHQgYmUg
MS4xMTE5eCBmYXN0ZXIKICAgY3VzdG9tLXNldHRlci1nZXR0ZXItYXMtcHV0LWdldC1ieS1pZCAg
ICAgICAgICAgICAgMC41OTk1Ky0wLjQzODAgICAgICAgICAgICAwLjQ5NDQrLTAuMjEzOSAgICAg
ICAgICBtaWdodCBiZSAxLjIxMjZ4IGZhc3RlcgogICBEYXRhVmlldy1jdXN0b20tcHJvcGVydGll
cyAgICAgICAgICAgICAgICAgICAgICAgIDQyLjcwOTErLTEuNTYwNCAgICAgICAgICAgNDEuNTA5
MCstMC4zNjQ0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI4OXggZmFzdGVyCiAgIGRlbGF5LXRlYXIt
b2ZmLWFyZ3VtZW50cy1zdHJpY3Rtb2RlICAgICAgICAgICAgICAgIDMuODYyNSstMC4xMDY1ICAg
ICA/ICAgICAgNC4xNDYzKy0wLjMzOTAgICAgICAgID8gbWlnaHQgYmUgMS4wNzM1eCBzbG93ZXIK
ICAgZGVsdGFibHVlLWZvci1vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMC4x
MjY0Ky0xLjA3NjcgICAgICAgICAgIDMwLjAyMDcrLTAuMzI3OCAgICAgICAgCiAgIGRlbHRhYmx1
ZS12YXJhcmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcuNTI4MSstMS4xMzM3
ICAgICA/ICAgICAyOC45ODg4Ky0yLjA2NjQgICAgICAgID8gbWlnaHQgYmUgMS4wNTMxeCBzbG93
ZXIKICAgZGVzdHJ1Y3R1cmluZy1hcmd1bWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICA0
OS42MDM4Ky0xLjk2MjAgICAgID8gICAgIDQ5LjYwNzcrLTAuMjI4MCAgICAgICAgPwogICBkZXN0
cnVjdHVyaW5nLXBhcmFtZXRlcnMtb3ZlcnJpZGRlbi1ieS1mdW5jdGlvbiAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjM3NzQrLTAuMDI2
MCAgICAgPyAgICAgIDAuNDE0MystMC4wOTQ2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDk3N3ggc2xv
d2VyCiAgIGRlc3RydWN0dXJpbmctc3dhcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDQuMzE4NSstMC4xNzA1ICAgICAgICAgICAgNC4yODExKy0wLjA3NzQgICAgICAgIAogICBkaXJl
Y3QtYXJndW1lbnRzLWdldGJ5dmFsICAgICAgICAgICAgICAgICAgICAgICAgICAxLjA2OTkrLTAu
MDg0NSAgICAgPyAgICAgIDEuMDg4MSstMC4xMTIwICAgICAgICA/IG1pZ2h0IGJlIDEuMDE3MHgg
c2xvd2VyCiAgIGRpcmVjdC1hcmd1bWVudHMtbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDYuMjg2NCstMC4zMjA4ICAgICA/ICAgICAgNi4zNDUxKy0wLjE3ODcgICAgICAgID8KICAg
ZGlyZWN0LWFyZ3VtZW50cy1vdmVycmlkZGVuLWxlbmd0aCAgICAgICAgICAgICAgICAgNi40NTc4
Ky0wLjU2ODkgICAgICAgICAgICA2LjE2NDcrLTAuMjU0NyAgICAgICAgICBtaWdodCBiZSAxLjA0
NzV4IGZhc3RlcgogICBkaXJlY3QtYXJndW1lbnRzLXBvc3NpYmx5LW92ZXJyaWRkZW4tbGVuZ3Ro
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDYuNDgyMystMC4xMTIyICAgICAgICAgICAgNi40MjQ0Ky0wLjAzNjIgICAgICAgIAogICBkaXYt
Ym9vbGVhbi1kb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjk2OTYrLTAu
Njg4MCAgICAgICAgICAgIDMuNjUyNSstMC4wMjM4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDg2OHgg
ZmFzdGVyCiAgIGRpdi1ib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDYuOTE4MistMC4zNTU0ICAgICA/ICAgICAgNy4wMjEzKy0wLjQ3NDYgICAgICAgID8gbWln
aHQgYmUgMS4wMTQ5eCBzbG93ZXIKICAgZG91YmxlLWdldC1ieS12YWwtb3V0LW9mLWJvdW5kcyAg
ICAgICAgICAgICAgICAgICAgNC4xMDczKy0wLjM2NzYgICAgID8gICAgICA0LjE1MTIrLTAuMjYy
MyAgICAgICAgPyBtaWdodCBiZSAxLjAxMDd4IHNsb3dlcgogICBkb3VibGUtcG9sbHV0aW9uLWdl
dGJ5dmFsICAgICAgICAgICAgICAgICAgICAgICAgICA2Ljk5NTgrLTAuNDU4OCAgICAgICAgICAg
IDYuNzk5MCstMC4zMDQ5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI5MHggZmFzdGVyCiAgIGRvdWJs
ZS1wb2xsdXRpb24tcHV0YnlvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgIDMuMzQyNistMC4x
MjU2ICAgICA/ICAgICAgMy4zOTgyKy0wLjM5MDIgICAgICAgID8gbWlnaHQgYmUgMS4wMTY2eCBz
bG93ZXIKICAgZG91YmxlLXJlYWwtdXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyNy4wNjgwKy0zLjk0MTEgICAgICAgICAgIDIzLjM0MzkrLTEuNzk1MyAgICAgICAgICBtaWdo
dCBiZSAxLjE1OTV4IGZhc3RlcgogICBkb3VibGUtdG8taW50MzItdHlwZWQtYXJyYXktbm8taW5s
aW5lICAgICAgICAgICAgICAyLjE4MzMrLTAuMTAzOCAgICAgPyAgICAgIDIuMTg0MystMC4wMzM0
ICAgICAgICA/CiAgIGRvdWJsZS10by1pbnQzMi10eXBlZC1hcnJheSAgICAgICAgICAgICAgICAg
ICAgICAgIDIuMDYwNystMC4wNjM2ICAgICA/ICAgICAgMi4wNjk1Ky0wLjEyNDYgICAgICAgID8K
ICAgZG91YmxlLXRvLXVpbnQzMi10eXBlZC1hcnJheS1uby1pbmxpbmUgICAgICAgICAgICAgMi4y
MjcxKy0wLjA2OTMgICAgICAgICAgICAyLjE3MDMrLTAuMDY4NiAgICAgICAgICBtaWdodCBiZSAx
LjAyNjJ4IGZhc3RlcgogICBkb3VibGUtdG8tdWludDMyLXR5cGVkLWFycmF5ICAgICAgICAgICAg
ICAgICAgICAgICAyLjI3MzkrLTAuMDQwOCAgICAgICAgICAgIDIuMjI5MCstMC4wNTk0ICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDIwMnggZmFzdGVyCiAgIGVsaWRhYmxlLW5ldy1vYmplY3QtZGFnICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMjAuMjEyOCstMS40OTEwICAgICAgICAgICAxOS4yMDA4
Ky0xLjEwODUgICAgICAgICAgbWlnaHQgYmUgMS4wNTI3eCBmYXN0ZXIKICAgZWxpZGFibGUtbmV3
LW9iamVjdC1yb2ZsY29wdGVyICAgICAgICAgICAgICAgICAgICAyMy4xOTM2Ky02LjUxMjkgICAg
ICAgICAgIDIzLjA1NzArLTYuMzg1NiAgICAgICAgCiAgIGVsaWRhYmxlLW5ldy1vYmplY3QtdGhl
bi1jYWxsICAgICAgICAgICAgICAgICAgICAgMTcuNzM5MCstMS42MTk5ICAgICA/ICAgICAxOC4x
NzY0Ky0xLjM4MzUgICAgICAgID8gbWlnaHQgYmUgMS4wMjQ3eCBzbG93ZXIKICAgZWxpZGFibGUt
bmV3LW9iamVjdC10cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAxOS40MDY0Ky0xLjEwMjcg
ICAgID8gICAgIDE5LjcxMzkrLTEuMjI4NyAgICAgICAgPyBtaWdodCBiZSAxLjAxNTh4IHNsb3dl
cgogICBlbXB0eS1zdHJpbmctcGx1cy1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0
LjMwMzYrLTAuMDc1NiAgICAgICAgICAgIDQuMjM5OSstMC4wNzA3ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDE1MHggZmFzdGVyCiAgIGVtc2NyaXB0ZW4tY3ViZTJoYXNoICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjMuNjUwOCstMC42NTMxICAgICAgICAgICAyMy4zMDgwKy0xLjAyMTIgICAg
ICAgICAgbWlnaHQgYmUgMS4wMTQ3eCBmYXN0ZXIKICAgZXZhbC1jb21wdXRlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyNS4wNDk2Ky0yLjA4MDcgICAgICAgICAgIDI0LjA0
ODMrLTEuOTg0MSAgICAgICAgICBtaWdodCBiZSAxLjA0MTZ4IGZhc3RlcgogICBldmFsLW5vdC1l
dmFsLWNvbXB1dGUtYXJncyAgICAgICAgICAgICAgICAgICAgICAgIDI0LjA5OTQrLTEuMjk4NiAg
ICAgICAgICAgMjIuNjU5MistMC44NzAyICAgICAgICAgIG1pZ2h0IGJlIDEuMDYzNnggZmFzdGVy
CiAgIGV2YWwtbm90LWV2YWwtY29tcHV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMu
Nzk3NSstMS45MjE0ICAgICAgICAgICAyMi42MDYxKy0wLjQyOTEgICAgICAgICAgbWlnaHQgYmUg
MS4wNTI3eCBmYXN0ZXIKICAgZXhpdC1sZW5ndGgtb24tcGxhaW4tb2JqZWN0ICAgICAgICAgICAg
ICAgICAgICAgICAgOC4xMzc2Ky0wLjIyMTYgICAgICEgICAgIDEwLjUxOTcrLTAuNjY0OSAgICAg
ICAgISBkZWZpbml0ZWx5IDEuMjkyN3ggc2xvd2VyCiAgIGV4dGVybmFsLWFyZ3VtZW50cy1nZXRi
eXZhbCAgICAgICAgICAgICAgICAgICAgICAgIDEuMTEyMSstMC4wNjQ0ICAgICA/ICAgICAgMS4x
NjQ1Ky0wLjExMTUgICAgICAgID8gbWlnaHQgYmUgMS4wNDcxeCBzbG93ZXIKICAgZXh0ZXJuYWwt
YXJndW1lbnRzLXB1dGJ5dmFsICAgICAgICAgICAgICAgICAgICAgICAgMi4xNjEzKy0wLjAzMTcg
ICAgID8gICAgICAyLjI5MTcrLTAuMzM5NSAgICAgICAgPyBtaWdodCBiZSAxLjA2MDN4IHNsb3dl
cgogICBmaXhlZC10eXBlZC1hcnJheS1zdG9yYWdlLXZhci1pbmRleCAgICAgICAgICAgICAgICAx
LjM0NDgrLTAuMDkxNyAgICAgICAgICAgIDEuMzQwOSstMC4wNDc0ICAgICAgICAKICAgZml4ZWQt
dHlwZWQtYXJyYXktc3RvcmFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wNTE2Ky0wLjAz
ODQgICAgID8gICAgICAxLjA5NDIrLTAuMDY1NyAgICAgICAgPyBtaWdodCBiZSAxLjA0MDZ4IHNs
b3dlcgogICBGbG9hdDMyQXJyYXktbWF0cml4LW11bHQgICAgICAgICAgICAgICAgICAgICAgICAg
ICA0Ljk5MDIrLTAuMjU4MCAgICAgPyAgICAgIDQuOTk0NistMC40MTI5ICAgICAgICA/CiAgIEZs
b2F0MzJBcnJheS10by1GbG9hdDY0QXJyYXktc2V0ICAgICAgICAgICAgICAgICAgMzkuODIyOCst
Mi40MzQzICAgICAgICAgICAzOC43ODQyKy0wLjY1OTIgICAgICAgICAgbWlnaHQgYmUgMS4wMjY4
eCBmYXN0ZXIKICAgRmxvYXQ2NEFycmF5LWFsbG9jLWxvbmctbGl2ZWQgICAgICAgICAgICAgICAg
ICAgICA0OS4wOTQ3Ky0wLjIyMzggICAgID8gICAgIDQ5LjEyNTErLTIuMDYxNiAgICAgICAgPwog
ICBGbG9hdDY0QXJyYXktdG8tSW50MTZBcnJheS1zZXQgICAgICAgICAgICAgICAgICAgIDQ0LjQ5
NzcrLTAuNjY2MCAgICAgICAgICAgNDQuMjc2OSstMS4xMDczICAgICAgICAKICAgZm9sZC1kb3Vi
bGUtdG8taW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMi4xOTYwKy0wLjc5Nzgg
ICAgID8gICAgIDEyLjI2ODUrLTAuNjE2NiAgICAgICAgPwogICBmb2xkLWdldC1ieS1pZC10by1t
dWx0aS1nZXQtYnktb2Zmc2V0LXJhcmUtaW50ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuOTUzMystMS4zNTkwICAgICA/ICAgICAgOS4w
MjA4Ky0xLjUzMjQgICAgICAgID8gbWlnaHQgYmUgMS4xMzQyeCBzbG93ZXIKICAgZm9sZC1nZXQt
YnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldCAgICAgICAgICAgICAgNS45NDIxKy0wLjA2MTUg
ICAgID8gICAgICA1Ljk5MjkrLTAuMTA0NSAgICAgICAgPwogICBmb2xkLW11bHRpLWdldC1ieS1v
ZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA0LjE0MTIrLTAuMTAyMiAgICAgPyAgICAgIDQuMjc5Myst
MC4zNTMzICAgICAgICA/IG1pZ2h0IGJlIDEuMDMzM3ggc2xvd2VyCiAgIGZvbGQtbXVsdGktZ2V0
LWJ5LW9mZnNldC10by1wb2x5LWdldC1ieS1vZmZzZXQgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4yMzQ4Ky0wLjMzMTIgICAgICAgICAg
ICA0LjA4OTMrLTAuMTIwMCAgICAgICAgICBtaWdodCBiZSAxLjAzNTZ4IGZhc3RlcgogICBmb2xk
LW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcG9seS1wdXQtYnktb2Zmc2V0ICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMjA5NistMC4zOTk5
ICAgICA/ICAgICAgNC4zMjI5Ky0wLjM2MzkgICAgICAgID8gbWlnaHQgYmUgMS4wMjY5eCBzbG93
ZXIKICAgZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy41MTQ4Ky0w
LjU0MDkgICAgID8gICAgICAzLjUxNzMrLTAuNDQ1NCAgICAgICAgPwogICBmb2xkLW11bHRpLXB1
dC1ieS1vZmZzZXQtdG8tcmVwbGFjZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi40NzI1
Ky0wLjE3MjMgICAgID8gICAgICA2Ljk0OTkrLTEuMDgxNyAgICAgICAgPyBtaWdodCBiZSAxLjA3
Mzh4IHNsb3dlcgogICBmb2xkLXB1dC1ieS1pZC10by1tdWx0aS1wdXQtYnktb2Zmc2V0ICAgICAg
ICAgICAgICA4LjEyODErLTIuMjY3NiAgICAgPyAgICAgIDguMzQwMystMi4xNzM3ICAgICAgICA/
IG1pZ2h0IGJlIDEuMDI2MXggc2xvd2VyCiAgIGZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10
by1tdWx0aS1wdXQtYnktb2Zmc2V0ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDYuNzM0MistMC40NTUxICAgICA/ICAgICAgNi43OTA2Ky0w
LjUxNDEgICAgICAgID8KICAgZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1
dC1ieS1vZmZzZXQgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNy43NDI0Ky0yLjY3MTQgICAgICAgICAgICA3LjU0MDErLTEuMzUzNiAgICAg
ICAgICBtaWdodCBiZSAxLjAyNjh4IGZhc3RlcgogICBmb2xkLXB1dC1zdHJ1Y3R1cmUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAzLjk3MjArLTEuNTIyOCAgICAgPyAgICAgIDQuMDM1
OCstMS4yODY0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE2MXggc2xvd2VyCiAgIGZvci1vZi1pdGVy
YXRlLWFycmF5LWVudHJpZXMgICAgICAgICAgICAgICAgICAgICAgIDguOTEyNistMC4yOTEzICAg
ICAgICAgICAgOC42ODc3Ky0wLjIyMjkgICAgICAgICAgbWlnaHQgYmUgMS4wMjU5eCBmYXN0ZXIK
ICAgZm9yLW9mLWl0ZXJhdGUtYXJyYXkta2V5cyAgICAgICAgICAgICAgICAgICAgICAgICAgMy45
ODAwKy0wLjIwOTkgICAgICAgICAgICAzLjg4MDUrLTAuNDczMiAgICAgICAgICBtaWdodCBiZSAx
LjAyNTZ4IGZhc3RlcgogICBmb3Itb2YtaXRlcmF0ZS1hcnJheS12YWx1ZXMgICAgICAgICAgICAg
ICAgICAgICAgICAzLjc4OTgrLTAuMzU2NyAgICAgICAgICAgIDMuNTM1NCstMC4xODIzICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDcyMHggZmFzdGVyCiAgIGZyZWV6ZS1hbmQtZG8td29yayAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMTIuMzg0NistMC43NjI1ICAgICAgICAgICAxMi4zODM2
Ky0wLjc0NDIgICAgICAgIAogICBmcm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA5LjQxMDQrLTAuMjcyNiAgICAgPyAgICAgIDkuNTY1MystMC41MDgwICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDE2NXggc2xvd2VyCiAgIGZ0bC1saWJyYXJ5LWlubGluaW5nLWRh
dGF2aWV3ICAgICAgICAgICAgICAgICAgICAgNjAuMDAzOSstMC40MjgyICAgICA/ICAgICA2MS4x
OTc2Ky0yLjQ0NjcgICAgICAgID8gbWlnaHQgYmUgMS4wMTk5eCBzbG93ZXIKICAgZnRsLWxpYnJh
cnktaW5saW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMy4xMTc1Ky0yLjEzOTMg
ICAgICAgICAgIDIyLjY1MjcrLTEuNzEyOSAgICAgICAgICBtaWdodCBiZSAxLjAyMDV4IGZhc3Rl
cgogICBmdGwtcG9seW1vcnBoaWMtYml0YW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI1
Ljc4ODQrLTcuNjI2MSAgICAgICAgICAxMjMuNTcxOSstMi42MDY2ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDE3OXggZmFzdGVyCiAgIGZ0bC1wb2x5bW9ycGhpYy1iaXRvciAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxMjQuNDQ4OCstMy4xNjQ3ICAgICAgICAgIDEyMi43Nzk5Ky0wLjQyNTcgICAg
ICAgICAgbWlnaHQgYmUgMS4wMTM2eCBmYXN0ZXIKICAgZnRsLXBvbHltb3JwaGljLWJpdHhvciAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEyMy43ODM4Ky0wLjg5NjYgICAgID8gICAgMTI0LjM0
NzUrLTQuMTAxMSAgICAgICAgPwogICBmdGwtcG9seW1vcnBoaWMtZGl2ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNDM2LjA1MjArLTIuNzg1MyAgICAgPyAgICA0NDQuNTc4MCstMTAuMTc5
OSAgICAgICA/IG1pZ2h0IGJlIDEuMDE5Nnggc2xvd2VyCiAgIGZ0bC1wb2x5bW9ycGhpYy1sc2hp
ZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTEuNTI5MSstMS43MDIwICAgICAgICAgIDE1
MS4yMDI1Ky0yLjg2NjggICAgICAgIAogICBmdGwtcG9seW1vcnBoaWMtbXVsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMjIwLjk4MTUrLTIuNTc5MCAgICAgICAgICAyMjAuMzczMCstMS4w
MzUzICAgICAgICAKICAgZnRsLXBvbHltb3JwaGljLXJzaGlmdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDE1MC4xNjYzKy0yLjA1MDIgICAgICAgICAgMTQ4LjcxOTArLTEuNzIyNSAgICAgICAg
CiAgIGZ0bC1wb2x5bW9ycGhpYy1TdHJpbmdGcm9tQ2hhckNvZGUgICAgICAgICAgICAgICAgNDAu
NDgyOSstMS42MjA1ICAgICAgICAgICA0MC40MTQ3Ky0wLjkzMDMgICAgICAgIAogICBmdGwtcG9s
eW1vcnBoaWMtc3ViICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ0LjYzMjkrLTEuNTgz
MiAgICAgPyAgICAxNDQuNjQ4OCstMC42NDUzICAgICAgICA/CiAgIGZ0bC1wb2x5bW9ycGhpYy11
cnNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAxNjAuMTk5NystMS4xNzY4ICAgICA/ICAg
IDE2MC4zOTQzKy0yLjMzNDAgICAgICAgID8KICAgZnVuY3Rpb24tY2FsbCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxMC42ODUyKy0wLjc3NDUgICAgICAgICAgIDEwLjM4NDAr
LTAuMjAzNiAgICAgICAgICBtaWdodCBiZSAxLjAyOTB4IGZhc3RlcgogICBmdW5jdGlvbi1kb3Qt
YXBwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjg3NTErLTAuMDc1MSAgICAg
ICAgICAgIDEuODQyOSstMC4wMTk2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE3NXggZmFzdGVyCiAg
IGZ1bmN0aW9uLXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNDI4
NCstMC4wNDI5ICAgICA/ICAgICAgMi40NzA1Ky0wLjA1NDAgICAgICAgID8gbWlnaHQgYmUgMS4w
MTczeCBzbG93ZXIKICAgZnVuY3Rpb24td2l0aC1ldmFsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA0Mi4xNDY3Ky0wLjI1NDkgICAgICAgICAgIDQxLjk0ODArLTAuNjE5MSAgICAgICAg
CiAgIGdjc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzICAgICAgICAgICAgICAgICAgICAgICAgMTQu
OTE3OCstMS4zMjI5ICAgICAgICAgICAxNC4zMDc3Ky0wLjE3MzUgICAgICAgICAgbWlnaHQgYmUg
MS4wNDI2eCBmYXN0ZXIKICAgZ2NzZS1wb2x5LWdldCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxNS4xMjY4Ky0wLjQxNDYgICAgICAgICAgIDE1LjAyNjIrLTAuOTkwNCAgICAg
ICAgCiAgIGdjc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDMuNTgwMCstMC4yMTQyICAgICAgICAgICAgMy4zODc4Ky0wLjA4NTIgICAgICAgICAgbWlnaHQg
YmUgMS4wNTY4eCBmYXN0ZXIKICAgZ2VuZXJhdG9yLWNyZWF0ZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC42ODIzKy0wLjA0MDcgICAgID8gICAgICAwLjcwNjYrLTAuMDYzOCAg
ICAgICAgPyBtaWdodCBiZSAxLjAzNTd4IHNsb3dlcgogICBnZW5lcmF0b3ItZmliICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkyLjg1MjMrLTIuMTc1MCAgICAgXiAgICAgODku
MzIxOSstMC4yOTE1ICAgICAgICBeIGRlZmluaXRlbHkgMS4wMzk1eCBmYXN0ZXIKICAgZ2VuZXJh
dG9yLWZ1bmN0aW9uLWNyZWF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgMy42Mjc2Ky0wLjMy
NTYgICAgICAgICAgICAzLjM3MjUrLTAuMjM4NSAgICAgICAgICBtaWdodCBiZSAxLjA3NTZ4IGZh
c3RlcgogICBnZW5lcmF0b3Itc3Vuc3BpZGVyLWFjY2Vzcy1uc2lldmUgICAgICAgICAgICAgICAg
ICA1LjI5MjgrLTAuMTI1MiAgICAgXiAgICAgIDUuMTEyMCstMC4wNTUxICAgICAgICBeIGRlZmlu
aXRlbHkgMS4wMzU0eCBmYXN0ZXIKICAgZ2VuZXJhdG9yLXdpdGgtc2V2ZXJhbC10eXBlcyAgICAg
ICAgICAgICAgICAgICAgIDMwOC4xNzk5Ky0xMC4zMzQ0ICAgICAgICAgMjkzLjc2MDArLTEwLjEx
MzkgICAgICAgICBtaWdodCBiZSAxLjA0OTF4IGZhc3RlcgogICBnZXQtYnktaWQtYmltb3JwaGlj
LWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4zNzg4Ky0wLjMyMzkgICAgICAg
ICAgICAyLjIzNDYrLTAuMTE3MCAgICAgICAgICBtaWdodCBiZSAxLjA2NDZ4IGZhc3RlcgogICBn
ZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbiAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjIzNjkrLTAu
MzIzMyAgICAgICAgICAgIDQuMTE0NistMC4wNzUwICAgICAgICAgIG1pZ2h0IGJlIDEuMDI5N3gg
ZmFzdGVyCiAgIGdldC1ieS1pZC1jaGFpbi1mcm9tLXRyeS1ibG9jayAgICAgICAgICAgICAgICAg
ICAgIDEuODAwNystMC4wODQyICAgICAgICAgICAgMS43NjI0Ky0wLjA2OTEgICAgICAgICAgbWln
aHQgYmUgMS4wMjE3eCBmYXN0ZXIKICAgZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5h
dGlvbiAgICAgICAgICAgICAgMi43MzgyKy0wLjA0ODAgICAgID8gICAgICAyLjk3ODErLTAuNDgw
OCAgICAgICAgPyBtaWdodCBiZSAxLjA4NzZ4IHNsb3dlcgogICBnZXQtYnktaWQtcHJvdG8tb3It
c2VsZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjUwOTMrLTAuNjUzNCAgICAgICAgICAg
IDkuMzE1MistMC4xNzEyICAgICAgICAgIG1pZ2h0IGJlIDEuMDIwOHggZmFzdGVyCiAgIGdldC1i
eS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNjU0
MistMC4xMjAyICAgICAgICAgICAgMi42MTU4Ky0wLjAyNzcgICAgICAgICAgbWlnaHQgYmUgMS4w
MTQ3eCBmYXN0ZXIKICAgZ2V0LWJ5LWlkLXNlbGYtb3ItcHJvdG8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOC40NzA4Ky0xLjM1OTUgICAgID8gICAgICA4LjUxMzArLTEuMTkzMSAgICAgICAg
PwogICBnZXQtYnktdmFsLW91dC1vZi1ib3VuZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAz
Ljc1OTgrLTAuMDczOSAgICAgISAgICAgIDQuMDk2MSstMC4yMzM3ICAgICAgICAhIGRlZmluaXRl
bHkgMS4wODk0eCBzbG93ZXIKICAgZ2V0LWJ5LXZhbC13aXRoLXN0cmluZy1iaW1vcnBoaWMtY2hl
Y2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjIyMzMrLTAuNjMyNiAgICAgICAgICAg
IDIuOTYzNystMC4wNDkzICAgICAgICAgIG1pZ2h0IGJlIDEuMDg3NnggZmFzdGVyCiAgIGdldC1i
eS12YWwtd2l0aC1zdHJpbmctYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbiAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1
Ljc2ODErLTAuMTMyNyAgICAgPyAgICAgIDUuNzg2MystMC4xOTgxICAgICAgICA/CiAgIGdldC1i
eS12YWwtd2l0aC1zdHJpbmctY2hhaW4tZnJvbS10cnktYmxvY2sgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS45NjYzKy0wLjEwOTUgICAg
ICAgICAgICAxLjg5NjkrLTAuMTAzNyAgICAgICAgICBtaWdodCBiZSAxLjAzNjZ4IGZhc3Rlcgog
ICBnZXQtYnktdmFsLXdpdGgtc3RyaW5nLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbiAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LjQ2
MjErLTAuNTUwMSAgICAgPyAgICAgIDUuNTg5OCstMC43NzgxICAgICAgICA/IG1pZ2h0IGJlIDEu
MDIzNHggc2xvd2VyCiAgIGdldC1ieS12YWwtd2l0aC1zdHJpbmctcHJvdG8tb3Itc2VsZiAgICAg
ICAgICAgICAgIDkuMzYxNSstMS4xNTg2ICAgICAgICAgICAgOS4wMjkxKy0wLjg1OTkgICAgICAg
ICAgbWlnaHQgYmUgMS4wMzY4eCBmYXN0ZXIKICAgZ2V0LWJ5LXZhbC13aXRoLXN0cmluZy1xdWFk
bW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNzYwNCstMC4wNDY3
ICAgICAgICAgICAgMy43NDMyKy0wLjEyMDYgICAgICAgIAogICBnZXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXNlbGYtb3ItcHJvdG8gICAgICAgICAgICAgICA5LjM1MzIrLTAuOTI0OCAgICAgICAgICAg
IDguNjIxMystMC41OTA4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDg0OXggZmFzdGVyCiAgIGdldC1i
eS12YWwtd2l0aC1zeW1ib2wtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1z
aW1wbGUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMi4zOTI3Ky0wLjEwOTEgICAgID8gICAgICAyLjUwMDMrLTAuMjQ5MiAgICAgICAgPyBt
aWdodCBiZSAxLjA0NDl4IHNsb3dlcgogICBnZXQtYnktdmFsLXdpdGgtc3ltYm9sLWJpbW9ycGhp
Yy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24gICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy42NTQ0Ky0wLjY2ODEgICAgICAgICAgICA3
LjIyMTIrLTAuMTMzOSAgICAgICAgICBtaWdodCBiZSAxLjA2MDB4IGZhc3RlcgogICBnZXQtYnkt
dmFsLXdpdGgtc3ltYm9sLWNoYWluLWZyb20tdHJ5LWJsb2NrICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuODQzMCstMC4wMTc0ICAgICA/
ICAgICAgMS44NjAwKy0wLjA0MzYgICAgICAgID8KICAgZ2V0LWJ5LXZhbC13aXRoLXN5bWJvbC1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24gICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNi4wMTgwKy0wLjM2MDcgICAgICAgICAgICA1Ljk2
MzcrLTAuODI2NSAgICAgICAgCiAgIGdldC1ieS12YWwtd2l0aC1zeW1ib2wtcHJvdG8tb3Itc2Vs
ZiAgICAgICAgICAgICAgIDguODQ4OSstMS4wNDczICAgICA/ICAgICAgOS4yNDE0Ky0xLjA3Mzcg
ICAgICAgID8gbWlnaHQgYmUgMS4wNDQ0eCBzbG93ZXIKICAgZ2V0LWJ5LXZhbC13aXRoLXN5bWJv
bC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNDcyOSst
MC40NzgwICAgICAgICAgICAgMy4yMDg4Ky0wLjA0NzYgICAgICAgICAgbWlnaHQgYmUgMS4wODIz
eCBmYXN0ZXIKICAgZ2V0LWJ5LXZhbC13aXRoLXN5bWJvbC1zZWxmLW9yLXByb3RvICAgICAgICAg
ICAgICAgOC44Mjc4Ky0wLjkwODkgICAgID8gICAgICA5LjQ3MDIrLTEuMTYwMiAgICAgICAgPyBt
aWdodCBiZSAxLjA3Mjh4IHNsb3dlcgogICBnZXRfYnlfdmFsLUludDMyQXJyYXkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxLjE2ODgrLTAuMDcyOCAgICAgICAgICAgIDEuMTY3MistMC4w
MzQxICAgICAgICAKICAgZ2V0X2NhbGxlZV9tb25vbW9ycGhpYyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi4wMjQ1Ky0wLjE5MDAgICAgID8gICAgICAyLjI4MDArLTAuNDgyNSAgICAgICAg
PyBtaWdodCBiZSAxLjEyNjJ4IHNsb3dlcgogICBnZXRfY2FsbGVlX3BvbHltb3JwaGljICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyLjg5NTcrLTAuMDcyMiAgICAgICAgICAgIDIuODU4NSst
MC4xNTg4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzMHggZmFzdGVyCiAgIGdldHRlci1uby1hY3Rp
dmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuODAzNCstMC4wODA2ICAgICA/
ICAgICAgMi44MTg3Ky0wLjA3MzggICAgICAgID8KICAgZ2V0dGVyLXByb3RvdHlwZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNC41MDIyKy0wLjA3NTIgICAgICAgICAgICA0LjQ3
MDArLTAuMDk0NiAgICAgICAgCiAgIGdldHRlci1yaWNoYXJkcy10cnktY2F0Y2ggICAgICAgICAg
ICAgICAgICAgICAgICA4ODEuMDI4MistNjkuNzg4MSAgICAgICAgIDg1MS4xMzQyKy05LjE0MTcg
ICAgICAgICAgbWlnaHQgYmUgMS4wMzUxeCBmYXN0ZXIKICAgZ2V0dGVyLXJpY2hhcmRzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MC4xMzAwKy0yLjcwNDQgICAgICAgICAgIDU3
LjczMzgrLTUuNDMzMCAgICAgICAgICBtaWdodCBiZSAxLjA0MTV4IGZhc3RlcgogICBnZXR0ZXIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjkxMjQrLTAuMDY3
MyAgICAgPyAgICAgIDMuMTA5NystMC4yNTQ0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDY3OHggc2xv
d2VyCiAgIGdsb2JhbC1pc05hTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTAuNDYwNystMC43MDE0ICAgICAgICAgICAgOS45NTQxKy0wLjEzNzkgICAgICAgICAgbWlnaHQg
YmUgMS4wNTA5eCBmYXN0ZXIKICAgZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1z
dHJ1Y3R1cmUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNC44NDYwKy0wLjA4MTcgICAgICAgICAgICA0LjcxOTArLTAuMDQ5NyAgICAgICAg
ICBtaWdodCBiZSAxLjAyNjl4IGZhc3RlcgogICBnbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZpcmUt
ZnJvbS1vcHQgICAgICAgICAgICAgICAwLjc2MTMrLTAuMDg0MSAgICAgPyAgICAgIDAuODEyNCst
MC4xNDE2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDY3MXggc2xvd2VyCiAgIGdsb2JhbC12YXItY29u
c3QtaW5mZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNzE3NistMC4xMzU2ICAgICA/
ICAgICAgMC43MzY4Ky0wLjA4ODcgICAgICAgID8gbWlnaHQgYmUgMS4wMjY4eCBzbG93ZXIKICAg
aGFyZC1vdmVyZmxvdy1jaGVjay1lcXVhbCAgICAgICAgICAgICAgICAgICAgICAgICAyNC4yODkw
Ky0yLjIzMjYgICAgICAgICAgIDIzLjU3NjUrLTEuMDc2NyAgICAgICAgICBtaWdodCBiZSAxLjAz
MDJ4IGZhc3RlcgogICBoYXJkLW92ZXJmbG93LWNoZWNrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDI0LjkwMDgrLTEuNDQzMiAgICAgICAgICAgMjQuNDU2MSstMi4zNDIwICAgICAgICAg
IG1pZ2h0IGJlIDEuMDE4MnggZmFzdGVyCiAgIEhhc2hNYXAtcHV0LWdldC1pdGVyYXRlLWtleXMg
ICAgICAgICAgICAgICAgICAgICAgMjEuMTk0OSstMC41NzI1ICAgICA/ICAgICAyMi4wMDk4Ky0x
LjAyNDMgICAgICAgID8gbWlnaHQgYmUgMS4wMzg0eCBzbG93ZXIKICAgSGFzaE1hcC1wdXQtZ2V0
LWl0ZXJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMS43Mjc1Ky0wLjY3NTQgICAgID8g
ICAgIDIxLjc0OTArLTAuNjIwMiAgICAgICAgPwogICBIYXNoTWFwLXN0cmluZy1wdXQtZ2V0LWl0
ZXJhdGUgICAgICAgICAgICAgICAgICAgIDIyLjc5MzIrLTAuNDIyMCAgICAgPyAgICAgMjMuMjY1
NSstMS40MjE2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwN3ggc2xvd2VyCiAgIGhvaXN0LW1ha2Ut
cm9wZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNDg1MCstMC4xNTE0ICAg
ICA/ICAgICAgMy43OTQ5Ky0wLjM3NzcgICAgICAgID8gbWlnaHQgYmUgMS4wODg5eCBzbG93ZXIK
ICAgaG9pc3QtcG9seS1jaGVjay1zdHJ1Y3R1cmUtZWZmZWN0ZnVsLWxvb3AgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi44MzY2Ky0wLjA3
ODAgICAgID8gICAgICAyLjg4MDkrLTAuMTEyMCAgICAgICAgPyBtaWdodCBiZSAxLjAxNTZ4IHNs
b3dlcgogICBob2lzdC1wb2x5LWNoZWNrLXN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAg
ICAyLjA0NTIrLTAuMDUxNiAgICAgICAgICAgIDIuMDQzMSstMC4wNzQwICAgICAgICAKICAgaW1w
bGljaXQtYmlnc3dpdGNoLWluZGlyZWN0LXN5bWJvbCAgICAgICAgICAgICAgICA1Mi4wNjEwKy0w
LjgxMDkgICAgID8gICAgIDUzLjE1NTYrLTIuMTczNiAgICAgICAgPyBtaWdodCBiZSAxLjAyMTB4
IHNsb3dlcgogICBpbXVsLWRvdWJsZS1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAzLjE3MTArLTAuMTA4MiAgICAgPyAgICAgIDMuMjAxNistMC4xMDE2ICAgICAgICA/CiAg
IGltdWwtaW50LW9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuMDI4
MSstMC4xMTYwICAgICAgICAgICAgNC45OTYzKy0wLjE2NDYgICAgICAgIAogICBpbXVsLW1peGVk
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjk1MjErLTAuMTU0NSAg
ICAgPyAgICAgIDMuMDEzMystMC4yMTE0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwN3ggc2xvd2Vy
CiAgIGluLWZvdXItY2FzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYu
NTk0NCstMS4xNTgwICAgICA/ICAgICAxOC4yOTU5Ky0xLjUwNjIgICAgICAgID8gbWlnaHQgYmUg
MS4xMDI1eCBzbG93ZXIKICAgaW4tb25lLWNhc2UtZmFsc2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNy40MTk3Ky0wLjE0OTAgICAgID8gICAgICA3LjUxNTErLTAuMTIwMCAgICAg
ICAgPyBtaWdodCBiZSAxLjAxMjh4IHNsb3dlcgogICBpbi1vbmUtY2FzZS10cnVlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA3LjQ4NTcrLTAuNDQ1OSAgICAgPyAgICAgIDcuNTY5
MSstMC40NzUyICAgICAgICA/IG1pZ2h0IGJlIDEuMDExMXggc2xvd2VyCiAgIGluLXR3by1jYXNl
cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNTU0MSstMC4yNTE2ICAg
ICA/ICAgICAgNy45NDI5Ky0xLjExNzUgICAgICAgID8gbWlnaHQgYmUgMS4wNTE1eCBzbG93ZXIK
ICAgaW5kZXhlZC1wcm9wZXJ0aWVzLWluLW9iamVjdHMgICAgICAgICAgICAgICAgICAgICAgMi42
OTc3Ky0wLjIyNTQgICAgID8gICAgICAyLjcyOTErLTAuMzU4MiAgICAgICAgPyBtaWdodCBiZSAx
LjAxMTZ4IHNsb3dlcgogICBpbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LW5vLWlubGluZSAg
ICAgICAgICAgICAzLjAwMzgrLTAuMjAyNSAgICAgICAgICAgIDIuODk3MSstMC4wNTQyICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDM2OXggZmFzdGVyCiAgIGluZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1t
b3YgICAgICAgICAgICAgICAgICAgICAgIDYuNjYzMCstMC4yMDY0ICAgICAgICAgICAgNi41NTU5
Ky0wLjEyNDMgICAgICAgICAgbWlnaHQgYmUgMS4wMTYzeCBmYXN0ZXIKICAgaW5mZXItY2xvc3Vy
ZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC4yNDY1Ky0wLjc4MTcgICAgID8g
ICAgIDEwLjM1NzArLTAuNjE3MSAgICAgICAgPyBtaWdodCBiZSAxLjAxMDh4IHNsb3dlcgogICBp
bmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlICAgICAgICAgICAgIDIxLjc4MjQr
LTAuNTc1NyAgICAgPyAgICAgMjIuODQ1NistMi4wMTE3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDQ4
OHggc2xvd2VyCiAgIGluZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGluZSAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2
Ljk2NDIrLTAuMzU5MCAgICAgICAgICAgNDYuNjI0MystMC4xNzYwICAgICAgICAKICAgaW5mZXIt
Y2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXIgICAgICAgICAgICAgICAgICAyMi4zMDcyKy0xLjY3
MjEgICAgID8gICAgIDIyLjc0MjcrLTAuODkzMSAgICAgICAgPyBtaWdodCBiZSAxLjAxOTV4IHNs
b3dlcgogICBpbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkgICAgICAgICAgICAgICAgICAg
ICAyLjY0MjUrLTAuNDQ5OSAgICAgICAgICAgIDIuNTAzNSstMC4xMjk2ICAgICAgICAgIG1pZ2h0
IGJlIDEuMDU1NXggZmFzdGVyCiAgIGluZmVyLWNvbnN0YW50LXByb3BlcnR5ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDIuMDM5NCstMC4wNzg1ICAgICAgICAgICAgMi4wMDM5Ky0wLjA2NDEg
ICAgICAgICAgbWlnaHQgYmUgMS4wMTc3eCBmYXN0ZXIKICAgaW5mZXItb25lLXRpbWUtY2xvc3Vy
ZS10ZW4tdmFycyAgICAgICAgICAgICAgICAgICAgNi41NzMzKy0wLjUxMDYgICAgICAgICAgICA2
LjI3OTUrLTAuMzY2NSAgICAgICAgICBtaWdodCBiZSAxLjA0Njh4IGZhc3RlcgogICBpbmZlci1v
bmUtdGltZS1jbG9zdXJlLXR3by12YXJzICAgICAgICAgICAgICAgICAgICA2LjM2NzIrLTAuNTYw
MCAgICAgICAgICAgIDUuOTA5MistMC4wOTAyICAgICAgICAgIG1pZ2h0IGJlIDEuMDc3NXggZmFz
dGVyCiAgIGluZmVyLW9uZS10aW1lLWNsb3N1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDYuMDMyMSstMC41MTI1ICAgICAgICAgICAgNS44MDQ3Ky0wLjA5NzEgICAgICAgICAgbWlnaHQg
YmUgMS4wMzkyeCBmYXN0ZXIKICAgaW5mZXItb25lLXRpbWUtZGVlcC1jbG9zdXJlICAgICAgICAg
ICAgICAgICAgICAgICAxMS4wNjMwKy0wLjkyMTggICAgICAgICAgIDEwLjk5NzUrLTAuNzIwNCAg
ICAgICAgCiAgIGlubGluZS1hcmd1bWVudHMtYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDMuNTE1MistMC4yMzU4ICAgICAgICAgICAgMy40MDAwKy0wLjEzMzMgICAgICAgICAgbWln
aHQgYmUgMS4wMzM5eCBmYXN0ZXIKICAgaW5saW5lLWFyZ3VtZW50cy1hbGlhc2VkLWFjY2VzcyAg
ICAgICAgICAgICAgICAgICAgMy41Mzg3Ky0wLjE2NDAgICAgICAgICAgICAzLjUxMjYrLTAuMTMw
NiAgICAgICAgCiAgIGlubGluZS1hcmd1bWVudHMtbG9jYWwtZXNjYXBlICAgICAgICAgICAgICAg
ICAgICAgIDMuODExOCstMC40MDE0ICAgICAgICAgICAgMy41NzAwKy0wLjUzOTYgICAgICAgICAg
bWlnaHQgYmUgMS4wNjc3eCBmYXN0ZXIKICAgaW5saW5lLWdldC1zY29wZWQtdmFyICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMi4zMDE4Ky0wLjM3MDUgICAgICAgICAgICAyLjEwMzgrLTAu
MDc1NiAgICAgICAgICBtaWdodCBiZSAxLjA5NDF4IGZhc3RlcgogICBpbmxpbmVkLXB1dC1ieS1p
ZC10cmFuc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICA3LjE0OTQrLTAuMTYyNyAgICAgPyAg
ICAgIDcuNjc4NSstMC44MTkyICAgICAgICA/IG1pZ2h0IGJlIDEuMDc0MHggc2xvd2VyCiAgIGlu
bGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzcuOTE5OCstMy44Nzk3ICAg
ICA/ICAgICA0MC4xNzYxKy0wLjg1OTMgICAgICAgID8gbWlnaHQgYmUgMS4wNTk1eCBzbG93ZXIK
ICAgaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24gICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNi41MTc5Ky0wLjQ2
MjIgICAgICEgICAgIDM5Ljc4MjArLTAuMTY4MyAgICAgICAgISBkZWZpbml0ZWx5IDEuMDg5NHgg
c2xvd2VyCiAgIGluc3RhbmNlb2YtYm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMjAuNjM4NSstMC44NTkxICAgICAgICAgICAyMC40MzYyKy0xLjMwMjIgICAgICAgIAogICBp
bnQtb3Itb3RoZXItYWJzLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICA0LjExMjEr
LTAuMjY1NyAgICAgICAgICAgIDMuOTYxNCstMC4xNjk0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDM4
MHggZmFzdGVyCiAgIGludC1vci1vdGhlci1hYnMtemVyby10aGVuLWdldC1ieS12YWwgICAgICAg
ICAgICAgMTcuMTEyMistMS44ODg4ICAgICAgICAgICAxNS42ODkwKy0xLjMwODUgICAgICAgICAg
bWlnaHQgYmUgMS4wOTA3eCBmYXN0ZXIKICAgaW50LW9yLW90aGVyLWFkZC10aGVuLWdldC1ieS12
YWwgICAgICAgICAgICAgICAgICAgMy43MzA4Ky0wLjA1OTUgICAgID8gICAgICAzLjk0MjErLTAu
MzkzNCAgICAgICAgPyBtaWdodCBiZSAxLjA1NjZ4IHNsb3dlcgogICBpbnQtb3Itb3RoZXItYWRk
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjQ1NTcrLTAuMDI1MCAgICAgPyAg
ICAgIDQuNTU5OSstMC4xOTY4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIzNHggc2xvd2VyCiAgIGlu
dC1vci1vdGhlci1kaXYtdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgICAgIDMuMjc1Mist
MC4wMzkwICAgICBeICAgICAgMy4xNDk3Ky0wLjA4MjQgICAgICAgIF4gZGVmaW5pdGVseSAxLjAz
OTl4IGZhc3RlcgogICBpbnQtb3Itb3RoZXItbWF4LXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAg
ICAgICAgICAzLjY2NzIrLTAuMjA4NCAgICAgXiAgICAgIDMuMzU3MSstMC4wNDMyICAgICAgICBe
IGRlZmluaXRlbHkgMS4wOTI0eCBmYXN0ZXIKICAgaW50LW9yLW90aGVyLW1pbi10aGVuLWdldC1i
eS12YWwgICAgICAgICAgICAgICAgICAgMy40MjU4Ky0wLjE2OTAgICAgID8gICAgICAzLjQyODEr
LTAuMTQ3NyAgICAgICAgPwogICBpbnQtb3Itb3RoZXItbW9kLXRoZW4tZ2V0LWJ5LXZhbCAgICAg
ICAgICAgICAgICAgICAzLjM4NzgrLTAuMjg1MiAgICAgICAgICAgIDMuMjQ4NistMC4wNTQ2ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDQyOHggZmFzdGVyCiAgIGludC1vci1vdGhlci1tdWwtdGhlbi1n
ZXQtYnktdmFsICAgICAgICAgICAgICAgICAgIDUuMTAyMystMC4xODkyICAgICA/ICAgICAgNS4x
Nzc3Ky0wLjIzMjcgICAgICAgID8gbWlnaHQgYmUgMS4wMTQ4eCBzbG93ZXIKICAgaW50LW9yLW90
aGVyLW5lZy10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAgICAgICAgMy44MTk5Ky0wLjEyNjAg
ICAgICAgICAgICAzLjc0OTUrLTAuMDk2MiAgICAgICAgICBtaWdodCBiZSAxLjAxODh4IGZhc3Rl
cgogICBpbnQtb3Itb3RoZXItbmVnLXplcm8tdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgIDE1
LjM3MTArLTAuNzk5NCAgICAgPyAgICAgMTYuOTYzOSstMS44Mzk2ICAgICAgICA/IG1pZ2h0IGJl
IDEuMTAzNnggc2xvd2VyCiAgIGludC1vci1vdGhlci1zdWItdGhlbi1nZXQtYnktdmFsICAgICAg
ICAgICAgICAgICAgIDYuNjg5MystMS4xMzcwICAgICBeICAgICAgNC44MjYxKy0wLjI5NzggICAg
ICAgIF4gZGVmaW5pdGVseSAxLjM4NjF4IGZhc3RlcgogICBpbnQtb3Itb3RoZXItc3ViICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjk1OTIrLTAuNDYwNCAgICAgPyAgICAgIDQu
MjAxMSstMC41ODcyICAgICAgICA/IG1pZ2h0IGJlIDEuMDYxMXggc2xvd2VyCiAgIGludC1vdmVy
Zmxvdy1sb2NhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNjkxMCstMC4xMzI4
ICAgICA/ICAgICAgMy43NzUxKy0wLjM0MTcgICAgICAgID8gbWlnaHQgYmUgMS4wMjI4eCBzbG93
ZXIKICAgSW50MTZBcnJheS1hbGxvYy1sb25nLWxpdmVkICAgICAgICAgICAgICAgICAgICAgICAz
OC42MDQ1Ky0wLjY2MTIgICAgICAgICAgIDM3LjQ4MjkrLTAuNDgzMSAgICAgICAgICBtaWdodCBi
ZSAxLjAyOTl4IGZhc3RlcgogICBJbnQxNkFycmF5LWJ1YmJsZS1zb3J0LXdpdGgtYnl0ZUxlbmd0
aCAgICAgICAgICAgIDE1LjEzMDMrLTAuNjE3NSAgICAgPyAgICAgMTUuNDE2MCstMC44OTk3ICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDE4OXggc2xvd2VyCiAgIEludDE2QXJyYXktYnViYmxlLXNvcnQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUuMTM4MCstMC44MjA4ICAgICA/ICAgICAxNi41
MTYzKy0xLjA3NjIgICAgICAgID8gbWlnaHQgYmUgMS4wOTExeCBzbG93ZXIKICAgSW50MTZBcnJh
eS1sb2FkLWludC1tdWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS42MzM1Ky0wLjEwOTQg
ICAgICAgICAgICAxLjU3MjUrLTAuMDMzNSAgICAgICAgICBtaWdodCBiZSAxLjAzODh4IGZhc3Rl
cgogICBJbnQxNkFycmF5LXRvLUludDMyQXJyYXktc2V0ICAgICAgICAgICAgICAgICAgICAgIDM1
LjM1OTUrLTAuNDIwMiAgICAgPyAgICAgMzUuNTUxOCstMi4wOTA1ICAgICAgICA/CiAgIEludDMy
QXJyYXktYWxsb2MtbGFyZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEuNzM2OSstMC40
MjkxICAgICA/ICAgICAxMS43NDIxKy0wLjQ4MTMgICAgICAgID8KICAgSW50MzJBcnJheS1hbGxv
Yy1sb25nLWxpdmVkICAgICAgICAgICAgICAgICAgICAgICA0MS45NDkzKy0wLjMxNTcgICAgICAg
ICAgIDQxLjM1NTYrLTAuODYxMCAgICAgICAgICBtaWdodCBiZSAxLjAxNDR4IGZhc3RlcgogICBJ
bnQzMkFycmF5LWFsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjY1OTgr
LTAuMTcxMiAgICAgPyAgICAgIDIuNjYxNystMC4zMDkyICAgICAgICA/CiAgIEludDMyQXJyYXkt
SW50OEFycmF5LXZpZXctYWxsb2MgICAgICAgICAgICAgICAgICAgIDYuMjY1MCstMC4wOTMzICAg
ICAhICAgICAgNi40NTg0Ky0wLjA5MjIgICAgICAgICEgZGVmaW5pdGVseSAxLjAzMDl4IHNsb3dl
cgogICBpbnQ1Mi1zcGlsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0
LjYxOTErLTAuMDg0OCAgICAgICAgICAgIDQuNjAwNystMC4yMjM0ICAgICAgICAKICAgSW50OEFy
cmF5LWFsbG9jLWxvbmctbGl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAzNS43NTg5Ky0xLjAy
NzkgICAgIF4gICAgIDMzLjc5NzMrLTAuMjk3MyAgICAgICAgXiBkZWZpbml0ZWx5IDEuMDU4MHgg
ZmFzdGVyCiAgIEludDhBcnJheS1sb2FkLXdpdGgtYnl0ZUxlbmd0aCAgICAgICAgICAgICAgICAg
ICAgIDMuMzgxNystMC4xNzYyICAgICAgICAgICAgMy4zNjMzKy0wLjI2MTQgICAgICAgIAogICBJ
bnQ4QXJyYXktbG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjI5NDYr
LTAuMDMwNyAgICAgPyAgICAgIDMuNDYwNistMC4zNzQ3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDUw
NHggc2xvd2VyCiAgIGludGVnZXItZGl2aWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDkuOTE0NSstMC42MjQxICAgICAgICAgICAgOS42OTM4Ky0wLjE2NjMgICAgICAgICAg
bWlnaHQgYmUgMS4wMjI4eCBmYXN0ZXIKICAgaW50ZWdlci1tb2R1bG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMS44NDcwKy0wLjA3NzEgICAgICAgICAgICAxLjgzNTArLTAu
MDYwOSAgICAgICAgCiAgIGlzLWJvb2xlYW4tZm9sZC10cmlja3kgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDIuNjg3MystMC4wNTg0ICAgICAgICAgICAgMi42Nzk5Ky0wLjAzMTcgICAgICAg
IAogICBpcy1ib29sZWFuLWZvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
LjA0MTgrLTAuMDY0MCAgICAgICAgICAgIDEuOTk1NystMC4wMTgxICAgICAgICAgIG1pZ2h0IGJl
IDEuMDIzMXggZmFzdGVyCiAgIGlzLWZ1bmN0aW9uLWZvbGQtdHJpY2t5LWludGVybmFsLWZ1bmN0
aW9uICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDkuNTIyMystMC41ODkxICAgICAgICAgICAgOS41MTAxKy0wLjk1NTAgICAgICAgIAogICBp
cy1mdW5jdGlvbi1mb2xkLXRyaWNreSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjg0MDAr
LTAuMDY3MiAgICAgPyAgICAgIDMuMDY5MystMC4zMTI1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDgw
OHggc2xvd2VyCiAgIGlzLWZ1bmN0aW9uLWZvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDIuMDQwOSstMC4xMDE0ICAgICAgICAgICAgMS45NzMyKy0wLjA1MzMgICAgICAgICAg
bWlnaHQgYmUgMS4wMzQzeCBmYXN0ZXIKICAgaXMtbnVtYmVyLWZvbGQtdHJpY2t5ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMi44MDUyKy0wLjA3NjggICAgID8gICAgICAyLjg5MjUrLTAu
MzU3MyAgICAgICAgPyBtaWdodCBiZSAxLjAzMTF4IHNsb3dlcgogICBpcy1udW1iZXItZm9sZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjAyMzErLTAuMDUyNSAgICAgPyAg
ICAgIDIuMTE1NCstMC4xNzE0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDQ1Nnggc2xvd2VyCiAgIGlz
LW9iamVjdC1vci1udWxsLWZvbGQtZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgIDIuMTMwNSst
MC4xMzEwICAgICA/ICAgICAgMi4xNTk1Ky0wLjI1ODAgICAgICAgID8gbWlnaHQgYmUgMS4wMTM2
eCBzbG93ZXIKICAgaXMtb2JqZWN0LW9yLW51bGwtZm9sZC1sZXNzLXRyaWNreSAgICAgICAgICAg
ICAgICAgMi44NzMzKy0wLjE1NTcgICAgICAgICAgICAyLjc2NTkrLTAuMDM3NCAgICAgICAgICBt
aWdodCBiZSAxLjAzODh4IGZhc3RlcgogICBpcy1vYmplY3Qtb3ItbnVsbC1mb2xkLXRyaWNreSAg
ICAgICAgICAgICAgICAgICAgICAzLjIxNjYrLTAuMzQxMyAgICAgPyAgICAgIDMuMjgwNSstMC4z
NzY5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE5OXggc2xvd2VyCiAgIGlzLW9iamVjdC1vci1udWxs
LWZvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMDI1NistMC4wNDczICAgICA/ICAg
ICAgMi4wNTQ4Ky0wLjA4OTEgICAgICAgID8gbWlnaHQgYmUgMS4wMTQ0eCBzbG93ZXIKICAgaXMt
b2JqZWN0LW9yLW51bGwtdHJpY2tpZXItZnVuY3Rpb24gICAgICAgICAgICAgICAgMy4wOTQ1Ky0w
LjQ3NDYgICAgICAgICAgICAyLjg4MjUrLTAuMDY4NiAgICAgICAgICBtaWdodCBiZSAxLjA3MzV4
IGZhc3RlcgogICBpcy1vYmplY3Qtb3ItbnVsbC10cmlja2llci1pbnRlcm5hbC1mdW5jdGlvbiAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5
LjA3MzQrLTAuMzQ5OSAgICAgPyAgICAgIDkuNjAwMSstMC40OTMxICAgICAgICA/IG1pZ2h0IGJl
IDEuMDU4MXggc2xvd2VyCiAgIGlzLW9iamVjdC1vci1udWxsLXRyaWNreS1mdW5jdGlvbiAgICAg
ICAgICAgICAgICAgIDIuOTY1NCstMC40NjA2ICAgICAgICAgICAgMi44NTAzKy0wLjA1MzggICAg
ICAgICAgbWlnaHQgYmUgMS4wNDA0eCBmYXN0ZXIKICAgaXMtb2JqZWN0LW9yLW51bGwtdHJpY2t5
LWludGVybmFsLWZ1bmN0aW9uICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDYuNDQwNystMC4xMDIzICAgICA/ICAgICAgNi41NDMyKy0wLjEw
NjkgICAgICAgID8gbWlnaHQgYmUgMS4wMTU5eCBzbG93ZXIKICAgaXMtc3RyaW5nLWZvbGQtdHJp
Y2t5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi43MjU1Ky0wLjA2NjMgICAgID8gICAg
ICAyLjk0NjArLTAuMzcyMCAgICAgICAgPyBtaWdodCBiZSAxLjA4MDl4IHNsb3dlcgogICBpcy1z
dHJpbmctZm9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjAxNzgrLTAu
MDc1OSAgICAgICAgICAgIDEuOTczMCstMC4wMTM1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIyN3gg
ZmFzdGVyCiAgIGlzLXVuZGVmaW5lZC1mb2xkLXRyaWNreSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDIuNDA0NystMC4wMzkzICAgICA/ICAgICAgMi41MjYwKy0wLjE5OTcgICAgICAgID8gbWln
aHQgYmUgMS4wNTA1eCBzbG93ZXIKICAgaXMtdW5kZWZpbmVkLWZvbGQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMi4wNzgwKy0wLjI5MTEgICAgICAgICAgICAyLjA2ODUrLTAuMjA3
NiAgICAgICAgCiAgIEpTT05QLW5lZ2F0aXZlLTAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAuMjAxNSstMC4wMTQ0ICAgICA/ICAgICAgMC4yMDQ0Ky0wLjAxOTcgICAgICAgID8g
bWlnaHQgYmUgMS4wMTQ1eCBzbG93ZXIKICAgbGFyZ2UtaW50LWNhcHR1cmVkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMy4yMjUzKy0wLjE5NjggICAgICAgICAgICAzLjIwMjcrLTAu
MTk4NyAgICAgICAgCiAgIGxhcmdlLWludC1uZWcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDkuNTcxMistMC43NjA2ICAgICAgICAgICAgOS40NjkyKy0wLjg3MDkgICAgICAg
ICAgbWlnaHQgYmUgMS4wMTA4eCBmYXN0ZXIKICAgbGFyZ2UtaW50ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNy43MDk0Ky0wLjMzMzcgICAgID8gICAgICA3LjkwOTMr
LTAuNDUxNiAgICAgICAgPyBtaWdodCBiZSAxLjAyNTl4IHNsb3dlcgogICBsYXp5LWFycmF5LXNw
ZWNpZXMtd2F0Y2hwb2ludHMgICAgICAgICAgICAgICAgICAgIDE5Ljk5NzYrLTAuNjgyOCAgICAg
ISAgICAgMjIuOTI3OSstMC41OTI1ICAgICAgICAhIGRlZmluaXRlbHkgMS4xNDY1eCBzbG93ZXIK
ICAgbGljbS1kcmFnb25zLW91dC1vZi1ib3VuZHMgICAgICAgICAgICAgICAgICAgICAgICAzMi42
OTUxKy0yLjIyNjEgICAgICAgICAgIDMwLjk0NDgrLTEuMjIwNSAgICAgICAgICBtaWdodCBiZSAx
LjA1NjZ4IGZhc3RlcgogICBsaWNtLWRyYWdvbnMtb3ZlcmZsb3cgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDE4LjMzMTYrLTAuNjMxNiAgICAgPyAgICAgMTguNzI5NystMS4yNjkxICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDIxN3ggc2xvd2VyCiAgIGxpY20tZHJhZ29ucyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMzUuMDYzNSstMi4xMDU4ICAgICAgICAgICAzNS4wMzA5
Ky0yLjI0MjUgICAgICAgIAogICBsb2FkLXZhcmFyZ3MtZWxpbWluYXRpb24gICAgICAgICAgICAg
ICAgICAgICAgICAgIDE5LjI4MDcrLTEuMTk2NyAgICAgICAgICAgMTguMTY4MystMC44NDYzICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDYxMnggZmFzdGVyCiAgIGxvY2FsZS1jb21wYXJlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEuNTg0OSstMS4xMzAxICAgICA/ICAgICAyMi40
NjYzKy0xLjgzMjMgICAgICAgID8gbWlnaHQgYmUgMS4wNDA4eCBzbG93ZXIKICAgbG9naWNhbC1u
b3Qtd2VpcmQtdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi40NTIxKy0wLjE1Mjkg
ICAgICAgICAgICAyLjMzNTcrLTAuMDg2MiAgICAgICAgICBtaWdodCBiZSAxLjA0OTh4IGZhc3Rl
cgogICBsb2dpY2FsLW5vdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAz
LjYyMDUrLTAuNDQxOCAgICAgICAgICAgIDMuNDc2MystMC4wMzY0ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDQxNXggZmFzdGVyCiAgIGxvdHMtb2YtZmllbGRzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDguMDUwMCstMC4yMjcwICAgICAgICAgICAgNy44ODIwKy0wLjIyODUgICAg
ICAgICAgbWlnaHQgYmUgMS4wMjEzeCBmYXN0ZXIKICAgbWFrZS1pbmRleGVkLXN0b3JhZ2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMi42OTk5Ky0wLjUxODUgICAgID8gICAgICAyLjgx
NTUrLTAuMTQ1MCAgICAgICAgPyBtaWdodCBiZSAxLjA0Mjh4IHNsb3dlcgogICBtYWtlLXJvcGUt
Y3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjE3ODkrLTAuMjY0OCAg
ICAgICAgICAgIDMuMDk0NistMC4wOTE5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI3MnggZmFzdGVy
CiAgIG1hbnktZm9yZWFjaC1jYWxscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIu
NjE3OSstMC40MTA3ICAgICAgICAgICAgMi40MjU4Ky0wLjEzNzUgICAgICAgICAgbWlnaHQgYmUg
MS4wNzkyeCBmYXN0ZXIKICAgbWFueS1yZXBlYXQtc3RvcmVzICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxNS40NTY0Ky0xLjQyNzcgICAgICAgICAgIDE1LjQwMDIrLTAuNzQ2NCAgICAg
ICAgCiAgIG1hcC1mb3ItZWFjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDQuNDk5NSstMC4wOTg5ICAgICA/ICAgICAgNC41Nzk4Ky0wLjE0MzcgICAgICAgID8gbWlnaHQg
YmUgMS4wMTc5eCBzbG93ZXIKICAgbWFwLWZvci1vZiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxNy42OTgwKy0wLjg1ODYgICAgID8gICAgIDE4LjgxNjgrLTAuODQwMSAg
ICAgICAgPyBtaWdodCBiZSAxLjA2MzJ4IHNsb3dlcgogICBtYXJzYWdsaWEtbGFyZ2VyLWludHMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxLjg1MTErLTAuMzA1MiAgICAgICAgICAgNjEu
ODQ5NCstMC4zNzg3ICAgICAgICAKICAgbWFyc2FnbGlhLW9zci1lbnRyeSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxNi45ODc4Ky0xLjU2NjggICAgID8gICAgIDE3LjM5MjErLTEuMzA2
NiAgICAgICAgPyBtaWdodCBiZSAxLjAyMzh4IHNsb3dlcgogICBtYXRoLXJhbmRvbSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzLjg5MjArLTAuNDY2NiAgICAgICAgICAg
MTMuNzY4NCstMC45MzQwICAgICAgICAKICAgbWF0aC10cnVuYyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNS41NTAzKy0wLjM4OTEgICAgICAgICAgICA1LjM1NDkrLTAu
MDUzOCAgICAgICAgICBtaWdodCBiZSAxLjAzNjV4IGZhc3RlcgogICBtYXRoLXdpdGgtb3V0LW9m
LWJvdW5kcy1hcnJheS12YWx1ZXMgICAgICAgICAgICAgIDI2Ljg4MzYrLTEuMjIxMyAgICAgPyAg
ICAgMjcuNjg3NSstMy4zNDE5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDI5OXggc2xvd2VyCiAgIG1h
eC1ib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMTU2MCst
MC4xMTYzICAgICAgICAgICAgMi4xMTI3Ky0wLjA3NTQgICAgICAgICAgbWlnaHQgYmUgMS4wMjA1
eCBmYXN0ZXIKICAgbWVnYW1vcnBoaWMtbG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyOC4yNjIyKy00LjQ2MTUgICAgICAgICAgIDI3LjkxNTQrLTMuODUxOSAgICAgICAgICBt
aWdodCBiZSAxLjAxMjR4IGZhc3RlcgogICBtZXRob2Qtb24tbnVtYmVyICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDE0LjYxOTIrLTAuNzM4MyAgICAgICAgICAgMTQuNDIzMystMC42
MzczICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzNnggZmFzdGVyCiAgIG1pbi1ib29sZWFuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMTI4NistMC4xMzAxICAgICA/ICAg
ICAgMi4yMDU4Ky0wLjEzOTEgICAgICAgID8gbWlnaHQgYmUgMS4wMzYzeCBzbG93ZXIKICAgbWlu
dXMtYm9vbGVhbi1kb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4yNjc4Ky0w
LjMxMTcgICAgICAgICAgICAyLjIwNjcrLTAuMDcyNiAgICAgICAgICBtaWdodCBiZSAxLjAyNzd4
IGZhc3RlcgogICBtaW51cy1ib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxLjk1MDkrLTAuMjA5NyAgICAgICAgICAgIDEuODcxNistMC4wNDEwICAgICAgICAgIG1p
Z2h0IGJlIDEuMDQyNHggZmFzdGVyCiAgIG1pc2MtYnVncy04NDczODktanBlZzIwMDAgICAgICAg
ICAgICAgICAgICAgICAgIDM4MzAuODIwMystMTcuODA0MCAgICA/ICAgMzgzNi44NzI3Ky04Ny4z
NDk5ICAgICAgID8KICAgbWlzYy1zdHJpY3QtZXEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxOS41NDkyKy0wLjgwNzAgICAgID8gICAgIDE5LjU4MTcrLTEuNTU5OCAgICAgICAg
PwogICBtb2QtYm9vbGVhbi1kb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4
Ljk0MDArLTAuNDc3NSAgICAgICAgICAgIDguNjIwOCstMC4xMDkxICAgICAgICAgIG1pZ2h0IGJl
IDEuMDM3MHggZmFzdGVyCiAgIG1vZC1ib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDYuNjE0NistMC4xMjcyICAgICA/ICAgICAgNi42MjM4Ky0wLjA2ODcgICAg
ICAgID8KICAgbXVsLWJvb2xlYW4tZG91YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMi45OTEzKy0wLjQ3NzQgICAgICAgICAgICAyLjU2MjMrLTAuMDgyMyAgICAgICAgICBtaWdo
dCBiZSAxLjE2NzR4IGZhc3RlcgogICBtdWwtYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyLjE0ODkrLTAuMDMwMSAgICAgPyAgICAgIDIuMzY2MCstMC4zMTY2
ICAgICAgICA/IG1pZ2h0IGJlIDEuMTAxMXggc2xvd2VyCiAgIG5lZy1ib29sZWFuICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMjQ3MCstMC4wNjQzICAgICAgICAgICAg
Mi4yMTU0Ky0wLjAzMzkgICAgICAgICAgbWlnaHQgYmUgMS4wMTQzeCBmYXN0ZXIKICAgbmVnYXRp
dmUtemVyby1kaXZpZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNzMwKy0wLjAx
MjIgICAgID8gICAgICAwLjI5NTkrLTAuMDIzNCAgICAgICAgPyBtaWdodCBiZSAxLjA4Mzh4IHNs
b3dlcgogICBuZWdhdGl2ZS16ZXJvLW1vZHVsbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLjMwMTYrLTAuMDE2OSAgICAgPyAgICAgIDAuMzE4MistMC4wNTkzICAgICAgICA/IG1pZ2h0
IGJlIDEuMDU1Mnggc2xvd2VyCiAgIG5lZ2F0aXZlLXplcm8tbmVnYXRlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuMjgxNystMC4wMjU4ICAgICAgICAgICAgMC4yNzE1Ky0wLjAyMjgg
ICAgICAgICAgbWlnaHQgYmUgMS4wMzc1eCBmYXN0ZXIKICAgbmVzdGVkLWZ1bmN0aW9uLXBhcnNp
bmcgICAgICAgICAgICAgICAgICAgICAgICAgICAzMS42OTQzKy0wLjE4MjYgICAgID8gICAgIDMx
Ljg1NDkrLTAuNTAxNiAgICAgICAgPwogICBuZXctYXJyYXktYnVmZmVyLWRlYWQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDczLjEwNzArLTIuNDk3MyAgICAgXiAgICAgNTcuOTA4MystMC4y
ODcwICAgICAgICBeIGRlZmluaXRlbHkgMS4yNjI1eCBmYXN0ZXIKICAgbmV3LWFycmF5LWJ1ZmZl
ci1wdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS4wNjgxKy0wLjM1MTUgICAgIF4g
ICAgICA0LjI1NTErLTAuNDA2NiAgICAgICAgXiBkZWZpbml0ZWx5IDEuMTkxMXggZmFzdGVyCiAg
IG5ldy1hcnJheS1kZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuNDE0
MCstMC4xMDgyICAgICAgICAgICAgNi4zMzI2Ky0wLjEzODEgICAgICAgICAgbWlnaHQgYmUgMS4w
MTI5eCBmYXN0ZXIKICAgbmV3LWFycmF5LXB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi45MDg0Ky0wLjA3NDYgICAgID8gICAgICAzLjAwNDMrLTAuMzY1MyAgICAgICAg
PyBtaWdodCBiZSAxLjAzMzB4IHNsb3dlcgogICBuby1pbmxpbmUtY29uc3RydWN0b3IgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDI4LjQ4MzIrLTEuMzIyMyAgICAgICAgICAgMjcuNzg1OCst
MC4yMTEzICAgICAgICAgIG1pZ2h0IGJlIDEuMDI1MXggZmFzdGVyCiAgIE51bWJlci1pc05hTiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAuMjgwMystMC40ODAzICAgICA/
ICAgICAxMC40MDMxKy0wLjgwMTUgICAgICAgID8gbWlnaHQgYmUgMS4wMTE5eCBzbG93ZXIKICAg
bnVtYmVyLXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi42OTUy
Ky0wLjA0MjUgICAgID8gICAgICAyLjgyODIrLTAuMjIwMiAgICAgICAgPyBtaWdodCBiZSAxLjA0
OTN4IHNsb3dlcgogICBvYmplY3QtYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA0Ljc2OTYrLTAuMjU1MyAgICAgPyAgICAgIDQuNzk4NystMC4zMjU3ICAgICAgICA/
CiAgIG9iamVjdC1jbG9zdXJlLWNhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQu
NDc1MystMC4xNDYyICAgICAgICAgICAgNC4zNzA3Ky0wLjAzMzIgICAgICAgICAgbWlnaHQgYmUg
MS4wMjM5eCBmYXN0ZXIKICAgb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy1vbi1sYXJn
ZS1hcnJheSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLjk0OTArLTAuMDE3MyAgICAgISAgICAgIDEuMjA1NystMC4yMTczICAgICAgICAh
IGRlZmluaXRlbHkgMS4yNzA1eCBzbG93ZXIKICAgb2JqZWN0LWludC1hZGQtYXJyYXkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxMC4xOTgzKy0wLjEyMzIgICAgICAgICAgIDEwLjE5MjUr
LTAuMDU4NyAgICAgICAgCiAgIG9iamVjdC1pbnQtYWRkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMTIuNzc4MSstMC40Njg3ICAgICAgICAgICAxMi40MzUwKy0wLjQwODkgICAg
ICAgICAgbWlnaHQgYmUgMS4wMjc2eCBmYXN0ZXIKICAgb2JqZWN0LWludC1hbmQtYXJyYXkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxMC40NDM2Ky0wLjQ4MDkgICAgICAgICAgIDEwLjMw
NjErLTAuMTc3MSAgICAgICAgICBtaWdodCBiZSAxLjAxMzN4IGZhc3RlcgogICBvYmplY3QtaW50
LW11bC1hcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjIyNDErLTEuMTcxNSAg
ICAgICAgICAgIDkuMTQ2NistMC40ODkzICAgICAgICAKICAgb2JqZWN0LWludC1zdWItYXJyYXkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy41MTI3Ky0wLjExMzggICAgID8gICAgICA3
LjY4MDMrLTAuMzgzMyAgICAgICAgPyBtaWdodCBiZSAxLjAyMjN4IHNsb3dlcgogICBvYmplY3Qt
aW50LXN1YiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLjI3MzIrLTAuMTMx
NSAgICAgPyAgICAgMTIuNTQyMistMC40MDk4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIxOXggc2xv
d2VyCiAgIG9iamVjdC1sc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDQuNjU4MSstMC4wNzk5ICAgICA/ICAgICAgNC43MTExKy0wLjA3NjcgICAgICAgID8gbWlnaHQg
YmUgMS4wMTE0eCBzbG93ZXIKICAgb2JqZWN0LW9yICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNC43MDEyKy0wLjA2ODUgICAgID8gICAgICA0Ljg1ODMrLTAuMjE2OSAg
ICAgICAgPyBtaWdodCBiZSAxLjAzMzR4IHNsb3dlcgogICBvYmplY3QtcnNoaWZ0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ljc0NzcrLTAuMjQ0NiAgICAgPyAgICAgIDUu
MTExNCstMC43MjI3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDc2Nnggc2xvd2VyCiAgIG9iamVjdC10
ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNDY5MistMC4wMzIx
ICAgICA/ICAgICAgMi40NzczKy0wLjAzMjkgICAgICAgID8KICAgb2JqZWN0LXVyc2hpZnQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC44NzMwKy0wLjMzNzAgICAgID8gICAg
ICA0LjkxNTArLTAuNDY5OSAgICAgICAgPwogICBvYmplY3QteG9yICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA0Ljk1NzMrLTAuNTkyNSAgICAgICAgICAgIDQuNzIyNist
MC4wNTM5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDQ5N3ggZmFzdGVyCiAgIG9idmlvdXMtc2luay1w
YXRob2xvZ3ktdGFrZW4gICAgICAgICAgICAgICAgICAgICAxMDUuMjIyMSstMC42MzU2ICAgICA/
ICAgIDEwNS44ODcwKy0xLjc0MDEgICAgICAgID8KICAgb2J2aW91cy1zaW5rLXBhdGhvbG9neSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxNy42ODQxKy0wLjgzMjggICAgICAgICAgIDE3LjQw
ODcrLTEuMzI5NiAgICAgICAgICBtaWdodCBiZSAxLjAxNTh4IGZhc3RlcgogICBvYnZpb3VzbHkt
ZWxpZGFibGUtbmV3LW9iamVjdCAgICAgICAgICAgICAgICAgICAgIDE1LjQ5ODErLTAuNzU1OSAg
ICAgPyAgICAgMTUuNjA5NSstMC41OTMyICAgICAgICA/CiAgIHBsdXMtYm9vbGVhbi1hcml0aCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuOTU4MCstMC4wNDU4ICAgICA/ICAgICAg
Mi4wNjA4Ky0wLjMzODAgICAgICAgID8gbWlnaHQgYmUgMS4wNTI1eCBzbG93ZXIKICAgcGx1cy1i
b29sZWFuLWRvdWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4yMTk1Ky0wLjA5
NDAgICAgICAgICAgICAyLjE5NTQrLTAuMDM3MyAgICAgICAgICBtaWdodCBiZSAxLjAxMTB4IGZh
c3RlcgogICBwbHVzLWJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxLjg0MDQrLTAuMDUwOSAgICAgPyAgICAgIDEuODk0MCstMC4xMTM0ICAgICAgICA/IG1pZ2h0
IGJlIDEuMDI5MXggc2xvd2VyCiAgIHBvbHktY2hhaW4tYWNjZXNzLWRpZmZlcmVudC1wcm90b3R5
cGVzLXNpbXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyLjI0NjkrLTAuMDQ0NCAgICAgPyAgICAgIDIuMzYyNistMC4xODIyICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDUxNXggc2xvd2VyCiAgIHBvbHktY2hhaW4tYWNjZXNzLWRpZmZlcmVu
dC1wcm90b3R5cGVzICAgICAgICAgICAgIDIuMjc2NSstMC4wNDAxICAgICA/ICAgICAgMi4zMjcx
Ky0wLjIzMjcgICAgICAgID8gbWlnaHQgYmUgMS4wMjIyeCBzbG93ZXIKICAgcG9seS1jaGFpbi1h
Y2Nlc3Mtc2ltcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgMi4zMTIzKy0wLjExOTEgICAg
ICAgICAgICAyLjIzNTgrLTAuMDUzMSAgICAgICAgICBtaWdodCBiZSAxLjAzNDJ4IGZhc3Rlcgog
ICBwb2x5LWNoYWluLWFjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjM2
MjYrLTAuMjk5OCAgICAgICAgICAgIDIuMTkzNistMC4wNDExICAgICAgICAgIG1pZ2h0IGJlIDEu
MDc3MHggZmFzdGVyCiAgIHBvbHktc3RyaWN0ZXEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNDYuOTYxNCstMC41MTYzICAgICAgICAgICA0Ni4zMzA1Ky0wLjEzNTEgICAgICAg
ICAgbWlnaHQgYmUgMS4wMTM2eCBmYXN0ZXIKICAgcG9seW1vcnBoaWMtYXJyYXktY2FsbCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMS4zMDI3Ky0wLjA3NjAgICAgID8gICAgICAxLjMzNTIr
LTAuMjExNyAgICAgICAgPyBtaWdodCBiZSAxLjAyNTB4IHNsb3dlcgogICBwb2x5bW9ycGhpYy1n
ZXQtYnktaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjg2NTUrLTAuMDY3NCAgICAg
ICAgICAgIDEuODE5NystMC4wNDU5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI1MnggZmFzdGVyCiAg
IHBvbHltb3JwaGljLXB1dC1ieS1pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQuMzc0
OSstMS42Njc4ICAgICAgICAgICAyMy45MzAxKy0xLjUwNTQgICAgICAgICAgbWlnaHQgYmUgMS4w
MTg2eCBmYXN0ZXIKICAgcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZyAgICAgICAg
ICAgICAgICAyNS41NDg5Ky0xLjMzMzIgICAgICAgICAgIDI1LjMxMDkrLTEuNzczNCAgICAgICAg
CiAgIHBvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wgICAgICAgICAgICAgICAgMjQu
ODI5NystMS4xMDQwICAgICAgICAgICAyMy44ODkwKy0xLjM3NDcgICAgICAgICAgbWlnaHQgYmUg
MS4wMzk0eCBmYXN0ZXIKICAgcG9seW1vcnBoaWMtc3RydWN0dXJlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxMi40OTY2Ky0xLjM0OTkgICAgICAgICAgIDEyLjQ3MzMrLTAuOTI4NyAgICAg
ICAgCiAgIHBvbHl2YXJpYW50LW1vbm9tb3JwaGljLWdldC1ieS1pZCAgICAgICAgICAgICAgICAg
IDMuNDQ1MistMC4zNjk0ICAgICAgICAgICAgMy4yODc3Ky0wLjAzMjAgICAgICAgICAgbWlnaHQg
YmUgMS4wNDc5eCBmYXN0ZXIKICAgcHJldmVudC1leHRlbnNpb25zLWFuZC1kby13b3JrICAgICAg
ICAgICAgICAgICAgICAxMi42MjA2Ky0wLjU5OTkgICAgICAgICAgIDEyLjM5OTYrLTAuNTkyNCAg
ICAgICAgICBtaWdodCBiZSAxLjAxNzh4IGZhc3RlcgogICBwcm90by1nZXR0ZXItYWNjZXNzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLjY5MzMrLTEuMzQ5MyAgICAgICAgICAgMTAu
MTQ4MSstMC4xNTM2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDUzN3ggZmFzdGVyCiAgIHByb3RvdHlw
ZS1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1wcm90b3R5cGUgICAgICAgICAgIDQuNDc4MSstMC4zNTk5
ICAgICAgICAgICAgNC4yMzYwKy0wLjEzMzUgICAgICAgICAgbWlnaHQgYmUgMS4wNTcyeCBmYXN0
ZXIKICAgcHV0LWJ5LWlkLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24gICAgICAgICAgICAgICAgICAg
Ny4xNzQ4Ky0wLjY4MjkgICAgICAgICAgICA2LjU4OTkrLTAuNTg2MCAgICAgICAgICBtaWdodCBi
ZSAxLjA4ODh4IGZhc3RlcgogICBwdXQtYnktaWQtc2xpZ2h0bHktcG9seW1vcnBoaWMgICAgICAg
ICAgICAgICAgICAgICAyLjY0NTIrLTAuNTE3MSAgICAgICAgICAgIDIuMzAxNCstMC4xMDQ5ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMTQ5NHggZmFzdGVyCiAgIHB1dC1ieS1pZC10cmFuc2l0aW9uLXdp
dGgtaW5kZXhpbmctaGVhZGVyICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTAuNTczNCstMC45OTY4ICAgICA/ICAgICAxMS45MTc2Ky0xLjA1
NjAgICAgICAgID8gbWlnaHQgYmUgMS4xMjcxeCBzbG93ZXIKICAgcHV0LWJ5LWlkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC44NTg0Ky0wLjU1OTEgICAgID8gICAg
ICA5LjI0NDErLTEuMDUwMSAgICAgICAgPyBtaWdodCBiZSAxLjA0MzV4IHNsb3dlcgogICBwdXQt
YnktdmFsLWRpcmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI3MjMrLTAu
MDI0MiAgICAgPyAgICAgIDAuMjg2MCstMC4wMTIyICAgICAgICA/IG1pZ2h0IGJlIDEuMDUwMXgg
c2xvd2VyCiAgIHB1dC1ieS12YWwtbGFyZ2UtaW5kZXgtYmxhbmstaW5kZXhpbmctdHlwZSAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjE5
MzQrLTAuMDk1NyAgICAgISAgICAgIDUuMTE5NistMC4xODU2ICAgICAgICAhIGRlZmluaXRlbHkg
MS4yMjA5eCBzbG93ZXIKICAgcHV0LWJ5LXZhbC1tYWNoaW5lLWludCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMi41MTM5Ky0wLjE0ODQgICAgID8gICAgICAyLjYwNDYrLTAuMDk3MyAgICAg
ICAgPyBtaWdodCBiZSAxLjAzNjF4IHNsb3dlcgogICBwdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJl
cGxhY2UtYW5kLXRyYW5zaXRpb24gICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOS43NjA2Ky0wLjUyMjIgICAgID8gICAgICA5LjgyODcrLTAu
MzkyMiAgICAgICAgPwogICBwdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3Jw
aGljICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDIuOTcyNystMC4wNjI4ICAgICAgICAgICAgMi45NTcyKy0wLjAzNTIgICAgICAgIAogICBw
dXQtYnktdmFsLXdpdGgtc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjA2MDIr
LTAuNDE3MiAgICAgPyAgICAgIDkuMTQ4NCstMC4yNzM2ICAgICAgICA/CiAgIHB1dC1ieS12YWwt
d2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbiAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjMwOTUrLTAuMzk4MyAgICAgICAg
ICAgIDkuMTg5NistMC45NDg0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzMHggZmFzdGVyCiAgIHB1
dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4zNzY2Ky0wLjAxMjIg
ICAgID8gICAgICAyLjU3NjgrLTAuMzU0MyAgICAgICAgPyBtaWdodCBiZSAxLjA4NDJ4IHNsb3dl
cgogICBwdXQtYnktdmFsLXdpdGgtc3ltYm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5
LjEzNjYrLTAuNDQ3MSAgICAgPyAgICAgIDkuMjIxOCstMC41NDExICAgICAgICA/CiAgIHJhcmUt
b3NyLWV4aXQtb24tbG9jYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEuMDU4OSstMC41
NDg5ICAgICAgICAgICAxMS4wMjMwKy0wLjQ2NDYgICAgICAgIAogICByYXl0cmFjZS13aXRoLWVt
cHR5LXRyeS1jYXRjaCAgICAgICAgICAgICAgICAgICAgICA0LjgyMzIrLTAuMTExNCAgICAgPyAg
ICAgIDUuMDg1MystMC40NjgwICAgICAgICA/IG1pZ2h0IGJlIDEuMDU0NHggc2xvd2VyCiAgIHJh
eXRyYWNlLXdpdGgtdHJ5LWNhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNTExMCst
MC4xODQxICAgICA/ICAgICAgNy41NTQzKy0wLjE1MjYgICAgICAgID8KICAgcmVnZXhwLWV4ZWMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMi42NDAxKy0wLjcxOTcgICAg
ICAgICAgIDMxLjExMTIrLTEuMDIwNiAgICAgICAgICBtaWdodCBiZSAxLjA0OTF4IGZhc3Rlcgog
ICByZWdleHAtbGFzdC1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjQw
MDQrLTAuMjU0MSAgICAgPyAgICAgIDguNDY4NystMC40ODcyICAgICAgICA/CiAgIHJlZ2V4cC1w
cm90b3R5cGUtaXMtbm90LWluc3RhbmNlICAgICAgICAgICAgICAgICAgIDAuMzY4OSstMC4wOTE3
ICAgICAgICAgICAgMC4zNTI1Ky0wLjA0OTkgICAgICAgICAgbWlnaHQgYmUgMS4wNDY0eCBmYXN0
ZXIKICAgcmVnZXhwLXByb3RvdHlwZS1zZWFyY2gtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC43
MTkyKy0wLjA0MDAgICAgID8gICAgICAwLjc4NzcrLTAuMTE1MSAgICAgICAgPyBtaWdodCBiZSAx
LjA5NTJ4IHNsb3dlcgogICByZWdleHAtcHJvdG90eXBlLXNlYXJjaC1vYnNlcnZhYmxlLXNpZGUt
ZWZmZWN0czIgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMC4yNDIyKy0wLjAyMTAgICAgID8gICAgICAwLjI1MjgrLTAuMDE2MCAgICAgICAg
PyBtaWdodCBiZSAxLjA0Mzh4IHNsb3dlcgogICByZWdleHAtcHJvdG90eXBlLXNwbGl0LW9ic2Vy
dmFibGUtc2lkZS1lZmZlY3RzICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEuMTM3OSstMC4wOTUzICAgICAgICAgICAgMS4wODkyKy0wLjA0
MjEgICAgICAgICAgbWlnaHQgYmUgMS4wNDQ3eCBmYXN0ZXIKICAgcmVnZXhwLXByb3RvdHlwZS1z
cGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0czIgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNzMyKy0wLjAzNzYgICAgICAgICAgICAw
LjI2ODcrLTAuMDQxMSAgICAgICAgICBtaWdodCBiZSAxLjAxNjh4IGZhc3RlcgogICByZWdleHAt
cHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMy1mbGFncyAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI3MDIrLTAu
MDMxNCAgICAgICAgICAgIDAuMjYzNCstMC4wMDg1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI1Nngg
ZmFzdGVyCiAgIHJlZ2V4cC1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMz
LWdsb2JhbCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLjI1MTMrLTAuMDA4OCAgICAgPyAgICAgIDAuMzE1MSstMC4wNjg3ICAgICAgICA/
IG1pZ2h0IGJlIDEuMjU0M3ggc2xvd2VyCiAgIHJlZ2V4cC1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2
YWJsZS1zaWRlLWVmZmVjdHMzLWlnbm9yZUNhc2UgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNzY4Ky0wLjAyNTUgICAgICAgICAgICAw
LjI2NjYrLTAuMDI4NCAgICAgICAgICBtaWdodCBiZSAxLjAzODJ4IGZhc3RlcgogICByZWdleHAt
cHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMy1tdWx0aWxpbmUgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yODMy
Ky0wLjAzOTEgICAgICAgICAgICAwLjI3NDYrLTAuMDQyOCAgICAgICAgICBtaWdodCBiZSAxLjAz
MTN4IGZhc3RlcgogICByZWdleHAtcHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1lZmZl
Y3RzMy1zdGlja3kgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMC4yNjU3Ky0wLjAyMTUgICAgID8gICAgICAwLjI3MjYrLTAuMDMwNiAgICAg
ICAgPyBtaWdodCBiZSAxLjAyNjJ4IHNsb3dlcgogICByZWdleHAtcHJvdG90eXBlLXNwbGl0LW9i
c2VydmFibGUtc2lkZS1lZmZlY3RzMy11bmljb2RlICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjkzNSstMC4wNTQ2ICAgICAgICAgICAg
MC4yNjcxKy0wLjAxNzEgICAgICAgICAgbWlnaHQgYmUgMS4wOTg3eCBmYXN0ZXIKICAgcmVnZXhw
LXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0czQgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNjY4Ky0wLjAxNDAg
ICAgID8gICAgICAwLjI3ODUrLTAuMDEyNSAgICAgICAgPyBtaWdodCBiZSAxLjA0MzZ4IHNsb3dl
cgogICByZWdleHAtcHJvdG90eXBlLXRlc3Qtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC42ODIw
Ky0wLjIyMTEgICAgICAgICAgICAwLjYwNTErLTAuMDQ1OSAgICAgICAgICBtaWdodCBiZSAxLjEy
NzF4IGZhc3RlcgogICByZWdleHAtcHJvdG90eXBlLXRlc3Qtb2JzZXJ2YWJsZS1zaWRlLWVmZmVj
dHMyICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAuMjM3MCstMC4wMDgxICAgICA/ICAgICAgMC4yNjk3Ky0wLjAyNzQgICAgICAgID8gbWln
aHQgYmUgMS4xMzc5eCBzbG93ZXIKICAgcmVnZXhwLXNldC1sYXN0LWluZGV4ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOC44NzUyKy0wLjM1NDUgICAgID8gICAgICA5LjI4MTkrLTAuNzc5
NSAgICAgICAgPyBtaWdodCBiZSAxLjA0NTh4IHNsb3dlcgogICByZWdpc3Rlci1wcmVzc3VyZS1m
cm9tLW9zciAgICAgICAgICAgICAgICAgICAgICAgIDE1LjE3MTcrLTEuNTAzMCAgICAgPyAgICAg
MTUuOTg3NCstMS4xNjE3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDUzOHggc2xvd2VyCiAgIHJlcGVh
dC1tdWx0aS1nZXQtYnktb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgMTkuMjk5NSstMS4z
ODM5ICAgICAgICAgICAxOS4wMDkwKy0yLjA2ODkgICAgICAgICAgbWlnaHQgYmUgMS4wMTUzeCBm
YXN0ZXIKICAgcmljaGFyZHMtZW1wdHktdHJ5LWNhdGNoICAgICAgICAgICAgICAgICAgICAgICAg
ICA0OC41OTQwKy0xLjk2ODEgICAgID8gICAgIDQ5LjQ1MDcrLTMuMzUwNyAgICAgICAgPyBtaWdo
dCBiZSAxLjAxNzZ4IHNsb3dlcgogICByaWNoYXJkcy10cnktY2F0Y2ggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMjAzLjMwMTIrLTEuNzUwMCAgICAgPyAgICAyMDMuNzMyMCstMS42MjMw
ICAgICAgICA/CiAgIHNjb3BlZC1hcmd1bWVudHMtbGVuZ3RoICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDYuMzY4MistMC40ODgxICAgICAgICAgICAgNi4xMDM0Ky0wLjE3NjggICAgICAgICAg
bWlnaHQgYmUgMS4wNDM0eCBmYXN0ZXIKICAgc2NvcGVkLWFyZ3VtZW50cy1vdmVycmlkZGVuLWxl
bmd0aCAgICAgICAgICAgICAgICAgNi4yMDg3Ky0wLjQ3ODUgICAgICAgICAgICA2LjE1MzQrLTAu
NTEyMyAgICAgICAgCiAgIHNjb3BlZC1hcmd1bWVudHMtcG9zc2libHktb3ZlcnJpZGRlbi1sZW5n
dGggICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNi42NTEyKy0wLjIxNDIgICAgID8gICAgICA2LjgyNjIrLTAuMzUyMyAgICAgICAgPyBtaWdo
dCBiZSAxLjAyNjN4IHNsb3dlcgogICBzZWFsLWFuZC1kby13b3JrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEyLjUyNTMrLTAuNTQ0MCAgICAgPyAgICAgMTIuNzU4NistMS4wMjQx
ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE4Nnggc2xvd2VyCiAgIHNldC1mb3ItZWFjaCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNjQ0MystMC4wNzI1ICAgICAgICAgICAg
My42MTAxKy0wLjI1NDMgICAgICAgIAogICBzZXQtZm9yLW9mICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA2Ljc2MjArLTAuMzgyNiAgICAgPyAgICAgIDYuODMwOSstMC43
NDQ4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEwMnggc2xvd2VyCiAgIHNldHRlci1wcm90b3R5cGUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMzE5NystMC4wNjk5ICAgICA/ICAg
ICAgNC41ODYxKy0wLjQxNzUgICAgICAgID8gbWlnaHQgYmUgMS4wNjE3eCBzbG93ZXIKICAgc2V0
dGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4xMTE5Ky0w
LjM1MTYgICAgICAgICAgICAyLjgwNzcrLTAuMDY2OCAgICAgICAgICBtaWdodCBiZSAxLjEwODN4
IGZhc3RlcgogICBzaW1wbGUtYWN0aXZhdGlvbi1kZW1vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDIyLjUyNjArLTEuNTkxNiAgICAgICAgICAgMjEuNDE1MCstMS4yMjg2ICAgICAgICAgIG1p
Z2h0IGJlIDEuMDUxOXggZmFzdGVyCiAgIHNpbXBsZS1nZXR0ZXItYWNjZXNzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTguMTQ2OCstMS40NjI3ICAgICAgICAgICAxNi40MDQ1Ky0wLjc5
ODQgICAgICAgICAgbWlnaHQgYmUgMS4xMDYyeCBmYXN0ZXIKICAgc2ltcGxlLXBvbHktY2FsbC1u
ZXN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy42NjQ3Ky0wLjA3MDggICAgICAgICAg
ICAzLjY2MzUrLTAuMDIyMiAgICAgICAgCiAgIHNpbXBsZS1wb2x5LWNhbGwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEuMjAxMistMC4wNTg3ICAgICAgICAgICAgMS4xNzU1Ky0w
LjA4NDkgICAgICAgICAgbWlnaHQgYmUgMS4wMjE5eCBmYXN0ZXIKICAgc2ltcGxlLXJlZ2V4cC1l
eGVjLWZvbGRpbmctZmFpbCAgICAgICAgICAgICAgICAgICAgMy4wMDg0Ky0wLjUwMjAgICAgICAg
ICAgICAyLjg2NzUrLTAuMjAwMCAgICAgICAgICBtaWdodCBiZSAxLjA0OTF4IGZhc3RlcgogICBz
aW1wbGUtcmVnZXhwLWV4ZWMtZm9sZGluZyAgICAgICAgICAgICAgICAgICAgICAgIDE1LjMzODAr
LTAuMTMzNiAgICAgISAgICAgMTYuMTI5OSstMC4zMDA0ICAgICAgICAhIGRlZmluaXRlbHkgMS4w
NTE2eCBzbG93ZXIKICAgc2ltcGxlLXJlZ2V4cC10ZXN0LWZvbGRpbmctZmFpbC13aXRoLWhvaXN0
ZWQtcmVnZXhwICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDguODA3MistMC42NTQ5ICAgICA/ICAgICAgOC44ODQxKy0xLjEzMjUgICAgICAg
ID8KICAgc2ltcGxlLXJlZ2V4cC10ZXN0LWZvbGRpbmctZmFpbCAgICAgICAgICAgICAgICAgICAx
NC4yNjI2Ky0wLjczMjAgICAgICAgICAgIDEzLjk0NjIrLTAuNTU5OCAgICAgICAgICBtaWdodCBi
ZSAxLjAyMjd4IGZhc3RlcgogICBzaW1wbGUtcmVnZXhwLXRlc3QtZm9sZGluZy13aXRoLWhvaXN0
ZWQtcmVnZXhwICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDkuMjcyNystMC4yNzAzICAgICA/ICAgICAgOS4zNTk1Ky0wLjM4MzIgICAgICAg
ID8KICAgc2ltcGxlLXJlZ2V4cC10ZXN0LWZvbGRpbmcgICAgICAgICAgICAgICAgICAgICAgICAx
NS4wNDgwKy0wLjYwOTcgICAgID8gICAgIDE1LjQ4NDArLTAuNTQyOCAgICAgICAgPyBtaWdodCBi
ZSAxLjAyOTB4IHNsb3dlcgogICBzaW4tYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA2LjY0OTErLTAuNTE5NyAgICAgICAgICAgIDYuMTMwOSstMC4zNTY0ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDg0NXggZmFzdGVyCiAgIHNpbmdsZXRvbi1zY29wZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNTcuNjU2NCstMi4wNjAwICAgICAgICAgICA1Ny4z
ODYxKy0yLjM2MjcgICAgICAgIAogICBzaW5rLWZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA1LjMzMzIrLTAuNDc0NCAgICAgPyAgICAgIDUuMzY2MistMC44OTQ5
ICAgICAgICA/CiAgIHNpbmstaHVnZS1hY3RpdmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTIuMjE2NistMC42NTQ4ICAgICA/ICAgICAxMi42MTEyKy0xLjgyNTYgICAgICAgID8g
bWlnaHQgYmUgMS4wMzIzeCBzbG93ZXIKICAgc2lua2FibGUtbmV3LW9iamVjdC1kYWcgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzNy4yNDgyKy0xLjYxNDYgICAgICAgICAgIDM2LjQ3ODIrLTAu
MzM4MSAgICAgICAgICBtaWdodCBiZSAxLjAyMTF4IGZhc3RlcgogICBzaW5rYWJsZS1uZXctb2Jq
ZWN0LXRha2VuICAgICAgICAgICAgICAgICAgICAgICAgIDMxLjk5NDgrLTAuNzQ2OSAgICAgPyAg
ICAgMzIuMjE5NystMC44NTI3ICAgICAgICA/CiAgIHNpbmthYmxlLW5ldy1vYmplY3QgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMTcuNjQwNSstMS44Mzk5ICAgICA/ICAgICAxNy42NzM1
Ky0xLjAwMTggICAgICAgID8KICAgc2xvdy1hcnJheS1wcm9maWxlLWNvbnZlcmdlbmNlICAgICAg
ICAgICAgICAgICAgICAgMi40MDg0Ky0wLjIwMzEgICAgICAgICAgICAyLjM4MDgrLTAuMDUxOSAg
ICAgICAgICBtaWdodCBiZSAxLjAxMTZ4IGZhc3RlcgogICBzbG93LWNvbnZlcmdlbmNlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjI0MzIrLTAuMDQyMyAgICAgPyAgICAgIDIu
MzcxMistMC4yNTQ3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDU3MXggc2xvd2VyCiAgIHNsb3ctdGVy
bmFyaWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuNjYyNCstMS43ODky
ICAgICA/ICAgICAxMy4yMDYxKy0xLjA2NzkgICAgICAgID8gbWlnaHQgYmUgMS4wNDI5eCBzbG93
ZXIKICAgc29ydGluZy1iZW5jaG1hcmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
Ny4yODg1Ky0xLjMzNDkgICAgID8gICAgIDE3LjMxOTcrLTAuNjkxMiAgICAgICAgPwogICBzcGFy
c2UtY29uZGl0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjEwNjArLTAu
MDM0MiAgICAgPyAgICAgIDEuMTA5MystMC4wNTg4ICAgICAgICA/CiAgIHNwbGljZS10by1yZW1v
dmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuOTE4OSstMS4wNjY0ICAgICA/
ICAgICAxNC44Njc5Ky0xLjUyNjUgICAgICAgID8gbWlnaHQgYmUgMS4xNTA5eCBzbG93ZXIKICAg
c3RyY2F0LWNvbnN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS4xMzc3
Ky0wLjM2NjggICAgICAgICAgICA0Ljk1MzArLTAuMjA4MCAgICAgICAgICBtaWdodCBiZSAxLjAz
NzN4IGZhc3RlcgogICBzdHJjYXQtbGVuZ3RoLWNvbnN0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA1LjA4OTArLTAuMTU4NiAgICAgPyAgICAgIDUuMjY2NCstMC41NDc5ICAgICAgICA/
IG1pZ2h0IGJlIDEuMDM0OXggc2xvd2VyCiAgIHN0cmljdC1vc3ItZW50cnkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDguMzE4NystMC4yNTIwICAgICA/ICAgICAgOC42MTgzKy0w
LjU0MTkgICAgICAgID8gbWlnaHQgYmUgMS4wMzYweCBzbG93ZXIKICAgc3RyaW5nLWNoYXItY29k
ZS1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMy4yMzgxKy0zLjkxODcgICAgICAg
ICAgIDExLjg3MzMrLTAuODIxNyAgICAgICAgICBtaWdodCBiZSAxLjExNTB4IGZhc3RlcgogICBz
dHJpbmctY29uY2F0LW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjkwNzUr
LTAuMTExOCAgICAgPyAgICAgIDIuMDE1MSstMC4xOTcwICAgICAgICA/IG1pZ2h0IGJlIDEuMDU2
NHggc2xvd2VyCiAgIHN0cmluZy1jb25jYXQtcGFpci1vYmplY3QgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEuODcyOCstMC4xMjQxICAgICA/ICAgICAgMS44OTQ2Ky0wLjIxMjAgICAgICAgID8g
bWlnaHQgYmUgMS4wMTE2eCBzbG93ZXIKICAgc3RyaW5nLWNvbmNhdC1wYWlyLXNpbXBsZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgMi43NDAyKy0wLjIwNzIgICAgID8gICAgICAyLjc1NzIrLTAu
MjQxMCAgICAgICAgPwogICBzdHJpbmctY29uY2F0LXNpbXBsZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA4LjE1MTIrLTAuNDk4NyAgICAgICAgICAgIDguMTQ0MCstMC4zNzYxICAgICAg
ICAKICAgc3RyaW5nLWNvbnMtcmVwZWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NS45NTUwKy0wLjM0MDUgICAgID8gICAgICA1Ljk2MjIrLTAuNTE4MiAgICAgICAgPwogICBzdHJp
bmctY29ucy10b3dlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LjQyMjcrLTAu
ODA3OSAgICAgICAgICAgIDYuMTY0MCstMC40Mzg2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDQyMHgg
ZmFzdGVyCiAgIHN0cmluZy1lcXVhbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTYuMjIxNystMS44MzM5ICAgICAgICAgICAxNS44ODg1Ky0xLjgzNTIgICAgICAgICAgbWln
aHQgYmUgMS4wMjEweCBmYXN0ZXIKICAgc3RyaW5nLWZyb20tY2hhci1jb2RlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNS41OTE3Ky0wLjA4OTggICAgID8gICAgICA1LjYzMzcrLTAuMTI4
NSAgICAgICAgPwogICBzdHJpbmctZ2V0LWJ5LXZhbC1iaWctY2hhciAgICAgICAgICAgICAgICAg
ICAgICAgICA0LjE2NTMrLTAuMTc3NCAgICAgICAgICAgIDQuMTYzMCstMC4wNTY1ICAgICAgICAK
ICAgc3RyaW5nLWdldC1ieS12YWwtb3V0LW9mLWJvdW5kcy1pbnNhbmUgICAgICAgICAgICAgMy41
NTI5Ky0wLjM0NTQgICAgICAgICAgICAzLjUxODUrLTAuMDYwMiAgICAgICAgCiAgIHN0cmluZy1n
ZXQtYnktdmFsLW91dC1vZi1ib3VuZHMgICAgICAgICAgICAgICAgICAgIDMuODg2OCstMC4wMjM5
ICAgICA/ICAgICAgNC4wMTY1Ky0wLjI3NDkgICAgICAgID8gbWlnaHQgYmUgMS4wMzM0eCBzbG93
ZXIKICAgc3RyaW5nLWdldC1ieS12YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MS44NzQ2Ky0wLjI0NTUgICAgID8gICAgICAxLjk2MDIrLTAuMzg0MSAgICAgICAgPyBtaWdodCBi
ZSAxLjA0NTd4IHNsb3dlcgogICBzdHJpbmctaGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLjc4MDQrLTAuMDMzMiAgICAgPyAgICAgIDEuODgxOCstMC4yMjYyICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDU3MHggc2xvd2VyCiAgIHN0cmluZy1sb25nLWlkZW50LWVxdWFs
aXR5ICAgICAgICAgICAgICAgICAgICAgICAgMTIuMDQ2OCstMC4xMzA2ICAgICA/ICAgICAxMi4z
NzUyKy0wLjgxODIgICAgICAgID8gbWlnaHQgYmUgMS4wMjczeCBzbG93ZXIKICAgc3RyaW5nLW91
dC1vZi1ib3VuZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOS4yNjM5Ky0wLjE0NzQg
ICAgICAgICAgICA5LjA5NDgrLTAuMTI2NiAgICAgICAgICBtaWdodCBiZSAxLjAxODZ4IGZhc3Rl
cgogICBzdHJpbmctcHJvdG90eXBlLXNlYXJjaC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0cyAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjkw
ODErLTAuMDc0OCAgICAgPyAgICAgIDAuOTExOCstMC4wODc5ICAgICAgICA/CiAgIHN0cmluZy1w
cm90b3R5cGUtc2VhcmNoLW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMiAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI4NDQrLTAuMDA4MiAg
ICAgPyAgICAgIDAuMzQ1NystMC4wODA1ICAgICAgICA/IG1pZ2h0IGJlIDEuMjE1NXggc2xvd2Vy
CiAgIHN0cmluZy1wcm90b3R5cGUtc2VhcmNoLW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMyAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjMy
NDgrLTAuMDU2NiAgICAgICAgICAgIDAuMjk2MCstMC4wMTc2ICAgICAgICAgIG1pZ2h0IGJlIDEu
MDk3MnggZmFzdGVyCiAgIHN0cmluZy1wcm90b3R5cGUtc2VhcmNoLW9ic2VydmFibGUtc2lkZS1l
ZmZlY3RzNCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLjMxNDcrLTAuMDQ3NyAgICAgPyAgICAgIDAuMzkzMSstMC4yNDY1ICAgICAgICA/
IG1pZ2h0IGJlIDEuMjQ5MHggc2xvd2VyCiAgIHN0cmluZy1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2
YWJsZS1zaWRlLWVmZmVjdHMgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMS4yMzc2Ky0wLjA0ODcgICAgID8gICAgICAxLjI4MTMrLTAuMDkw
NyAgICAgICAgPyBtaWdodCBiZSAxLjAzNTN4IHNsb3dlcgogICBzdHJpbmctcHJvdG90eXBlLXNw
bGl0LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMiAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjMwOTgrLTAuMDI3MSAgICAgPyAgICAgIDAu
MzE0MSstMC4wMzYzICAgICAgICA/IG1pZ2h0IGJlIDEuMDEzOXggc2xvd2VyCiAgIHN0cmluZy1w
cm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMzLWZsYWdzICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMzE4MCstMC4w
MTMzICAgICA/ICAgICAgMC4zNDg5Ky0wLjA3MDkgICAgICAgID8gbWlnaHQgYmUgMS4wOTcxeCBz
bG93ZXIKICAgc3RyaW5nLXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0czMt
Z2xvYmFsICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAuMzI4MistMC4wMjc4ICAgICA/ICAgICAgMC4zNTYzKy0wLjAzNjEgICAgICAgID8g
bWlnaHQgYmUgMS4wODU4eCBzbG93ZXIKICAgc3RyaW5nLXByb3RvdHlwZS1zcGxpdC1vYnNlcnZh
YmxlLXNpZGUtZWZmZWN0czMtaWdub3JlQ2FzZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjM1OTArLTAuMDk3MSAgICAgICAgICAgIDAu
MzQ5MCstMC4wNDgxICAgICAgICAgIG1pZ2h0IGJlIDEuMDI4OHggZmFzdGVyCiAgIHN0cmluZy1w
cm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMzLW11bHRpbGluZSAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjMzODUr
LTAuMDU2NyAgICAgPyAgICAgIDAuMzUxMystMC4wMzIyICAgICAgICA/IG1pZ2h0IGJlIDEuMDM3
N3ggc2xvd2VyCiAgIHN0cmluZy1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVj
dHMzLXN0aWNreSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLjM0MzgrLTAuMDMyNCAgICAgICAgICAgIDAuMzM1NCstMC4wMzQyICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDI1MXggZmFzdGVyCiAgIHN0cmluZy1wcm90b3R5cGUtc3BsaXQtb2Jz
ZXJ2YWJsZS1zaWRlLWVmZmVjdHMzLXVuaWNvZGUgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4zNDA1Ky0wLjAzOTAgICAgICAgICAgICAw
LjMxMzUrLTAuMDE2NyAgICAgICAgICBtaWdodCBiZSAxLjA4NjN4IGZhc3RlcgogICBzdHJpbmct
cHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzNCAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQzMzkrLTAuMjQ4NyAg
ICAgPyAgICAgIDAuNDc4OCstMC4zOTkwICAgICAgICA/IG1pZ2h0IGJlIDEuMTAzNHggc2xvd2Vy
CiAgIHN0cmluZy1yZXBlYXQtYXJpdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTku
NzkyOCstMC45NTcxICAgICAgICAgICAxOS42ODUwKy0xLjc4MjYgICAgICAgIAogICBzdHJpbmct
cmVwZWF0LW5vdC1yZXNvbHZpbmctZml4ZWQgICAgICAgICAgICAgICAgICAyLjYyMTMrLTAuMjA0
MiAgICAgICAgICAgIDIuNDg3NystMC4xNDczICAgICAgICAgIG1pZ2h0IGJlIDEuMDUzN3ggZmFz
dGVyCiAgIHN0cmluZy1yZXBlYXQtbm90LXJlc29sdmluZy1uby1pbmxpbmUgICAgICAgICAgICAg
IDMuNDQwOCstMC4wNjI1ICAgICA/ICAgICAgMy41NjExKy0wLjI4NzggICAgICAgID8gbWlnaHQg
YmUgMS4wMzUweCBzbG93ZXIKICAgc3RyaW5nLXJlcGVhdC1ub3QtcmVzb2x2aW5nICAgICAgICAg
ICAgICAgICAgICAgICAgMy4yODQzKy0wLjExNzYgICAgICAgICAgICAzLjI3OTErLTAuMDc0MCAg
ICAgICAgCiAgIHN0cmluZy1yZXBlYXQtcmVzb2x2aW5nLWZpeGVkICAgICAgICAgICAgICAgICAg
ICAgMjIuMTkwNystMS4yMDAyICAgICAgICAgICAyMi4wMjU0Ky0wLjgzNTEgICAgICAgIAogICBz
dHJpbmctcmVwZWF0LXJlc29sdmluZy1uby1pbmxpbmUgICAgICAgICAgICAgICAgIDI4LjczMzkr
LTAuOTY0MyAgICAgPyAgICAgMjguOTcxMistMS4zMDMwICAgICAgICA/CiAgIHN0cmluZy1yZXBl
YXQtcmVzb2x2aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkuMzQxMystMC43MzA2ICAg
ICAgICAgICAyOC43NDQwKy0wLjQ4MDEgICAgICAgICAgbWlnaHQgYmUgMS4wMjA4eCBmYXN0ZXIK
ICAgc3RyaW5nLXJlcGVhdC1zaW5nbGUtbm90LXJlc29sdmluZyAgICAgICAgICAgICAgICAgNi4z
NTE1Ky0wLjcwNzAgICAgID8gICAgICA3LjA1MjArLTEuMTA5NCAgICAgICAgPyBtaWdodCBiZSAx
LjExMDN4IHNsb3dlcgogICBzdHJpbmctcmVwZWF0LXNpbmdsZS1yZXNvbHZpbmcgICAgICAgICAg
ICAgICAgICAgICA3LjA3MTkrLTAuODk0OCAgICAgPyAgICAgIDcuMjU3MSstMS4xNDI0ICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDI2Mnggc2xvd2VyCiAgIHN0cmluZy1yZXBlYXQtc21hbGwtbm90LXJl
c29sdmluZyAgICAgICAgICAgICAgICAgIDIuNzM3MistMC4wODc2ICAgICA/ICAgICAgMi44MzQ5
Ky0wLjMzMDEgICAgICAgID8gbWlnaHQgYmUgMS4wMzU3eCBzbG93ZXIKICAgc3RyaW5nLXJlcGVh
dC1zbWFsbC1yZXNvbHZpbmcgICAgICAgICAgICAgICAgICAgICAyOS4zMjYxKy0wLjc3ODMgICAg
ID8gICAgIDI5LjMyOTgrLTAuOTYxOSAgICAgICAgPwogICBzdHJpbmctcmVwbGFjZS1lbXB0eSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjE5OTErLTAuNTMxMCAgICAgICAgICAgIDcu
ODkyMSstMC4yNDU5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDM4OXggZmFzdGVyCiAgIHN0cmluZy1y
ZXBsYWNlLWdlbmVyaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTYuNjUxNystOC43NzY0
ICAgICAgICAgICA0OC44NDMzKy0yLjA5MjggICAgICAgICAgbWlnaHQgYmUgMS4xNTk5eCBmYXN0
ZXIKICAgc3RyaW5nLXJlcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OC4xMTg2Ky0wLjMwOTEgICAgID8gICAgICA4LjEzMTQrLTAuMjEyMCAgICAgICAgPwogICBzdHJp
bmctcm9wZS13aXRoLW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ljg2ODIrLTAu
NjUzNCAgICAgICAgICAgMTUuNzI4NCstMC44MzM3ICAgICAgICAKICAgc3RyaW5nLXN1YiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMi41NDA3Ky0yLjE0MDIgICAgICAg
ICAgIDMyLjA1NzYrLTEuODQwMCAgICAgICAgICBtaWdodCBiZSAxLjAxNTF4IGZhc3RlcgogICBz
dHJpbmctdGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjcxOTEr
LTAuMjgzNiAgICAgICAgICAgIDIuNTI1OCstMC4wMjUwICAgICAgICAgIG1pZ2h0IGJlIDEuMDc2
NXggZmFzdGVyCiAgIHN0cmluZy10cmFuc2NvZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTMuMDc0OSstMC42MTQ4ICAgICA/ICAgICAxNC40MzYwKy0wLjg4NzggICAgICAgID8g
bWlnaHQgYmUgMS4xMDQxeCBzbG93ZXIKICAgc3RyaW5nLXZhci1lcXVhbGl0eSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyNy4zOTg0Ky0yLjIwODUgICAgICAgICAgIDI1LjAwMTMrLTEu
NTYxNSAgICAgICAgICBtaWdodCBiZSAxLjA5NTl4IGZhc3RlcgogICBzdHJ1Y3R1cmUtaG9pc3Qt
b3Zlci10cmFuc2l0aW9ucyAgICAgICAgICAgICAgICAgICAyLjA3NzErLTAuMDg1OSAgICAgPyAg
ICAgIDIuMTM3NCstMC4xMDgwICAgICAgICA/IG1pZ2h0IGJlIDEuMDI5MXggc2xvd2VyCiAgIHN1
YnN0cmluZy1jb25jYXQtd2VpcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIuNTIyOSst
MC4zNjQ3ICAgICAgICAgICAzMi41MDc1Ky0wLjQwNDQgICAgICAgIAogICBzdWJzdHJpbmctY29u
Y2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2LjMwNDkrLTAuODc1OSAgICAg
PyAgICAgMzYuODMyMistMS42MDA4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE0NXggc2xvd2VyCiAg
IHN1YnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDAuOTM0
MCstMC41NzE3ICAgICA/ICAgICA0MC45NjM1Ky0wLjYyNDkgICAgICAgID8KICAgc3dpdGNoLWNo
YXItY29uc3RhbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS44NjEyKy0wLjExMjcg
ICAgID8gICAgICAxLjg3MDIrLTAuMDI5OCAgICAgICAgPwogICBzd2l0Y2gtY2hhciAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjMzMzArLTAuMDg1NCAgICAgICAgICAg
IDQuMzI0NCstMC4wOTQyICAgICAgICAKICAgc3dpdGNoLWNvbnN0YW50ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMy4yMDg4Ky0wLjIzNTYgICAgICAgICAgICAzLjAzNTYrLTAu
MTU0OSAgICAgICAgICBtaWdodCBiZSAxLjA1NzB4IGZhc3RlcgogICBzd2l0Y2gtc3RyaW5nLWJh
c2ljLWJpZy12YXIgICAgICAgICAgICAgICAgICAgICAgIDEzLjU0NjArLTAuNjQ4NSAgICAgPyAg
ICAgMTMuODgyMSstMC45MTQ0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDI0OHggc2xvd2VyCiAgIHN3
aXRjaC1zdHJpbmctYmFzaWMtYmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuMzIzMCst
MC42Mzc3ICAgICAgICAgICAxMS42NzIwKy0wLjYxMzYgICAgICAgICAgbWlnaHQgYmUgMS4wNTU4
eCBmYXN0ZXIKICAgc3dpdGNoLXN0cmluZy1iYXNpYy12YXIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxMi45NTMwKy0wLjM2MjAgICAgID8gICAgIDEzLjYyNjErLTAuOTI4MyAgICAgICAgPyBt
aWdodCBiZSAxLjA1MjB4IHNsb3dlcgogICBzd2l0Y2gtc3RyaW5nLWJhc2ljICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDExLjQyMjUrLTAuNzI5NyAgICAgICAgICAgMTEuMDkwNSstMS4w
MzUyICAgICAgICAgIG1pZ2h0IGJlIDEuMDI5OXggZmFzdGVyCiAgIHN3aXRjaC1zdHJpbmctYmln
LWxlbmd0aC10b3dlci12YXIgICAgICAgICAgICAgICAgMTkuNjUwMystMS40NjkyICAgICAgICAg
ICAxOC41OTk2Ky0xLjExNDEgICAgICAgICAgbWlnaHQgYmUgMS4wNTY1eCBmYXN0ZXIKICAgc3dp
dGNoLXN0cmluZy1sZW5ndGgtdG93ZXItdmFyICAgICAgICAgICAgICAgICAgICAxNC44NDg0Ky0w
LjkxMjkgICAgICAgICAgIDEzLjYxOTgrLTAuNzkxMCAgICAgICAgICBtaWdodCBiZSAxLjA5MDJ4
IGZhc3RlcgogICBzd2l0Y2gtc3RyaW5nLWxlbmd0aC10b3dlciAgICAgICAgICAgICAgICAgICAg
ICAgIDExLjE3NDUrLTAuNjgxMiAgICAgICAgICAgMTAuNjM2MSstMC42NzA0ICAgICAgICAgIG1p
Z2h0IGJlIDEuMDUwNnggZmFzdGVyCiAgIHN3aXRjaC1zdHJpbmctc2hvcnQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTEuMDU3OSstMC44NDU1ICAgICAgICAgICAxMC40MTk2Ky0wLjUy
MjQgICAgICAgICAgbWlnaHQgYmUgMS4wNjEzeCBmYXN0ZXIKICAgc3dpdGNoICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS44Mjc2Ky0wLjQxMjggICAgID8gICAg
ICA1LjkzOTIrLTAuMzgzOCAgICAgICAgPyBtaWdodCBiZSAxLjAxOTJ4IHNsb3dlcgogICBzeW1i
b2wtdG9zdHJpbmd0YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjgzMzQrLTAu
MDcyMCAgICAgICAgICAgIDIuNzk3MCstMC4wNTQ4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzMHgg
ZmFzdGVyCiAgIHRlYXItb2ZmLWFyZ3VtZW50cy1zaW1wbGUgICAgICAgICAgICAgICAgICAgICAg
ICAgIDIuMzE0NSstMC4xMTE3ICAgICAgICAgICAgMi4yMzM5Ky0wLjA1NzQgICAgICAgICAgbWln
aHQgYmUgMS4wMzYxeCBmYXN0ZXIKICAgdGVhci1vZmYtYXJndW1lbnRzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMy4yNTU5Ky0wLjI3ODEgICAgID8gICAgICAzLjI3OTArLTAuMjYx
OCAgICAgICAgPwogICB0ZW1wb3JhbC1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDExLjUwNTgrLTAuNzgzOSAgICAgICAgICAgMTEuNDgyMSstMS4xMDY0ICAgICAgICAK
ICAgdG8taW50MzItYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMi45
NDk3Ky0xLjU5MzEgICAgICAgICAgIDEyLjIxODcrLTAuMTcxMCAgICAgICAgICBtaWdodCBiZSAx
LjA1OTh4IGZhc3RlcgogICB0by1udW1iZXItY29uc3RydWN0b3ItbnVtYmVyLXN0cmluZy1udW1i
ZXItc3RyaW5nICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMuMzI1MCstMC4xODU0ICAgICA/ICAgICAgMy40MjYyKy0wLjI3NDIgICAgICAg
ID8gbWlnaHQgYmUgMS4wMzA0eCBzbG93ZXIKICAgdG8tbnVtYmVyLWNvbnN0cnVjdG9yLW9ubHkt
bnVtYmVyICAgICAgICAgICAgICAgICAgMC42OTUxKy0wLjE2MDkgICAgICAgICAgICAwLjY4MjMr
LTAuMDYyOCAgICAgICAgICBtaWdodCBiZSAxLjAxODh4IGZhc3RlcgogICB0by1udW1iZXItY29u
c3RydWN0b3Itb25seS1zdHJpbmcgICAgICAgICAgICAgICAgICAxLjY0OTIrLTAuNDI0MyAgICAg
ICAgICAgIDEuNjE3NCstMC40OTk3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE5N3ggZmFzdGVyCiAg
IHRvLW51bWJlci1jb25zdHJ1Y3Rvci1zdHJpbmctbnVtYmVyLXN0cmluZy1udW1iZXIgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi42NzM1
Ky0wLjAzNzcgICAgICEgICAgICAyLjg2NDcrLTAuMDk1MyAgICAgICAgISBkZWZpbml0ZWx5IDEu
MDcxNXggc2xvd2VyCiAgIHRvLW51bWJlci1udW1iZXItc3RyaW5nLW51bWJlci1zdHJpbmcgICAg
ICAgICAgICAgIDIuOTM5MistMC4wNzI3ICAgICA/ICAgICAgMy4yNDg1Ky0wLjM1MjIgICAgICAg
ID8gbWlnaHQgYmUgMS4xMDUyeCBzbG93ZXIKICAgdG8tbnVtYmVyLW9ubHktbnVtYmVyICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMC41Njc4Ky0wLjA2MTEgICAgID8gICAgICAwLjY0Mjcr
LTAuMDQ0NCAgICAgICAgPyBtaWdodCBiZSAxLjEzMTl4IHNsb3dlcgogICB0by1udW1iZXItb25s
eS1zdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjUzNjcrLTAuMjI5NiAgICAg
PyAgICAgIDEuNzgxNystMC40Mzk4ICAgICAgICA/IG1pZ2h0IGJlIDEuMTU5NXggc2xvd2VyCiAg
IHRvLW51bWJlci1zdHJpbmctbnVtYmVyLXN0cmluZy1udW1iZXIgICAgICAgICAgICAgIDIuNzUz
MystMC4wNjg2ICAgICAgICAgICAgMi43NDI5Ky0wLjA5MjIgICAgICAgIAogICB0cnktY2F0Y2gt
Z2V0LWJ5LXZhbC1jbG9uZWQtYXJndW1lbnRzICAgICAgICAgICAgICAzLjEzMDMrLTAuMTMwOCAg
ICAgPyAgICAgIDMuMTU0MistMC4yNDk0ICAgICAgICA/CiAgIHRyeS1jYXRjaC1nZXQtYnktdmFs
LWRpcmVjdC1hcmd1bWVudHMgICAgICAgICAgICAgIDEuOTYxMSstMC4wNzc0ICAgICA/ICAgICAg
MS45NzM2Ky0wLjMwOTkgICAgICAgID8KICAgdHJ5LWNhdGNoLWdldC1ieS12YWwtc2NvcGVkLWFy
Z3VtZW50cyAgICAgICAgICAgICAgMy45Njg3Ky0wLjA1NjMgICAgICAgICAgICAzLjk0MzcrLTAu
MjQyNCAgICAgICAgCiAgIHR5cGVkLWFycmF5LWdldC1zZXQtYnktdmFsLXByb2ZpbGluZyAgICAg
ICAgICAgICAgMjAuMTQyNystMC45NTgyICAgICAgICAgICAxOS43MDYzKy0wLjc5NTIgICAgICAg
ICAgbWlnaHQgYmUgMS4wMjIxeCBmYXN0ZXIKICAgdHlwZWQtYXJyYXktc3ViYXJyYXkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAzMi41ODk3Ky0xLjIxOTYgICAgID8gICAgIDMyLjY3MTcr
LTAuMTg3OSAgICAgICAgPwogICB1bmRlZmluZWQtcHJvcGVydHktYWNjZXNzICAgICAgICAgICAg
ICAgICAgICAgICAgMjA4LjE2NzArLTMuNzQ1OSAgICAgICAgICAyMDcuNDUwMistMi4wNzYxICAg
ICAgICAKICAgdW5kZWZpbmVkLXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMi43MjIzKy0wLjA3NzggICAgICAgICAgICAyLjY4ODcrLTAuMDUxOCAgICAgICAgICBtaWdo
dCBiZSAxLjAxMjV4IGZhc3RlcgogICB1bnByb2ZpbGVkLWxpY20gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA2LjE5MjUrLTAuODI0OSAgICAgICAgICAgIDUuNjY1NSstMC4xNDk5
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDkzMHggZmFzdGVyCiAgIHVudHlwZWQtc3RyaW5nLWZyb20t
Y2hhci1jb2RlICAgICAgICAgICAgICAgICAgICAgIDkuOTQ5MCstMC43MDU4ICAgICA/ICAgICAg
OS45OTE1Ky0xLjIwNjIgICAgICAgID8KICAgdjgtcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0
Y2ggICAgICAgICAgICAgICAgICAyNi4yOTIzKy0wLjg3NzIgICAgID8gICAgIDI2LjY2ODArLTAu
NDc3NCAgICAgICAgPyBtaWdodCBiZSAxLjAxNDN4IHNsb3dlcgogICB2OC1yYXl0cmFjZS13aXRo
LXRyeS1jYXRjaC1oaWdoLWZyZXF1ZW5jeS10aHJvd3MgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4MS4yODc4Ky01LjI0MDkgICAgICAgICAg
MjgxLjA4MDgrLTQuMzE1OCAgICAgICAgCiAgIHY4LXJheXRyYWNlLXdpdGgtdHJ5LWNhdGNoICAg
ICAgICAgICAgICAgICAgICAgICAgNTIuMDg1NCstMC41OTg2ICAgICA/ICAgICA1Mi4xNjUxKy0w
LjQ4MzAgICAgICAgID8KICAgdjgtcmVnZXhwLXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA0Ny42NTUwKy0yLjExOTggICAgICAgICAgIDQ2Ljk2MzgrLTEuMDA0NyAgICAg
ICAgICBtaWdodCBiZSAxLjAxNDd4IGZhc3RlcgogICB2YXJhcmdzLWNhbGwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDE0LjE1MTQrLTEuMDI1NiAgICAgICAgICAgMTMuODA3
MistMS40Nzk5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI0OXggZmFzdGVyCiAgIHZhcmFyZ3MtY29u
c3RydWN0LWlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgMTkuMDcxOCstMi4zNjM2ICAg
ICAgICAgICAxOC4wMjI3Ky0wLjc0NzkgICAgICAgICAgbWlnaHQgYmUgMS4wNTgyeCBmYXN0ZXIK
ICAgdmFyYXJncy1jb25zdHJ1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNC4y
MjAzKy0xLjA4MjIgICAgICAgICAgIDEzLjQyODErLTAuODIxMiAgICAgICAgICBtaWdodCBiZSAx
LjA1OTB4IGZhc3RlcgogICB2YXJhcmdzLWlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA3LjY3NTkrLTAuMjk3MSAgICAgICAgICAgIDcuNjU5NistMC4xNzA1ICAgICAg
ICAKICAgdmFyYXJncy1zdHJpY3QtbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OS4wMTY1Ky0wLjQ1NDIgICAgID8gICAgICA5LjA4MTIrLTEuMDM0OCAgICAgICAgPwogICB2YXJh
cmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjY3ODkrLTAu
MDg2NSAgICAgPyAgICAgIDguODg0OCstMC4xNzAxICAgICAgICA/IG1pZ2h0IGJlIDEuMDIzN3gg
c2xvd2VyCiAgIHdlaXJkLWlubGluaW5nLWNvbnN0LXByb3AgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEuOTUyNistMC4xMzA0ICAgICA/ICAgICAgMS45NzQ0Ky0wLjEwNjAgICAgICAgID8gbWln
aHQgYmUgMS4wMTExeCBzbG93ZXIKCiAgIDxnZW9tZXRyaWM+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDYuNTMzNSstMC4wMjI0ICAgICAgICAgICAgNi41MjkxKy0wLjAx
NzUgICAgICAgICAgbWlnaHQgYmUgMS4wMDA3eCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwT2ZUcmVlICAgICAgICAgICAg
ICAgQXV4QnV0dGVyZmxpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkFzbUJl
bmNoOgogICBiaWdmaWIuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NDA3Ljg1ODMrLTIuNjE1NSAgICAgPyAgICA0MDguNDQ5MSstMy4xNzc5ICAgICAgICA/CiAgIGNy
YXkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjQuNjU5Nist
Mi4zNzkwICAgICAgICAgIDM2My43MTkzKy00LjA3MDAgICAgICAgIAogICBkcnkuYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDYyLjA3ODIrLTk3LjUzODYgICAg
ICAgICAzOTguMzcxNistOC45ODkyICAgICAgICAgIG1pZ2h0IGJlIDEuMTU5OXggZmFzdGVyCiAg
IEZsb2F0TU0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MDguMzEy
MSstNDIuNDQyNiAgICAgICAgIDY3NS40NDg4Ky00Ljk3MjUgICAgICAgICAgbWlnaHQgYmUgMS4w
NDg3eCBmYXN0ZXIKICAgZ2NjLWxvb3BzLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMzM2Ny4xMTc4Ky0yNC4zNTY2ICAgID8gICAzMzY5LjU5MzErLTE2LjQ0OTEgICAgICAg
PwogICBuLWJvZHkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzQ3
LjQ0ODkrLTIuOTI3MiAgICAgICAgICA3NDcuMDk0MSstNS4zMDMwICAgICAgICAKICAgUXVpY2tz
b3J0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3My4wMzY3Ky0zLjk2
MzAgICAgID8gICAgMzc1LjQ0OTErLTYuMzEyNyAgICAgICAgPwogICBzdGVwYW5vdl9jb250YWlu
ZXIuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAzMTQ0LjkwMTUrLTI4LjA2NjMgICAgPyAg
IDMxNTAuNzY5MCstMjEuNzkwNyAgICAgICA/CiAgIFRvd2Vycy5jICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyNDguNzM3OSstMS43MjcyICAgICA/ICAgIDI0OS4xMTM4
Ky0yLjg4MDYgICAgICAgID8KCiAgIDxnZW9tZXRyaWM+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA2ODkuMzkxMistMTEuNDQ1OCAgICAgICAgIDY3Ni40MTIwKy0xLjc0ODkg
ICAgICAgICAgbWlnaHQgYmUgMS4wMTkyeCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwT2ZUcmVlICAgICAgICAgICAgICAg
QXV4QnV0dGVyZmxpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkNvbXByZXNz
aW9uQmVuY2g6CiAgIGh1ZmZtYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMzMuMTA2OCstMS4zNDQwICAgICBeICAgICAyNi4wODA4Ky0wLjgyMzEgICAgICAgIF4g
ZGVmaW5pdGVseSAxLjI2OTR4IGZhc3RlcgogICBhcml0aG1ldGljLXNpbXBsZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjQ5LjI2OTMrLTAuNTUwNyAgICAgPyAgICAyNTAuODA5Mist
My44NTI2ICAgICAgICA/CiAgIGFyaXRobWV0aWMtcHJlY2lzZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyMzkuMTc5OSstNC4wNTcwICAgICA/ICAgIDI0MC4yMDEzKy0yLjM1MjEgICAg
ICAgID8KICAgYXJpdGhtZXRpYy1jb21wbGV4LXByZWNpc2UgICAgICAgICAgICAgICAgICAgICAg
IDIzNS4wNzk4Ky0yLjE2ODIgICAgID8gICAgMjM2LjYwNDUrLTMuMzIxMyAgICAgICAgPwogICBh
cml0aG1ldGljLXByZWNpc2Utb3JkZXItMCAgICAgICAgICAgICAgICAgICAgICAgMjUzLjg4ODEr
LTIuNTEwMiAgICAgPyAgICAyNTcuNTU4MSstMi4zNDExICAgICAgICA/IG1pZ2h0IGJlIDEuMDE0
NXggc2xvd2VyCiAgIGFyaXRobWV0aWMtcHJlY2lzZS1vcmRlci0xICAgICAgICAgICAgICAgICAg
ICAgICAyODcuMjIyNistMi4yNDIzICAgICA/ICAgIDI5MS45MTg4Ky0zLjQyNzUgICAgICAgID8g
bWlnaHQgYmUgMS4wMTY0eCBzbG93ZXIKICAgYXJpdGhtZXRpYy1wcmVjaXNlLW9yZGVyLTIgICAg
ICAgICAgICAgICAgICAgICAgIDMyNC4zMDcwKy0yLjQ1NjAgICAgID8gICAgMzI3LjI3MzQrLTIu
MjM0NyAgICAgICAgPwogICBhcml0aG1ldGljLXNpbXBsZS1vcmRlci0xICAgICAgICAgICAgICAg
ICAgICAgICAgMjk2Ljk3ODMrLTcuNzEzNCAgICAgPyAgICAyOTguMDIzNSstMi43ODYxICAgICAg
ICA/CiAgIGFyaXRobWV0aWMtc2ltcGxlLW9yZGVyLTIgICAgICAgICAgICAgICAgICAgICAgICAz
NDYuMDY1OCstNS4xMTQwICAgICA/ICAgIDM0Ni45NDIyKy02LjgzNDIgICAgICAgID8KICAgbHot
c3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ny4zNjM3Ky02
LjI3MTQgICAgICAgICAgMjY3LjE2MjIrLTQuODMyMiAgICAgICAgICBtaWdodCBiZSAxLjAzODJ4
IGZhc3RlcgoKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDIyMy41OTgxKy0wLjMwMDggICAgIF4gICAgMjE4Ljg4ODUrLTEuMzI3MCAgICAgICAgXiBk
ZWZpbml0ZWx5IDEuMDIxNXggZmFzdGVyCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRpcE9mVHJlZSAgICAgICAgICAgICAgIEF1eEJ1dHRl
cmZsaWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApHZW9tZWFuIG9mIHByZWZl
cnJlZCBtZWFuczoKICAgPHNjYWxlZC1yZXN1bHQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA0My4xNDE5Ky0wLjE1NjYgICAgID8gICAgIDQzLjMxNzkrLTAuMDkzNyAgICAgICAg
PyBtaWdodCBiZSAxLjAwNDF4IHNsb3dlcgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285169</attachid>
            <date>2016-08-02 17:29:59 -0700</date>
            <delta_ts>2016-08-02 17:57:11 -0700</delta_ts>
            <desc>latest patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>200381</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNl
IGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFrZSB0aGUgR0MgY29uY3VycmVu
dCAoYnVnIDE0OTQzMiksIHdlIHdvdWxkIGVpdGhlciBuZWVkIHRvIGVuYWJsZSBjb25jdXJyZW50
CisgICAgICAgIGNvcHlpbmcgb3Igd2Ugd291bGQgbmVlZCB0byBub3QgY29weS4gQ29uY3VycmVu
dCBjb3B5aW5nIGNhcnJpZXMgYSAxLTIlIHRocm91Z2hwdXQgb3ZlcmhlYWQKKyAgICAgICAgZnJv
bSB0aGUgYmFycmllcnMgYWxvbmUuIENvbnNpZGVyaW5nIHRoYXQgTWFya2VkU3BhY2UgZG9lcyBh
IGRlY2VudCBqb2Igb2YgYXZvaWRpbmcKKyAgICAgICAgZnJhZ21lbnRhdGlvbiwgaXQncyB1bmxp
a2VseSB0aGF0IGl0J3Mgd29ydGggcGF5aW5nIDEtMiUgdGhyb3VnaHB1dCBmb3IgY29weWluZy4g
U28sIHdlIHdhbnQKKyAgICAgICAgdG8gZ2V0IHJpZCBvZiBjb3BpZWQgc3BhY2UuIFRoaXMgY2hh
bmdlIG1vdmVzIGNvcGllZCBzcGFjZSdzIGJpZ2dlc3QgY2xpZW50IG92ZXIgdG8gbWFya2VkCisg
ICAgICAgIHNwYWNlLgorICAgICAgICAKKyAgICAgICAgTW92aW5nIGJ1dHRlcmZsaWVzIHRvIG1h
cmtlZCBzcGFjZSBtZWFucyBoYXZpbmcgdGhlbSB1c2UgdGhlIG5ldyBBdXhpbGlhcnkgSGVhcENl
bGwKKyAgICAgICAgYWxsb2NhdGlvbiBwYXRoLiBUaGlzIGlzIGEgZmFpcmx5IG1lY2hhbmljYWwg
Y2hhbmdlLiBBdCBhIGhpZ2ggbGV2ZWwgdGhpcyBkb2VzIHRoZXNlIHRoaW5nczoKKyAgICAgICAg
CisgICAgICAgIC0gV2UgdXNlIEF1eGlsaWFyeUJhcnJpZXIgaW5zdGVhZCBvZiBDb3B5QmFycmll
ci4KKyAgICAgICAgCisgICAgICAgIC0gV2UgdXNlIHRyeUFsbG9jYXRlQXV4aWxpYXJ5IGluc3Rl
YWQgb2YgdHJ5QWxsb2NhdGVTdG9yYWdlLiBJIGdvdCByaWQgb2YgdGhlIHNpbGx5CisgICAgICAg
ICAgQ2hlY2tlZEJvb2xlYW4gc3R1ZmYsIHNpbmNlIGl0J3Mgc28gbXVjaCBtb3JlIHRyb3VibGUg
dGhhbiBpdCdzIHdvcnRoLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgSklUcyBoYXZlIHRvIGVt
aXQgaW5saW5lZCBtYXJrZWQgc3BhY2UgYWxsb2NhdGlvbnMgaW5zdGVhZCBvZiBpbmxpbmUgY29w
eSBzcGFjZQorICAgICAgICAgIGFsbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgLSBFdmVy
eW9uZSBoYXMgdG8gZ2V0IHVzZWQgdG8gemVyb2luZyB0aGVpciBidXR0ZXJmbGllcyBhZnRlciBh
bGxvY2F0aW9uIGluc3RlYWQgb2YgcmVseWluZworICAgICAgICAgIG9uIHRoZW0gYmVpbmcgcHJl
LXplcm9lZCBieSB0aGUgR0MuIENvcGllZCBzcGFjZSB3b3VsZCB6ZXJvIHRoaW5ncyBmb3IgeW91
LCB3aGlsZSBtYXJrZWQKKyAgICAgICAgICBzcGFjZSBkb2Vzbid0LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIEl0IHN0aWxsIGZhaWxzIHNvbWUg
aW50ZXJuYWwgZnV6emluZyB0ZXN0cyBhbmQgSSBoYXZlbid0CisgICAgICAgIG1lYXN1cmVkIHBl
cmZvcm1hbmNlIHlldC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5l
d09iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmluaXRpYWxp
emVBcnJheUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0UmlnaHRTaGlmdFNuaXBwZXQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZUhlYXBDZWxsKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVPYmplY3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0b3JGb3JTaXplKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVKU0FycmF5KToKKyAg
ICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkNvbnNlcnZh
dGl2ZVJvb3RzOjpncm93KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAg
ICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29uc2Vy
dmF0aXZlUm9vdHM6OnJvb3RzKToKKyAgICAgICAgKiBoZWFwL0NvcHlUb2tlbi5oOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0
b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9yYWdlQWxsb2NhdG9y
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Omlz
Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxs
b2NhdGVPYmplY3RPZlR5cGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdWJzcGFjZUZvck9iamVj
dE9mVHlwZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZSk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkRnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZmluZEdDT2JqZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNWYWx1ZUdDT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNQb2ludGVyR0NPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
OjpyZXRpcmUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlQ
b3BGcmVlTGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZUltcGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2sp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxLaW5kKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpoZWFwKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0YWtlTGFzdEFjdGl2ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6dHJ5
Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNBdG9tQWxpZ25lZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjZWxsQWxpZ24pOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tGb3IpOgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0
c1dpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9y
T2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFs
bG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnRyeUFsbG9jYXRl
QXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhp
bGlhcnkpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeSk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwpOgorICAgICAgICAoSlNDOjpTZXRD
dXJyZW50Q2VsbFNjb3BlOjpTZXRDdXJyZW50Q2VsbFNjb3BlKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KiBsbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0F1eGls
aWFyeUJhcnJpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OkF1
eGlsaWFyeUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkF1
eGlsaWFyeUJhcnJpZXI6OnNsb3QpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6c2V0V2l0aG91
dEJhcnJpZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJhcnJpZXI8VD46OkF1eGlsaWFyeUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQpOgorICAgICAgICAq
IHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJp
Z2h0KToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6
CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmNyZWF0
ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVu
dGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NhbGxlZS5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRp
Z3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29weUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFj
a2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
bWlzZS5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanM6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXktdW5zaGlmdC5qczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5LXVuc2hpZnQuanM6IEFkZGVk
LgorCiAyMDE2LTA3LTI5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIEJ5VmFsSW5mbyBpcyBvbmx5IHVzZWQgaW4gSklUIGVuYWJs
ZWQgZW52aXJvbm1lbnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsOCBAQAog
CQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE0MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9OwogCQkwRjM4QjAxOTE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbk1vZGUuY3BwICovOyB9OwogCQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYz
OEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYzOEQyQTMxRDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5
MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmNwcCAqLzsgfTsKIAkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM5MkM4ODFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCAq
LzsgfTsKIAkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi87
IH07CkBAIC01NzIsNiArNTc0LDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJl
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3
QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTND
ODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUy
MzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQURFNjczMUQ0RDIzQkUwMDc2
ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi87IH07CiAJ
CTBGQUY3RUZEMTY1QkE5MUIwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVCQTkxOTAw
MEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1QkE5MUYw
MDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZF
IC8qIEV4aXRLaW5kLmNwcCAqLzsgfTsKQEAgLTI1MTgsNiArMjUyMSw4IEBACiAJCTBGMzhCMDE0
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5oOyBwYXRoID0gZGZnL0RGR0NvbXBp
bGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDE1MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdD
b21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAx
NjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5oOyBwYXRoID0gZGZnL0RGR0Nv
bXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM4RDJBMDFE
NDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVySW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM5MkM4NzFCNDYxODg0MDA4
NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRGdXp6LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOTJDODgxQjQ2MTg4NDAwODQ0NzI4
IC8qIERGR09TUkV4aXRGdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R09TUkV4aXRGdXp6Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEZ1enouaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQTFCRjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzY1LDYgKzI3NzAsNyBA
QAogCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdB
OEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBREU2NzIxRDREMjNCQzAwNzY4
NDU3IC8qIEhlYXBVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBV
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQUY3RUZBMTY1QkE5MTkwMDBD
ODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4aXRLaW5kLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNDYsNiArNTI1Miw3IEBACiAJCQkJQzI0RDMx
RTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi8sCiAJCQkJQzJFNTI2QkIx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCiAJCQkJQzJFNTI2QkMxNTkwRUYw
MDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAorCQkJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFw
VmVyaWZpZXIuY3BwICovLAogCQkJCUZFN0JBNjBFMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVy
aWZpZXIuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxT
d2VlcGVyLmNwcCAqLywKQEAgLTU2MDcsNiArNTYxNCw4IEBACiAJCQkJRjY5MkE4NEQwMjU1NTk3
RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg0RTAyNTU1OTdE
MDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuaCAqLywKIAkJCQkwRkI3RjM4QTE1RUQ4RTM4MDBG
MTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8sCisJCQkJMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5
IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCAqLywKKwkJCQkwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkg
LyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLywKIAkJCQk1MjY3OEY4QzFBMDMxMDA5MDA2
QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmNwcCAqLywKIAkJCQk1MjY3OEY4RDFBMDMxMDA5
MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggKi8sCiAJCQkJMTQ3QjgzQUEwRTZEQjhD
OTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi8sCkBAIC01NzcyLDcg
KzU3ODEsNiBAQAogCQkJCTcwREMzRTA4MUIyREYyQzcwMDA1NDI5OSAvKiBJdGVyYXRvclByb3Rv
dHlwZS5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAq
LywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAotCQkJCTUz
OUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovLAogCQkJCTBGMkI2
NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKIAkJCQkwRjJCNjZC
NTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAogCQkJCTBGMkI2NkI2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLApAQCAtNTc4
Miw2ICs1NzkwLDcgQEAKIAkJCQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwICovLAogCQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oICovLAogCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlld0lubGluZXMuaCAqLywKKwkJCQk1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyog
SlNBcnJheUlubGluZXMuaCAqLywKIAkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2Fs
bGVlLmNwcCAqLywKQEAgLTcyNjEsNiArNzI3MCw3IEBACiAJCQkJMEYzMzhFMUMxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5
NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGlsaWFyeUJh
cnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJCMUJEMTdGQTQwMDFB
QTQxMyAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKIAkJCQkyQTExMTI0NjE5MkZDRTc5MDA1
RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTc2OTMsNiAr
NzcwMyw3IEBACiAJCQkJQTE1ODdENkUxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZv
cm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMEYxQzAzMEQ2QzAwMzhCQkNBIC8qIFNu
aXBwZXRPcGVyYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3MDFCNERDMTQxMDBENjk4
NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE1ODdENzUxQjREQzFDNjAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzOThGQUIxQzc1MERBNDAwNjBBOTYzIC8q
IEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzIxQjREQzE0MTAwRDY5
ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03
ODE1LDYgKzc4MjYsNyBAQAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdD
QkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzOEQyQTMxRDQ0
MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjA2LDM0ICsxMjA2LDIwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAg
Q29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2Nh
dG9yKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgewotICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
LSAgICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yID0gdm0uaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIGppdC5l
bWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0
aCk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcg
KGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5i
cmFuY2hTdWJQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpT
aWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgICAgICAgICBqaXQubmVn
UHRyKHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1Zh
bHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0g
b2xkIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxh
YmxlCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8
IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1Miw3ICs4NTIsNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
V2l0CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkFycmF5
IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpKSk7CiAKICAg
ICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVyZSwg
c2l6ZSk7Ci0gICAgcmVzdWx0LT5idXR0ZXJmbHkoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIGJhY2tp
bmcgc3RvcmUgaXMgaW4gdG8tc3BhY2UuCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4o
cmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTA3LDI3ICszOTA3LDMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIp
OwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BS
LCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3Rv
cmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAor
ICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JB
dXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgbmFuID0gSlNWYWx1
ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMucGF5bG9hZCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBK
U1ZhbHVlIGhvbGU7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSkKKyAgICAgICAgICAgICAgICBob2xlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgUE5hTik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaG9sZSA9IEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMudGFnKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKGhvbGUudS5hc0JpdHMucGF5
bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKKyAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhW
YXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODY5LDI3ICszODY5LDMxIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0
Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihU
cnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBt
X2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5l
bWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIsIG1f
aml0LnZtKCktPmhlYXAuc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCksIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwKKyAgICAgICAgICAgICAgICBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHN0b3JhZ2VHUFIpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2Rl
LT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBz
dG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkp
KSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRf
dD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVH
UFIsIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoMkdQ
Uik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5s
YWJlbCgpOwotICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5saW5rVG8obG9vcCwgJm1faml0
KTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoMkdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1f
aml0LmxhYmVsKCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxs
b2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRH
UFIsCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
MDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QWxsb2NhdGVSYXdPYmplCiAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3By
KCk7CiAKICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoID49IG51bUVsZW1lbnRzKTsKLSAgICB2ZWN0
b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIHZlY3Rvckxlbmd0aCk7CisgICAg
dmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChz
dHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aCk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKIApAQCAtMTAzLDEyICsxMDMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIHNpemUgKz0gb3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXpl
b2YoSlNWYWx1ZSk7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KAotICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0ZWRJbW0zMihzaXpl
KSwgc3RvcmFnZUdQUikpOwotICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCi0gICAgICAg
ICAgICBtX2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKHZlY3Rvckxlbmd0aCAqIHNpemVvZihKU1Zh
bHVlKSksIHN0b3JhZ2VHUFIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ppdC5hZGRQ
dHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlR1BSKTsKKyAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRv
ckZvckF1eGlsaWFyeURhdGEoc2l6ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuZW1p
dEFsbG9jYXRlKHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMp
OworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKAorICAgICAgICAgICAgVHJ1c3RlZElt
bTMyKG91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksCisgICAgICAgICAgICBzdG9yYWdlR1BSKTsKICAgICB9IGVsc2UKICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdlR1BSKTsKIApAQCAtMTI3LDE0ICsx
MjcsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1Jhd09iamVjdCwgcmVzdWx0R1BSLCBzdG9y
YWdlR1BSLAogICAgICAgICBzdHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aCkpOwogCi0gICAgaWYgKGhh
c0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSAmJiBudW1FbGVtZW50cyA8IHZlY3Rv
ckxlbmd0aCkgeworICAgIGlmIChudW1FbGVtZW50cyA8IHZlY3Rvckxlbmd0aCkgewogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2Fz
dDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaGFzRG91YmxlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVv
Zihkb3VibGUpICogaSkpOwogI2Vsc2UKICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciB2
YWx1ZTsKLSAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSk7CisgICAgICAgIGlmIChoYXNEb3VibGUoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICB2YWx1ZS5hc0ludDY0ID0gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUuYXNJbnQ2NCA9IEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1FbGVtZW50czsgaSA8IHZl
Y3Rvckxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0z
Mih2YWx1ZS5hc0JpdHMudGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKGRvdWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKHZhbHVlLmFzQml0
cy5wYXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRv
dWJsZSkgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7
CkBAIC02NzI2LDE4ICs2NzMyLDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxv
Y2F0ZVByb3AKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsK
ICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNj
cmF0Y2gyLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwog
ICAgICAgICAKICAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPm91dE9m
TGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgPT0g
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAKLSAg
ICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJhc2lj
U3RvcmFnZSgKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihpbml0aWFsT3V0T2ZMaW5lQ2FwYWNp
dHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0KLSAgICBtX2ppdC5hZGRQdHIo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRj
aEdQUjEpOworICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6
ZW9mKEpTVmFsdWUpOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6
ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOworICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7
CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENh
bGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aElu
aXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKQEAgLTY3NzIsMTYgKzY3ODQsMjEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIFN0b3JhZ2VPcGVyYW5k
IG9sZFN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CiAgICAgR1BSUmVnIG9sZFN0b3JhZ2VHUFIgPSBvbGRTdG9yYWdlLmdwcigpOwog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOwogICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwotICAgICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVt
cCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShUcnVzdGVkSW1t
MzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKTsKLQotICAgIG1faml0LmFkZFB0cihKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7CisgICAgCisgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIG1faml0Lm1vdmUoCisgICAgICAgIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvckF1eGls
aWFyeURhdGEobmV3U2l6ZSkpLAorICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgbV9qaXQuZW1p
dEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRo
KTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihuZXdT
aXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgCiAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwg
dGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBuZXdT
aXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIw
MzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNCw3ICs1MTQsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHVibGlj
TGVuZ3RoID0gcmVzdWx0QXJyYXkuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIHB1YmxpY0xlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9CisgICAgICAgICAg
ICAgICAgICAgICAgICBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0
cnVjdHVyZSwgcHVibGljTGVuZ3RoKTsKIAogICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogaW5kZXhVSUQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmluZGV4LmltcGwoKTsKICAg
ICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlucHV0VUlEID0gdm0oKS5wcm9w
ZXJ0eU5hbWVzLT5pbnB1dC5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
NjYsNyArMzc2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKG1pbkNhcGFjaXR5KSkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVWYXJpYWJsZVNp
emVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCi0gICAgICAgICAgICAgICAgc2l6ZSwgc3RydWN0
dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgbV9vdXQu
emVyb0V4dFB0cihzaXplKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLnZhbHVl
LCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOwpAQCAtNDA2Miw5
ICs0MDYyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9
IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBM
VmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVy
Zmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9j
YXRvckZvclNpemUoCisgICAgICAgICAgICAgICAgdm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxp
YXJ5RGF0YSgpLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUg
c3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFpbENhc2UpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuc3ViKGVu
ZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9
IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgb2JqZWN0ID0g
YWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZhaWxDYXNlKTsK
ICAgICAgICAgICAgIApAQCAtNjkxOSwxMSArNjkyMSwxNCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5z
ZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRF
bmQoYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIExWYWx1ZSBzdGFy
dE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoCisgICAgICAgICAgICAgICAgICAgIGFsbG9j
YXRvckZvclNpemUodm0oKS5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCBidXR0ZXJm
bHlTaXplLCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKIAogICAg
ICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSAtIGluZGV4aW5nSGVhZGVyU2l6ZSkpOworICAgICAgICAgICAgICAg
ICAgICBzdGFydE9mU3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAKICAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwgZmFzdEJ1dHRlcmZseVZhbHVl
LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAgIApAQCAt
NzcxNywxMCArNzcyMiwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0aWFsaXplQXJyYXlF
bGVtZW50cyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBMVmFsdWUgdmVjdG9yTGVuZ3RoLCBM
VmFsdWUgYnV0dGVyZmx5KQogICAgIHsKLSAgICAgICAgaWYgKCFoYXNEb3VibGUoaW5kZXhpbmdU
eXBlKSkgewotICAgICAgICAgICAgLy8gVGhlIEdDIGFscmVhZHkgaW5pdGlhbGl6ZWQgZXZlcnl0
aGluZyB0byBKU1ZhbHVlKCkgZm9yIHVzLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgICAgIExWYWx1ZSBob2xlOworICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlw
ZSkpCisgICAgICAgICAgICBob2xlID0gbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50
NjRfdD4oUE5hTikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBob2xlID0gbV9vdXQuY29u
c3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSk7CiAKICAgICAgICAgLy8gRG91Ymxl
cyBtdXN0IGJlIGluaXRpYWxpemVkIHRvIFBOYU4uCiAgICAgICAgIExCYXNpY0Jsb2NrIGluaXRM
b29wID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTc3MzUsOSArNzc0MSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgb3JpZ2luYWxJbmRleCk7CiAg
ICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIG9yaWdpbmFs
UG9pbnRlcik7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLAotICAgICAgICAg
ICAgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMuYXRBbnlJbmRl
eCgpLCBwb2ludGVyKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQoaG9sZSwgVHlwZWRQb2ludGVy
KG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMuYXRBbnlJbmRleCgpLCBwb2ludGVyKSk7
CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbmV4dEluZGV4ID0gbV9vdXQuc3ViKGluZGV4LCBt
X291dC5pbnQzMk9uZSk7CiAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5kZXgsIG1f
b3V0LmFuY2hvcihuZXh0SW5kZXgpKTsKQEAgLTc3OTgsMTIgKzc4MDIsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKICAg
ICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3Qmxv
Y2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3Jh
Z2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVlKSksIHNsb3dQYXRoKTsKKwor
ICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1
ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9j
YXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZUluQnl0ZXMpOworICAgICAgICBMVmFsdWUgc3RhcnRP
ZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0SW50UHRyKCZhbGxvY2F0b3Ip
LCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVy
Zmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50
UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKKyAgICAgICAgICAg
IG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRlcyArIHNpemVvZihJbmRleGlu
Z0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTgzNzMsNyArODM3OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAgfQogCi0gICAgTFZhbHVlIGFs
bG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICBM
VmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93
UGF0aCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nlc3MgPSBtX291dC5uZXdCbG9j
aygpOwogICAgIApAQCAtODM5NCw3ICs4Mzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQu
c3RvcmVQdHIoCiAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHJlc3VsdCwgbV9oZWFwcy5KU0Nl
bGxfZnJlZUxpc3ROZXh0KSwKICAgICAgICAgICAgIGFsbG9jYXRvciwgbV9oZWFwcy5NYXJrZWRB
bGxvY2F0b3JfZnJlZUxpc3RIZWFkKTsKLQorICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCkBAIC04NDA4LDcgKzg0MTMsNyBAQCBwcml2YXRlOgogCiAgICAgTFZh
bHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
TEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxs
b2NhdGVDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
YWxsb2NhdGVIZWFwQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVTdHJ1
Y3R1cmUocmVzdWx0LCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
QEAgLTg0MzYsNDYgKzg0NDEsNTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENsYXNzVHlwZTo6
YWxsb2NhdGlvblNpemUoMCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CiAgICAg
fQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLSAgICBMVmFsdWUgYWxs
b2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KAotICAgICAgICBMVmFsdWUgc2l6ZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAg
IExWYWx1ZSBhbGxvY2F0b3JGb3JTaXplKExWYWx1ZSBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExC
YXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtl
ZFNwYWNlOjpwcmVjaXNlU3RlcCAmIChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgLSAxKSksICJN
YXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAgICAg
ICAgc3RhdGljX2Fzc2VydCghKE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwICYgKE1hcmtlZFNw
YWNlOjppbXByZWNpc2VTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgbXVz
dCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKIAotICAgICAgICBMVmFsdWUgc3Vic3BhY2UgPSBtX291
dC5jb25zdEludFB0cigmdm0oKS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlw
ZT4oKSk7Ci0gICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBzbWFsbENhc2VCbG9jayA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhcmdlT3JPdmVyc2l6ZUNhc2VC
bG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhcmdlQ2FzZUJs
b2NrID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSB1cHJvdW5kZWRT
aXplID0gbV9vdXQuYWRkKHNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OnByZWNp
c2VTdGVwIC0gMSkpOwotICAgICAgICBMVmFsdWUgaXNTbWFsbCA9IG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OnByZWNpc2VDdXRvZmYpKTsK
KyAgICAgICAgTFZhbHVlIHVwcm91bmRlZFNpemUgPSBtX291dC5hZGQoc2l6ZSwgbV9vdXQuY29u
c3RJbnRQdHIoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIC0gMSkpOworICAgICAgICBMVmFsdWUg
aXNTbWFsbCA9IG1fb3V0LmJlbG93KHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50UHRyKE1h
cmtlZFNwYWNlOjpwcmVjaXNlQ3V0b2ZmKSk7CiAgICAgICAgIG1fb3V0LmJyYW5jaChpc1NtYWxs
LCB1bnN1cmUoc21hbGxDYXNlQmxvY2spLCB1bnN1cmUobGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
KSk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKHNtYWxsQ2FzZUJsb2NrLCBsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2spOwogICAgICAgICBU
eXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgIG1faGVh
cHMuTWFya2VkU3BhY2VfU3Vic3BhY2VfcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAg
ICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0
LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCkpKSkpOworICAg
ICAgICAgICAgbV9vdXQubFNocih1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKGdldExT
QlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXApKSkpOwogICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbWFsbEFsbG9jYXRvciA9IG1fb3V0LmFuY2hvcihhZGRyZXNzLnZhbHVlKCkpOwogICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2ssIGxhcmdlQ2FzZUJsb2NrKTsKICAgICAgICAg
bV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9v
dXQuY29uc3RJbnQzMihNYXJrZWRTcGFjZTo6aW1wcmVjaXNlQ3V0b2ZmKSksCisgICAgICAgICAg
ICBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludFB0cihNYXJrZWRTcGFj
ZTo6aW1wcmVjaXNlQ3V0b2ZmKSksCiAgICAgICAgICAgICB1c3VhbGx5KGxhcmdlQ2FzZUJsb2Nr
KSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhs
YXJnZUNhc2VCbG9jaywgY29udGludWF0aW9uKTsKICAgICAgICAgYWRkcmVzcyA9IG1fb3V0LmJh
c2VJbmRleCgKICAgICAgICAgICAgIG1faGVhcHMuTWFya2VkU3BhY2VfU3Vic3BhY2VfaW1wcmVj
aXNlQWxsb2NhdG9ycywgc3Vic3BhY2UsCi0gICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKG1f
b3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2Vk
U3BhY2U6OmltcHJlY2lzZVN0ZXApKSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3Vu
ZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OmltcHJlY2lz
ZVN0ZXApKSkpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZUFsbG9jYXRvciA9IG1fb3V0
LmFuY2hvcihhZGRyZXNzLnZhbHVlKCkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgp
LCBzbWFsbEFsbG9jYXRvciwgbGFyZ2VBbGxvY2F0b3IpOwotICAgICAgICAKKyAgICAgICAgcmV0
dXJuIG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBzbWFsbEFsbG9jYXRvciwgbGFyZ2VBbGxvY2F0
b3IpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShNYXJrZWRTcGFj
ZTo6U3Vic3BhY2UmIHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
CisgICAgeworICAgICAgICByZXR1cm4gYWxsb2NhdG9yRm9yU2l6ZShtX291dC5jb25zdEludFB0
cigmc3Vic3BhY2UpLCBzaXplLCBzbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENsYXNzVHlwZT4KKyAgICBMVmFsdWUgYWxsb2NhdGVWYXJpYWJsZVNpemVkT2Jq
ZWN0KAorICAgICAgICBMVmFsdWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBi
dXR0ZXJmbHksIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGFs
bG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoCisgICAgICAgICAgICB2bSgpLmhlYXAuc3Vic3Bh
Y2VGb3JPYmplY3RPZlR5cGU8Q2xhc3NUeXBlPigpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAg
IHJldHVybiBhbGxvY2F0ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBz
bG93UGF0aCk7CiAgICAgfQogICAgIApAQCAtODU1NCwzNCArODU2NywzNCBAQCBwcml2YXRlOgog
ICAgIEFycmF5VmFsdWVzIGFsbG9jYXRlSlNBcnJheSgKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIG51bUVsZW1lbnRzLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVCgKKyAgICAgICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgIG1fZ3Jh
cGgsIG1fbm9kZSwKICAgICAgICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKQogICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkKICAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQog
ICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7
CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOworICAgICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3Ro
KDBsdSwgbnVtRWxlbWVudHMpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFn
ZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoICsgc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0aCk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRv
ciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoCisgICAg
ICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGggKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2Vs
bChtX291dC5jb25zdEludFB0cigmYWxsb2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigKLSAgICAgICAgICAgIGVuZE9mU3Rv
cmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKSk7
CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQoc3RhcnRPZlN0b3JhZ2UsIG1f
b3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PigKLSAgICAgICAgICAg
IHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CisgICAgICAgIExWYWx1ZSBvYmplY3Qg
PSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgp
OwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG51bUVs
ZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAg
ICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIodmVjdG9yTGVuZ3RoKSwgYnV0dGVy
Zmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAKLSAgICAgICAg
aWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwKLSAgICAgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBob2xlOworICAgICAgICBp
ZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgaG9s
ZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1FbGVtZW50czsg
aSA8IHZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChob2xlLCBi
dXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXNbaV0pOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwgYnV0dGVyZmx5KTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1
ZGUgIkhlYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcFV0aWwuaCIKICNpbmNsdWRlICJKU0Nl
bGwuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAg
LTUxLDE2ICs1MiwxNiBAQCBDb25zZXJ2YXRpdmVSb290czo6Q29uc2VydmF0aXZlUm9vdHMoTWFy
CiBDb25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3RzKCkKIHsKICAgICBpZiAobV9y
b290cyAhPSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRS
ZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSlNDZWxsKikpOworICAgICAgICBP
U0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXpl
b2YoSGVhcENlbGwqKSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogewog
ICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1fY2FwYWNpdHkgPT0gaW5saW5lQ2FwYWNpdHkgPyBu
b25JbmxpbmVDYXBhY2l0eSA6IG1fY2FwYWNpdHkgKiAyOwotICAgIEpTQ2VsbCoqIG5ld1Jvb3Rz
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKio+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KG5l
d0NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKSk7Ci0gICAgbWVtY3B5KG5ld1Jvb3RzLCBtX3Jv
b3RzLCBtX3NpemUgKiBzaXplb2YoSlNDZWxsKikpOworICAgIEhlYXBDZWxsKiogbmV3Um9vdHMg
PSBzdGF0aWNfY2FzdDxIZWFwQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChu
ZXdDYXBhY2l0eSAqIHNpemVvZihIZWFwQ2VsbCopKSk7CisgICAgbWVtY3B5KG5ld1Jvb3RzLCBt
X3Jvb3RzLCBtX3NpemUgKiBzaXplb2YoSGVhcENlbGwqKSk7CiAgICAgaWYgKG1fcm9vdHMgIT0g
bV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSht
X3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICAgICAgT1NBbGxvY2F0
b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEhlYXBD
ZWxsKikpOwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICBtX3Jvb3RzID0gbmV3
Um9vdHM7CiB9CkBAIC03MiwxMyArNzMsMTQgQEAgaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9v
dHM6OmdlbmVyaWNBZAogCiAgICAgbV9jb3BpZWRTcGFjZS0+cGluSWZOZWNlc3NhcnkocCk7CiAK
LSAgICBpZiAoIUhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KGZpbHRlciwgKm1fYmxvY2tzLCBwKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQotICAgICAg
ICBncm93KCk7Ci0KLSAgICBtX3Jvb3RzW21fc2l6ZSsrXSA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+
KHApOworICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2ludGVycygKKyAgICAgICAgZmlsdGVy
LCAqbV9ibG9ja3MsIHAsCisgICAgICAgIFsmXSAodm9pZCogcCkgeworICAgICAgICAgICAgaWYg
KG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQorICAgICAgICAgICAgICAgIGdyb3coKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9yb290c1ttX3NpemUrK10gPSBiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihwKTsKKyAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5o
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw4IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBKSVRTdHVi
Um91dGluZVNldDsKLWNsYXNzIEpTQ2VsbDsKIAogY2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewog
cHVibGljOgpAQCAtNDQsMTEgKzQ0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCh2b2lkKiBi
ZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYpOwogICAg
IAogICAgIHNpemVfdCBzaXplKCk7Ci0gICAgSlNDZWxsKiogcm9vdHMoKTsKKyAgICBIZWFwQ2Vs
bCoqIHJvb3RzKCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbmxpbmVD
YXBhY2l0eSA9IDEyODsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNhcGFjaXR5
ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklu
bGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihIZWFwQ2VsbCopOwogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1hcmtIb29rPgogICAgIHZvaWQgZ2VuZXJpY0FkZFBvaW50ZXIodm9pZCos
IFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKQEAgLTU4LDEyICs1OCwxMiBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgZ3JvdygpOwogCi0gICAgSlNDZWxsKiogbV9yb290czsKKyAgICBI
ZWFwQ2VsbCoqIG1fcm9vdHM7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBzaXplX3QgbV9jYXBh
Y2l0eTsKICAgICBNYXJrZWRCbG9ja1NldCogbV9ibG9ja3M7CiAgICAgQ29waWVkU3BhY2UqIG1f
Y29waWVkU3BhY2U7Ci0gICAgSlNDZWxsKiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5XTsK
KyAgICBIZWFwQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBhY2l0eV07CiB9OwogCiBpbmxp
bmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKQEAgLTcxLDcgKzcxLDcgQEAgaW5s
aW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiAgICAgcmV0dXJuIG1fc2l6ZTsK
IH0KIAotaW5saW5lIEpTQ2VsbCoqIENvbnNlcnZhdGl2ZVJvb3RzOjpyb290cygpCitpbmxpbmUg
SGVhcENlbGwqKiBDb25zZXJ2YXRpdmVSb290czo6cm9vdHMoKQogewogICAgIHJldHVybiBtX3Jv
b3RzOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlz
aW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDYgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgQnV0dGVyZmx5Q29weVRva2VuLAogICAgIFR5cGVkQXJy
YXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0b3JlQ29weVRva2VuLAogICAgIERp
cmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsMTIgKzU5OCw2IEBAIHZvaWQgSGVh
cDo6Y29weUJhY2tpbmdTdG9yZXMoKQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBDb3B5V29ya0xpc3QmIHdvcmtMaXN0ID0gYmxvY2stPndvcmtMaXN0
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENvcHlXb3JrbGlzdEl0ZW0gaXRlbSA6
IHdvcmtMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udG9rZW4o
KSA9PSBCdXR0ZXJmbHlDb3B5VG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpdGVtLmNlbGwoKSwgY29weVZpc2l0b3IsIEJ1dHRlcmZseUNvcHlUb2tlbik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKS0+bWV0aG9kVGFibGUoKS0+Y29weUJhY2tp
bmdTdG9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCksIGNv
cHlWaXNpdG9yLCBpdGVtLnRva2VuKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MTM0Nyw4ICsxMzQxLDE1IEBAIHZvaWQgSGVhcDo6cmVzZXRBbGxvY2F0b3JzKCkKIAogdm9pZCBI
ZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CisgICAgCiAgICAgR0NQSEFTRShVcGRhdGVBbGxvY2F0aW9uTGltaXRz
KTsKICAgICAKKyAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAg
ICAgICBkYXRhTG9nKCJieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9ICIsIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGUsICJcbiIpOworICAgIH0KKyAgICAKICAgICAvLyBDYWxjdWxhdGUgb3VyIGN1
cnJlbnQgaGVhcCBzaXplIHRocmVzaG9sZCBmb3IgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0
IHdoZW4gd2Ugc2hvdWxkCiAgICAgLy8gcnVuIGFub3RoZXIgY29sbGVjdGlvbi4gVGhpcyBpc24n
dCB0aGUgc2FtZSBhcyBlaXRoZXIgc2l6ZSgpIG9yIGNhcGFjaXR5KCksIHRob3VnaCBpdCBzaG91
bGQKICAgICAvLyBiZSBzb21ld2hlcmUgYmV0d2VlbiB0aGUgdHdvLiBUaGUga2V5IGlzIHRvIG1h
dGNoIHRoZSBzaXplIGNhbGN1bGF0aW9ucyBpbnZvbHZlZCBjYWxscyB0bwpAQCAtMTM2NCw2ICsx
MzY1LDggQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICAvLyBvZiBm
cmFnbWVudGF0aW9uLCB0aGlzIG1heSBiZSBzdWJzdGFudGlhbC4gRm9ydHVuYXRlbHksIG1hcmtl
ZCBzcGFjZSByYXJlbHkgZnJhZ21lbnRzIGJlY2F1c2UKICAgICAvLyBjZWxscyB1c3VhbGx5IGhh
dmUgYSBuYXJyb3cgcmFuZ2Ugb2Ygc2l6ZXMuIFNvLCB0aGUgdW5kZXJlc3RpbWF0aW9uIGlzIHBy
b2JhYmx5IE9LLgogICAgIGN1cnJlbnRIZWFwU2l6ZSArPSBtX3RvdGFsQnl0ZXNWaXNpdGVkOwor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJ0b3RhbEJ5dGVzVmlzaXRlZCA9ICIs
IG1fdG90YWxCeXRlc1Zpc2l0ZWQsICIsIGN1cnJlbnRIZWFwU2l6ZSA9ICIsIGN1cnJlbnRIZWFw
U2l6ZSwgIlxuIik7CiAKICAgICAvLyBGb3IgY29waWVkIHNwYWNlLCB3ZSB1c2UgdGhlIGNhcGFj
aXR5IG9mIHN0b3JhZ2Ugc3BhY2UuIFRoaXMgaXMgYmVjYXVzZSBjb3BpZWQgc3BhY2UgbWF5IGdl
dAogICAgIC8vIGJhZGx5IGZyYWdtZW50ZWQgYmV0d2VlbiBmdWxsIGNvbGxlY3Rpb25zLiBUaGlz
IGFyaXNlcyB3aGVuIGVhY2ggZWRlbiBjb2xsZWN0aW9uIGV2YWN1YXRlcwpAQCAtMTM3OSwxMCAr
MTM4MiwxNSBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMoKQogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAyNjgKICAgICBBU1NFUlQo
bV90b3RhbEJ5dGVzQ29waWVkIDw9IG1fc3RvcmFnZVNwYWNlLnNpemUoKSk7CiAgICAgY3VycmVu
dEhlYXBTaXplICs9IG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2coInN0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpID0gIiwgbV9zdG9yYWdl
U3BhY2UuY2FwYWNpdHkoKSwgIiwgY3VycmVudEhlYXBTaXplID0gIiwgY3VycmVudEhlYXBTaXpl
LCAiXG4iKTsKIAogICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gZW5zdXJlIHRoYXQgZXh0
cmFNZW1vcnlTaXplKCkgZW5kcyB1cCBjb3JyZXNwb25kaW5nIHRvIGFsbG9jYXRpb24tdGltZQog
ICAgIC8vIGV4dHJhIG1lbW9yeSByZXBvcnRpbmcuCiAgICAgY3VycmVudEhlYXBTaXplICs9IGV4
dHJhTWVtb3J5U2l6ZSgpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coImV4
dHJhTWVtb3J5U2l6ZSgpID0gIiwgZXh0cmFNZW1vcnlTaXplKCksICIsIGN1cnJlbnRIZWFwU2l6
ZSA9ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6Omdj
TWF4SGVhcFNpemUoKSAmJiBjdXJyZW50SGVhcFNpemUgPiBPcHRpb25zOjpnY01heEhlYXBTaXpl
KCkpCiAgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpleGl0V2l0aEZhaWx1cmUoKTsKQEAgLTEzOTIs
MjkgKzE0MDAsMzggQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICAg
ICAgLy8gdGhlIG5ldyBhbGxvY2F0aW9uIGxpbWl0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpemUg
b2YgdGhlIGhlYXAsIHdpdGggYQogICAgICAgICAvLyBmaXhlZCBtaW5pbXVtLgogICAgICAgICBt
X21heEhlYXBTaXplID0gbWF4KG1pbkhlYXBTaXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSksIHBy
b3BvcnRpb25hbEhlYXBTaXplKGN1cnJlbnRIZWFwU2l6ZSwgbV9yYW1TaXplKSk7CisgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRnVsbDogbWF4SGVhcFNpemUgPSAi
LCBtX21heEhlYXBTaXplLCAiXG4iKTsKICAgICAgICAgbV9tYXhFZGVuU2l6ZSA9IG1fbWF4SGVh
cFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZygiRnVsbDogbWF4RWRlblNpemUgPSAiLCBtX21heEVkZW5TaXplLCAiXG4iKTsK
ICAgICAgICAgbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3QgPSBjdXJyZW50SGVhcFNpemU7Cisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRnVsbDogc2l6ZUFmdGVy
TGFzdEZ1bGxDb2xsZWN0ID0gIiwgY3VycmVudEhlYXBTaXplLCAiXG4iKTsKICAgICAgICAgbV9i
eXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0ID0gMDsKKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCJGdWxsOiBieXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1
bGxDb2xsZWN0ID0gIiwgMCwgIlxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotICAgICAgICAKICAgICAgICAgQVNTRVJUKGN1cnJl
bnRIZWFwU2l6ZSA+PSBtX3NpemVBZnRlckxhc3RDb2xsZWN0KTsKLSAgICAgICAgbV9tYXhFZGVu
U2l6ZSA9IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgICAgIC8vIFRoZW9y
ZXRpY2FsbHksIHdlIHNob3VsZG4ndCBldmVyIHNjYW4gbW9yZSBtZW1vcnkgdGhhbiB0aGUgaGVh
cCBzaXplIHdlIHBsYW5uZWQgdG8gaGF2ZS4KKyAgICAgICAgLy8gQnV0IHdlIGFyZSBzbG9wcHks
IHNvIHdlIGhhdmUgdG8gZGVmZW5kIGFnYWluc3QgdGhlIG92ZXJmbG93LgorICAgICAgICBtX21h
eEVkZW5TaXplID0gY3VycmVudEhlYXBTaXplID4gbV9tYXhIZWFwU2l6ZSA/IDAgOiBtX21heEhl
YXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkVkZW46IG1heEVkZW5TaXplID0gIiwgbV9tYXhFZGVuU2l6ZSwgIlxuIik7
CiAgICAgICAgIG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0ID0gY3VycmVudEhlYXBTaXplOwot
ICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgZGF0YUxvZygiTWF4IGhlYXAgc2l6
ZTogIiwgbV9tYXhIZWFwU2l6ZSwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJDdXJyZW50
IGhlYXAgc2l6ZTogIiwgY3VycmVudEhlYXBTaXplLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFM
b2coIlNpemUgYWZ0ZXIgbGFzdCBlZGVuIGNvbGxlY3Rpb246ICIsIG1fc2l6ZUFmdGVyTGFzdEVk
ZW5Db2xsZWN0LCAiXG4iKTsKLSAgICAgICAgfQotICAgICAgICBkb3VibGUgZWRlblRvT2xkR2Vu
ZXJhdGlvblJhdGlvID0gKGRvdWJsZSltX21heEVkZW5TaXplIC8gKGRvdWJsZSltX21heEhlYXBT
aXplOwogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkVkZW4gdG8g
b2xkIGdlbmVyYXRpb24gcmF0aW86ICIsIGVkZW5Ub09sZEdlbmVyYXRpb25SYXRpbywgIlxuIik7
CisgICAgICAgICAgICBkYXRhTG9nKCJFZGVuOiBzaXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3QgPSAi
LCBjdXJyZW50SGVhcFNpemUsICJcbiIpOworICAgICAgICBkb3VibGUgZWRlblRvT2xkR2VuZXJh
dGlvblJhdGlvID0gKGRvdWJsZSltX21heEVkZW5TaXplIC8gKGRvdWJsZSltX21heEhlYXBTaXpl
OwogICAgICAgICBkb3VibGUgbWluRWRlblRvT2xkR2VuZXJhdGlvblJhdGlvID0gMS4wIC8gMy4w
OwogICAgICAgICBpZiAoZWRlblRvT2xkR2VuZXJhdGlvblJhdGlvIDwgbWluRWRlblRvT2xkR2Vu
ZXJhdGlvblJhdGlvKQogICAgICAgICAgICAgbV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uID0gdHJ1
ZTsKICAgICAgICAgLy8gVGhpcyBzZWVtcyBzdXNwZWN0IGF0IGZpcnN0LCBidXQgd2hhdCBpdCBk
b2VzIGlzIGVuc3VyZSB0aGF0IHRoZSBudXJzZXJ5IHNpemUgaXMgZml4ZWQuCiAgICAgICAgIG1f
bWF4SGVhcFNpemUgKz0gY3VycmVudEhlYXBTaXplIC0gbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdDsK
KyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJFZGVuOiBtYXhIZWFw
U2l6ZSA9ICIsIG1fbWF4SGVhcFNpemUsICJcbiIpOwogICAgICAgICBtX21heEVkZW5TaXplID0g
bV9tYXhIZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBkYXRhTG9nKCJFZGVuOiBtYXhFZGVuU2l6ZSA9ICIsIG1fbWF4RWRlblNpemUs
ICJcbiIpOwogICAgICAgICBpZiAobV9mdWxsQWN0aXZpdHlDYWxsYmFjaykgewogICAgICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRIZWFwU2l6ZSA+PSBtX3NpemVBZnRlckxhc3RGdWxsQ29sbGVjdCk7
CiAgICAgICAgICAgICBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNrLT5kaWRBbGxvY2F0ZShjdXJyZW50
SGVhcFNpemUgLSBtX3NpemVBZnRlckxhc3RGdWxsQ29sbGVjdCk7CkBAIC0xNDIyLDYgKzE0Mzks
OCBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMoKQogICAgIH0KIAogICAgIG1f
c2l6ZUFmdGVyTGFzdENvbGxlY3QgPSBjdXJyZW50SGVhcFNpemU7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2coInNpemVBZnRlckxhc3RDb2xsZWN0ID0gIiwgbV9zaXplQWZ0ZXJM
YXN0Q29sbGVjdCwgIlxuIik7CiAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IDA7CiAK
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtODMsMTMgKzgzLDE1IEBAIHR5cGVkZWYgSGFzaENvdW50ZWRT
ZXQ8Y29uc3QgY2hhcio+IFR5cGUKIAogZW51bSBIZWFwVHlwZSB7IFNtYWxsSGVhcCwgTGFyZ2VI
ZWFwIH07CiAKK2NsYXNzIEhlYXBVdGlsOworCiBjbGFzcyBIZWFwIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShIZWFwKTsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZy
aWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwogICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNv
bnN0IEpTVmFsdWUpOyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCi0gICAgc3RhdGljIEhlYXAq
IGhlYXAoY29uc3QgSlNDZWxsKik7CisgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSGVhcENl
bGwqKTsKIAogICAgIC8vIFRoaXMgY29uc3RhbnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mg
d2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBvZiBvdXIgCiAgICAgLy8gZGVhZGxpbmUgd2hlbiBj
YWxsaW5nIEhlYXA6OmlzUGFnZWRPdXQuIERlY3JlYXNpbmcgaXQgd2lsbCBjYXVzZSB1cyB0byBk
ZXRlY3QgCkBAIC0xMDIsMTEgKzEwNCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0ZXN0
QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCBzZXRNYXJrZWQoY29u
c3Qgdm9pZCopOwogCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJ1biBhZnRlciBzdG9w
QWxsb2NhdGlvbigpIGlzIGNhbGxlZCBhbmQgCi0gICAgLy8gYmVmb3JlIGxpdmVuZXNzIGRhdGEg
aXMgY2xlYXJlZCB0byBiZSBhY2N1cmF0ZS4KLSAgICBzdGF0aWMgYm9vbCBpc1BvaW50ZXJHQ09i
amVjdChUaW55Qmxvb21GaWx0ZXIsIE1hcmtlZEJsb2NrU2V0Jiwgdm9pZCogcG9pbnRlcik7Ci0g
ICAgc3RhdGljIGJvb2wgaXNWYWx1ZUdDT2JqZWN0KFRpbnlCbG9vbUZpbHRlciwgTWFya2VkQmxv
Y2tTZXQmLCBKU1ZhbHVlKTsKLQogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCop
OwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwogICAgIHZv
aWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwpAQCAtMTUwLDcgKzE0Nywx
MSBAQCBwdWJsaWM6CiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRo
b3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2Nh
dG9yRm9yKGJ5dGVzKTsgfQogICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0
V2l0aERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmRlc3Ry
dWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NU
eXBlPiBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0
ZXMpOworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShzaXpl
X3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5
dGVzKTsgfQogICAgIENvcGllZEFsbG9jYXRvciYgc3RvcmFnZUFsbG9jYXRvcigpIHsgcmV0dXJu
IG1fc3RvcmFnZVNwYWNlLmFsbG9jYXRvcigpOyB9CisgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlh
cnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRl
QXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlS
ZWFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogb2xkQmFzZSwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlB
bGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QsIHZvaWQqKik7CiAg
ICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93
bmVyLCB2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKICAgICB2b2lkIGFzY3JpYmVPd25lcihKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKQEAgLTI2Nyw2ICsyNjgsNyBAQCBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBHQ0xvZ2dpbmc7CiAgICAgZnJpZW5kIGNsYXNzIEdDVGhyZWFkOwog
ICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVTZXQ7CisgICAgZnJpZW5kIGNsYXNzIEhlYXBVdGlsOwog
ICAgIGZyaWVuZCBjbGFzcyBIZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJS
b3V0aW5lOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVk
ZSAiSGVhcC5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCiAjaW5jbHVkZSAiSlNDZWxs
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CkBAIC01
OSw3ICs2MCw3IEBAIGlubGluZSBib29sIEhlYXA6OmlzQ29sbGVjdGluZygpCiAgICAgcmV0dXJu
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb247CiB9CiAKLWlubGluZSBIZWFwKiBIZWFwOjpoZWFw
KGNvbnN0IEpTQ2VsbCogY2VsbCkKK2lubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEhlYXBD
ZWxsKiBjZWxsKQogewogICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhl
YXAoKTsKIH0KQEAgLTE5OSw3ICsyMDAsNyBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVX
aXRob3V0RGVzdHJ1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLXZvaWQqIEhl
YXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lkKiBIZWFw
OjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgLy8gSlNDZWxsOjpj
bGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0
b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCiAgICAgQVNTRVJUKCghQ2xh
c3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYg
U3RydWN0dXJlSXNJbW1vcnRhbCkgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKQEAgLTIxMCw3ICsyMTEsNyBAQCB2b2lkKiBI
ZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENsYXNzVHlwZT4KLU1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmpl
Y3RPZlR5cGUoKQoraW5saW5lIE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VG
b3JPYmplY3RPZlR5cGUoKQogewogICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBv
YmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVj
dGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwp
IHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46
OnZhbHVlKSk7CkBAIC0yMjEsNyArMjIyLDcgQEAgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFw
OjpzdWJzcGFjZUZvcgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci1NYXJrZWRB
bGxvY2F0b3ImIEhlYXA6OmFsbG9jYXRvckZvck9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCitp
bmxpbmUgTWFya2VkQWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6
ZV90IGJ5dGVzKQogewogICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3Rz
IGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8
fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0
ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVl
KSk7CkBAIC0yMzEsNiArMjMyLDM3IEBAIE1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9y
Rm9yT2JqZWMKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Io
Ynl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxs
KiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gbV9v
YmplY3RTcGFjZS5hbGxvY2F0ZUF1eGlsaWFyeShieXRlcyk7CisjaWYgRU5BQkxFKEFMTE9DQVRJ
T05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9m
IGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsIHJlc3VsdCk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKKyNlbmRpZgorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUF1eGlsaWFy
eShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1
bHQgPSBtX29iamVjdFNwYWNlLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGJ5dGVzKTsKKyNpZiBFTkFC
TEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAl
bHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25l
ciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2Vu
ZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OnRyeVJlYWxs
b2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXpl
X3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgdm9pZCogbmV3QmFzZSA9IHRyeUFs
bG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIG5ld1NpemUpOworICAgIGlmICghbmV3QmFz
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2Us
IG9sZFNpemUpOworICAgIHJldHVybiBuZXdCYXNlOworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xl
YW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90
IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewogICAgIENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1f
c3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpOwpAQCAtMzU0LDMzICszODYs
NiBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkaWRGcmVlQmxvY2soc2l6ZV90IGNhCiAjZW5kaWYKIH0K
IAotaW5saW5lIGJvb2wgSGVhcDo6aXNQb2ludGVyR0NPYmplY3QoVGlueUJsb29tRmlsdGVyIGZp
bHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0LCB2b2lkKiBwb2ludGVyKQotewot
ICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocG9pbnRl
cik7Ci0gICAgaWYgKGZpbHRlci5ydWxlT3V0KGJpdHdpc2VfY2FzdDxCaXRzPihjYW5kaWRhdGUp
KSkgewotICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAhbWFya2VkQmxvY2tTZXQuc2V0KCku
Y29udGFpbnMoY2FuZGlkYXRlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIU1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKHBvaW50ZXIpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5zKGNhbmRp
ZGF0ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghY2FuZGlkYXRlLT5pc0xp
dmVDZWxsKHBvaW50ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotaW5saW5lIGJvb2wgSGVhcDo6aXNWYWx1ZUdDT2JqZWN0KFRpbnlCbG9vbUZpbHRl
ciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIGlzUG9pbnRlckdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIHN0YXRpY19j
YXN0PHZvaWQqPih2YWx1ZS5hc0NlbGwoKSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEhlYXBJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBVdGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFV0aWwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
VXRpbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBcmUgeW91IHRpcmVkIG9mIHdhaXRp
bmcgZm9yIGFsbCBvZiBXZWJLaXQgdG8gYnVpbGQgYmVjYXVzZSB5b3UgY2hhbmdlZCB0aGUgaW1w
bGVtZW50YXRpb24gb2YgYQorLy8gZnVuY3Rpb24gaW4gSGVhcElubGluZXMuaD8gIERvZXMgaXQg
Ym90aGVyIHlvdSB0aGF0IHlvdSdyZSB3YWl0aW5nIG9uIHJlYnVpbGRpbmcgdGhlIEpTIERPTQor
Ly8gYmluZGluZ3MgZXZlbiB0aG91Z2ggeW91ciBjaGFuZ2UgaXMgaW4gYSBmdW5jdGlvbiBjYWxs
ZWQgZnJvbSBvbmx5IDIgLmNwcCBmaWxlcz8gIFRoZW4gSGVhcFV0aWwuaAorLy8gaXMgZm9yIHlv
dSEgIEV2ZXJ5dGhpbmcgaW4gdGhpcyBjbGFzcyBzaG91bGQgYmUgYSBzdGF0aWMgbWV0aG9kIHRo
YXQgdGFrZXMgYSBIZWFwJiBpZiBuZWVkZWQuCisvLyBUaGlzIGlzIGEgZnJpZW5kIG9mIEhlYXAs
IHNvIHlvdSBjYW4gYWNjZXNzIGFsbCBvZiBIZWFwJ3MgcHJpdmF0ZXMuCisvLworLy8gVGhpcyBl
bmRzIHVwIGJlaW5nIGFuIGlzc3VlIGJlY2F1c2UgSGVhcCBleHBvc2VzIGEgbG90IG9mIG1ldGhv
ZHMgdGhhdCBvdWdodCB0byBiZSBpbmxpbmUgZm9yCisvLyBwZXJmb3JtYW5jZSBvciB0aGF0IG11
c3QgYmUgaW5saW5lIGJlY2F1c2UgdGhleSBhcmUgdGVtcGxhdGVzLiAgVGhpcyBjbGFzcyBvdWdo
dCB0byBjb250YWluCisvLyBtZXRob2RzIHRoYXQgYXJlIHVzZWQgZm9yIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgY29sbGVjdG9yLCBvciBmb3IgdW51c3VhbCBjbGllbnRzIHRoYXQgbmVlZAor
Ly8gdG8gcmVhY2ggZGVlcCBpbnRvIHRoZSBjb2xsZWN0b3IgZm9yIHNvbWUgcmVhc29uLiAgRG9u
J3QgcHV0IHRoaW5ncyBpbiBoZXJlIHRoYXQgd291bGQgY2F1c2UgeW91CisvLyB0byBoYXZlIHRv
IGluY2x1ZGUgaXQgZnJvbSBtb3JlIHRoYW4gYSBoYW5kZnVsIG9mIHBsYWNlcywgc2luY2UgdGhh
dCB3b3VsZCBkZWZlYXQgdGhlIHB1cnBvc2UuCisvLyBUaGlzIGNsYXNzIGlzbid0IGhlcmUgdG8g
bG9vayBwcmV0dHkuICBJdCdzIHRvIGxldCB1cyBoYWNrIHRoZSBHQyBtb3JlIGVhc2lseSEKKwor
Y2xhc3MgSGVhcFV0aWwgeworcHVibGljOgorICAgIC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBy
dW4gYWZ0ZXIgc3RvcEFsbG9jYXRpb24oKSBpcyBjYWxsZWQgYW5kIAorICAgIC8vIGJlZm9yZSBs
aXZlbmVzcyBkYXRhIGlzIGNsZWFyZWQgdG8gYmUgYWNjdXJhdGUuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KKyAgICBzdGF0aWMgdm9pZCBmaW5kR0NPYmplY3RQb2ludGVycygKKyAgICAg
ICAgVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtlZEJsb2NrU2V0
LCB2b2lkKiBwYXNzZWRQb2ludGVyLAorICAgICAgICBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsK
KyAgICAgICAgY2hhciogcG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihwYXNzZWRQb2ludGVy
KTsKKyAgICAKKyAgICAgICAgTWFya2VkQmxvY2sqIGNhbmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpi
bG9ja0Zvcihwb2ludGVyKTsKKyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSBmb3IgYSBidXR0ZXJm
bHkgcG9pbnRlciB0byBwb2ludCBwYXN0IHRoZSBlbmQgb2YgYSBidXR0ZXJmbHkuIENoZWNrIHRo
aXMgbm93LgorICAgICAgICBpZiAocG9pbnRlciA8PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNhbmRp
ZGF0ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgICAgICAvLyBXZSBtYXkg
YmUgaW50ZXJlc3RlZCBpbiB0aGUgbGFzdCBjZWxsIG9mIHRoZSBwcmV2aW91cyBNYXJrZWRCbG9j
ay4KKyAgICAgICAgICAgIGNoYXIqIHByZXZpb3VzUG9pbnRlciA9IHBvaW50ZXIgLSBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpIC0gMTsKKyAgICAgICAgICAgIE1hcmtlZEJsb2NrKiBwcmV2aW91c0Nh
bmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihwcmV2aW91c1BvaW50ZXIpOworICAgICAg
ICAgICAgaWYgKCFmaWx0ZXIucnVsZU91dChiaXR3aXNlX2Nhc3Q8Qml0cz4ocHJldmlvdXNDYW5k
aWRhdGUpKQorICAgICAgICAgICAgICAgICYmIG1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5z
KHByZXZpb3VzQ2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICYmIHByZXZpb3VzQ2FuZGlkYXRl
LT5jZWxsS2luZCgpID09IEhlYXBDZWxsOjpBdXhpbGlhcnkpIHsKKyAgICAgICAgICAgICAgICBw
cmV2aW91c1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocHJldmlvdXNDYW5kaWRhdGUtPmNl
bGxBbGlnbihwcmV2aW91c1BvaW50ZXIpKTsKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXND
YW5kaWRhdGUtPmlzTGl2ZUNlbGwocHJldmlvdXNQb2ludGVyKSkKKyAgICAgICAgICAgICAgICAg
ICAgZnVuYyhwcmV2aW91c1BvaW50ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
CisgICAgICAgIGlmIChmaWx0ZXIucnVsZU91dChiaXR3aXNlX2Nhc3Q8Qml0cz4oY2FuZGlkYXRl
KSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FuZGlkYXRlIHx8ICFtYXJrZWRCbG9ja1NldC5z
ZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIAorICAgICAgICBpZiAoIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5zKGNhbmRp
ZGF0ZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byB0cnlQb2ludGVyID0g
WyZdICh2b2lkKiBwb2ludGVyKSB7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5pc0xpdmVD
ZWxsKHBvaW50ZXIpKQorICAgICAgICAgICAgICAgIGZ1bmMocG9pbnRlcik7CisgICAgICAgIH07
CisgICAgCisgICAgICAgIGlmIChjYW5kaWRhdGUtPmNlbGxLaW5kKCkgPT0gSGVhcENlbGw6OkpT
Q2VsbCkgeworICAgICAgICAgICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2lu
dGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAgICAgdHJ5
UG9pbnRlcihwb2ludGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICAvLyBBIGJ1dHRlcmZseSBjb3VsZCBwb2ludCBpbnRvIHRoZSBtaWRkbGUgb2YgYW4g
b2JqZWN0LgorICAgICAgICBjaGFyKiBhbGlnbmVkUG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIq
PihjYW5kaWRhdGUtPmNlbGxBbGlnbihwb2ludGVyKSk7CisgICAgICAgIHRyeVBvaW50ZXIoYWxp
Z25lZFBvaW50ZXIpOworICAgIAorICAgICAgICAvLyBBbHNvLCBhIGJ1dHRlcmZseSBjb3VsZCBw
b2ludCBhdCB0aGUgZW5kIG9mIGFuIG9iamVjdCBwbHVzIHNpemVvZihJbmRleGluZ0hlYWRlciku
IEluIHRoYXQKKyAgICAgICAgLy8gY2FzZSwgdGhpcyBpcyBwb2ludGluZyB0byB0aGUgb2JqZWN0
IHRvIHRoZSByaWdodCBvZiB0aGUgb25lIHdlIHNob3VsZCBiZSBtYXJraW5nLgorICAgICAgICBp
ZiAoY2FuZGlkYXRlLT5hdG9tTnVtYmVyKGFsaWduZWRQb2ludGVyKSA+IE1hcmtlZEJsb2NrOjpm
aXJzdEF0b20oKQorICAgICAgICAgICAgJiYgcG9pbnRlciA8PSBhbGlnbmVkUG9pbnRlciArIHNp
emVvZihJbmRleGluZ0hlYWRlcikpCisgICAgICAgICAgICB0cnlQb2ludGVyKGFsaWduZWRQb2lu
dGVyIC0gY2FuZGlkYXRlLT5jZWxsU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJv
b2wgaXNQb2ludGVyR0NPYmplY3RKU0NlbGwoCisgICAgICAgIFRpbnlCbG9vbUZpbHRlciBmaWx0
ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCwgY29uc3Qgdm9pZCogcG9pbnRlcikK
KyAgICB7CisgICAgICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tGb3IocG9pbnRlcik7CisgICAgICAgIGlmIChmaWx0ZXIucnVsZU91dChiaXR3aXNlX2Nhc3Q8
Qml0cz4oY2FuZGlkYXRlKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FuZGlkYXRlIHx8ICFt
YXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFNYXJrZWRCbG9j
azo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlk
YXRlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChj
YW5kaWRhdGUtPmNlbGxLaW5kKCkgIT0gSGVhcENlbGw6OkpTQ2VsbCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICghY2FuZGlkYXRlLT5pc0xpdmVDZWxs
KHBvaW50ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzVmFsdWVHQ09iamVj
dCgKKyAgICAgICAgVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya2VkQmxvY2tTZXQmIG1hcmtl
ZEJsb2NrU2V0LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGlzUG9pbnRl
ckdDT2JqZWN0SlNDZWxsKGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIHN0YXRpY19jYXN0PHZvaWQq
Pih2YWx1ZS5hc0NlbGwoKSkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBNYXJrZWRB
bGxvY2F0b3I6OnJldGlyZShNYXJrZWRCbG9jawogICAgIGJsb2NrLT5kaWRSZXRpcmVCbG9jayhm
cmVlTGlzdCk7CiB9CiAKLWlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
SGVscGVyKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlV2l0aG91dENvbGxlY3RpbmdJbXBsKHNpemVfdCBieXRlcykKIHsKICAgICBpZiAobV9j
dXJyZW50QmxvY2spIHsKICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrID09IG1fbmV4dEJs
b2NrVG9Td2VlcCk7CkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxs
b2NhdG9yOjp0cnlQb3BGcmVlCiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAKLWlubGluZSB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rpbmcoc2l6ZV90IGJ5dGVz
KQogewogICAgIEFTU0VSVCghbV9oZWFwLT5pc0J1c3koKSk7CiAgICAgbV9oZWFwLT5tX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPSBBbGxvY2F0aW9uOwotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9j
YXRlSGVscGVyKGJ5dGVzKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRD
b2xsZWN0aW5nSW1wbChieXRlcyk7CiAKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9IE5vT3BlcmF0aW9uOwogICAgIEFTU0VSVChyZXN1bHQgfHwgIW1fY3VycmVudEJsb2NrKTsK
QEAgLTE0OCw2ICsxNDgsMTggQEAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
ZG9UZQogCiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5
dGVzKQogeworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0cnVlOworICAgIHJldHVybiBhbGxv
Y2F0ZVNsb3dDYXNlSW1wbChieXRlcywgY3Jhc2hPbkZhaWx1cmUpOworfQorCit2b2lkKiBNYXJr
ZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5dGVzKQoreworICAgIGJv
b2wgY3Jhc2hPbkZhaWx1cmUgPSBmYWxzZTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUlt
cGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjph
bGxvY2F0ZVNsb3dDYXNlSW1wbChzaXplX3QgYnl0ZXMsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit7
CiAgICAgQVNTRVJUKG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7CiAgICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogCkBAIC0xNTUsMzggKzE2Nyw1
NiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoCiAgICAgQVNTRVJU
KCFtX2ZyZWVMaXN0LmhlYWQpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5i
eXRlcyk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAg
IHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwogICAg
IAogICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIAogICAgIGlmIChtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKSkgewotICAg
ICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CisgICAgICAgIHJlc3VsdCA9IHRyeUFs
bG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwogICAgICAgICBpZiAocmVzdWx0KQogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBBU1NFUlQoIW1faGVhcC0+c2hv
dWxkQ29sbGVjdCgpKTsKICAgICAKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBhbGxvY2F0ZUJs
b2NrKGJ5dGVzKTsKLSAgICBBU1NFUlQoYmxvY2spOworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9
IHRyeUFsbG9jYXRlQmxvY2soYnl0ZXMpOworICAgIGlmICghYmxvY2spIHsKKyAgICAgICAgaWYg
KGNyYXNoT25GYWlsdXJlKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogICAg
IGFkZEJsb2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0
ZXMpOworICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoYnl0ZXMpOwog
ICAgIEFTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU1hcmtlZEJsb2Nr
KiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2soc2l6ZV90IGJ5dGVzKQorc3RhdGljIHNp
emVfdCBibG9ja0hlYWRlclNpemUoKQoreworICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplb2YoTWFya2VkQmxvY2spKTsKK30KKwor
c2l6ZV90IE1hcmtlZEFsbG9jYXRvcjo6YmxvY2tTaXplRm9yQnl0ZXMoc2l6ZV90IGJ5dGVzKQog
ewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9jazo6YmxvY2tTaXplOwotICAg
IHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJr
ZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpICsgV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOworICAgIHNpemVfdCBtaW5B
bGxvY2F0aW9uU2l6ZSA9IGJsb2NrSGVhZGVyU2l6ZSgpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwogICAgIG1pbkFsbG9jYXRpb25TaXpl
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKFdURjo6cGFnZVNpemUoKSwgbWluQWxsb2NhdGlv
blNpemUpOwotICAgIHNpemVfdCBibG9ja1NpemUgPSBzdGQ6Om1heChtaW5CbG9ja1NpemUsIG1p
bkFsbG9jYXRpb25TaXplKTsKKyAgICByZXR1cm4gc3RkOjptYXgobWluQmxvY2tTaXplLCBtaW5B
bGxvY2F0aW9uU2l6ZSk7Cit9CiAKLSAgICBzaXplX3QgY2VsbFNpemUgPSBtX2NlbGxTaXplID8g
bV9jZWxsU2l6ZSA6IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNp
emU+KGJ5dGVzKTsKK3NpemVfdCBNYXJrZWRBbGxvY2F0b3I6Om9wdGltYWxTaXplRm9yTGFyZ2VB
bGxvY2F0aW9uKHNpemVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gYmxvY2tTaXplRm9yQnl0ZXMo
Ynl0ZXMpIC0gYmxvY2tIZWFkZXJTaXplKCk7Cit9CiAKLSAgICByZXR1cm4gTWFya2VkQmxvY2s6
OmNyZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMp
OworTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jayhzaXplX3Qg
Ynl0ZXMpCit7CisgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGJsb2NrU2l6ZUZvckJ5dGVzKGJ5dGVz
KTsKKyAgICBzaXplX3QgY2VsbFNpemUgPSBtX2NlbGxTaXplID8gbV9jZWxsU2l6ZSA6IFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKKyAgICBy
ZXR1cm4gTWFya2VkQmxvY2s6OnRyeUNyZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUsIGNl
bGxTaXplLCBtX2F0dHJpYnV0ZXMpOwogfQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxv
Y2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1
Myw3IEBAIHB1YmxpYzoKICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBj
ZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQogICAgIHZv
aWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAg
ICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VM
YXN0QWN0aXZlQmxvY2soKQogICAgIHsKQEAgLTY4LDEzICs2OSwxOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbml0KEhlYXAqLCBNYXJrZWRTcGFjZSosIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxs
b2NhdG9yQXR0cmlidXRlcyYpOwogCiAgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGlu
ZSk7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBibG9ja1NpemVGb3JCeXRlcyhzaXplX3QpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3Qgb3B0aW1hbFNpemVGb3JMYXJnZUFs
bG9jYXRpb24oc2l6ZV90KTsKICAgIAogcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6
ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZUhlbHBlcihzaXplX3QpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKKyAgICB2b2lkKiBh
bGxvY2F0ZVNsb3dDYXNlSW1wbChzaXplX3QsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIHZv
aWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rpbmcoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QpOwogICAgIHZvaWQqIHRyeVBvcEZy
ZWVMaXN0KHNpemVfdCk7Ci0gICAgTWFya2VkQmxvY2sqIGFsbG9jYXRlQmxvY2soc2l6ZV90KTsK
KyAgICBNYXJrZWRCbG9jayogdHJ5QWxsb2NhdGVCbG9jayhzaXplX3QpOwogICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKCk7CiAgICAgdm9pZCByZXRpcmUo
TWFya2VkQmxvY2sqLCBNYXJrZWRCbG9jazo6RnJlZUxpc3QmKTsKICAgICAKQEAgLTExMywyMSAr
MTE5LDM1IEBAIGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiAKICAgICBt
X2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCit7CisgICAgTWFya2VkQmxvY2s6OkZyZWVD
ZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOworICAgIGlmIChVTkxJS0VMWSghaGVhZCkpIHsK
KyAgICAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcyk7CisgICAg
ICAgIGlmIChyZXN1bHQgJiYgIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNldChy
ZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKKyAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKKyAgICAgICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsKKyAgICByZXR1cm4gaGVh
ZDsKK30KKwogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGJ5
dGVzKQogewogICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVh
ZDsKICAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKSB7CiAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFs
bG9jYXRlU2xvd0Nhc2UoYnl0ZXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgbWVtc2V0KHJl
c3VsdCwgMHhDRCwgYnl0ZXMpOwotI2VuZGlmCisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVE
KQorICAgICAgICAgICAgbWVtc2V0KHJlc3VsdCwgMHhDRCwgYnl0ZXMpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0
OwotI2lmbmRlZiBOREVCVUcKLSAgICBtZW1zZXQoaGVhZCwgMHhDRCwgYnl0ZXMpOwotI2VuZGlm
CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBi
eXRlcyk7CiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTQg
KzM1LDMyIEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIGNvbnN0IGJvb2wgY29tcHV0ZUJhbGFu
Y2UgPSBmYWxzZTsKIHN0YXRpYyBzaXplX3QgYmFsYW5jZTsKIAotTWFya2VkQmxvY2sqIE1hcmtl
ZEJsb2NrOjpjcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHNp
emVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVz
JiBhdHRyaWJ1dGVzKQorc3RhdGljIGJvb2wgcmVzZXRGcmVlQ2VsbHNCYWRseSgpCit7CisgICAg
cmV0dXJuICFBU1NFUlRfRElTQUJMRUQgfHwgT3B0aW9uczo6cmVzZXRGcmVlQ2VsbHNCYWRseSgp
OworfQorCitzdGF0aWMgdm9pZCByZXNldEJhZGx5KHZvaWQqIGJhc2UsIHNpemVfdCBzaXplKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSBzaXplIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsgaS0t
OykgeworICAgICAgICBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2UpW2ldID0gSlNW
YWx1ZTo6ZW5jb2RlKAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PEpTQ2VsbCo+KHN0YXRpY19j
YXN0PGludHB0cl90Pig2NjYgKiA4KSkpOworICAgIH0KK30KKworTWFya2VkQmxvY2sqIE1hcmtl
ZEJsb2NrOjp0cnlDcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1
dGVzJiBhdHRyaWJ1dGVzKQogewogICAgIGlmIChjb21wdXRlQmFsYW5jZSkgewogICAgICAgICBi
YWxhbmNlKys7CiAgICAgICAgIGlmICghKGJhbGFuY2UgJSAxMCkpCiAgICAgICAgICAgICBkYXRh
TG9nKCJNYXJrZWRCbG9jayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsKICAgICB9Ci0gICAg
TWFya2VkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1hbGxvYyhibG9j
a1NpemUsIGNhcGFjaXR5KSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2VsbFNp
emUsIGF0dHJpYnV0ZXMpOworICAgIHZvaWQqIGJsb2NrU3BhY2UgPSB0cnlGYXN0QWxpZ25lZE1h
bGxvYyhibG9ja1NpemUsIGNhcGFjaXR5KTsKKyAgICBpZiAoIWJsb2NrU3BhY2UpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGlmIChyZXNldEZyZWVDZWxsc0JhZGx5KCkpCisgICAgICAg
IHJlc2V0QmFkbHkoYmxvY2tTcGFjZSwgY2FwYWNpdHkpOworICAgIE1hcmtlZEJsb2NrKiBibG9j
ayA9IG5ldyAoTm90TnVsbCwgYmxvY2tTcGFjZSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBh
Y2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMpOwogICAgIGhlYXAuZGlkQWxsb2NhdGVCbG9jayhj
YXBhY2l0eSk7CiAgICAgcmV0dXJuIGJsb2NrOwogfQpAQCAtOTIsMTEgKzExMCwxMSBAQCBpbmxp
bmUgdm9pZCBNYXJrZWRCbG9jazo6Y2FsbERlc3RydWN0b3IoCiAgICAgY2VsbC0+emFwKCk7CiB9
CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtlZEJs
b2NrOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBib29sIGNhbGxEZXN0cnVjdG9ycz4KK3RlbXBsYXRl
PE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtlZEJsb2NrOjpTd2VlcE1v
ZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9j
azo6UmVzZXRNb2RlIHJlc2V0TW9kZT4KIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9j
azo6c3BlY2lhbGl6ZWRTd2VlcCgpCiB7CiAgICAgQVNTRVJUKGJsb2NrU3RhdGUgIT0gQWxsb2Nh
dGVkICYmIGJsb2NrU3RhdGUgIT0gRnJlZUxpc3RlZCk7Ci0gICAgQVNTRVJUKCEoIWNhbGxEZXN0
cnVjdG9ycyAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CisgICAgQVNTRVJUKCEoZGVzdHJ1
Y3Rpb25Nb2RlID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09IFN3ZWVw
T25seSkpOwogCiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVy
ZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNp
bmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCkBA
IC0xMDksMTEgKzEyNywxMyBAQCBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnNw
ZWNpCiAKICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFw
Q2VsbCo+KCZhdG9tcygpW2ldKTsKIAotICAgICAgICBpZiAoY2FsbERlc3RydWN0b3JzICYmIGJs
b2NrU3RhdGUgIT0gTmV3KQorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IE5lZWRzRGVz
dHJ1Y3Rpb24gJiYgYmxvY2tTdGF0ZSAhPSBOZXcpCiAgICAgICAgICAgICBjYWxsRGVzdHJ1Y3Rv
cihjZWxsKTsKIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgewog
ICAgICAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxGcmVlQ2Vs
bCo+KGNlbGwpOworICAgICAgICAgICAgaWYgKHJlc2V0TW9kZSA9PSBSZXNldEJhZGx5KQorICAg
ICAgICAgICAgICAgIHJlc2V0QmFkbHkoZnJlZUNlbGwsIGNlbGxTaXplKCkpOwogICAgICAgICAg
ICAgZnJlZUNlbGwtPm5leHQgPSBoZWFkOwogICAgICAgICAgICAgaGVhZCA9IGZyZWVDZWxsOwog
ICAgICAgICAgICAgKytjb3VudDsKQEAgLTEzOSwxNyArMTU5LDI1IEBAIE1hcmtlZEJsb2NrOjpG
cmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXAKICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAK
ICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCi0g
ICAgICAgIHJldHVybiBzd2VlcEhlbHBlcjx0cnVlPihzd2VlcE1vZGUpOwotICAgIHJldHVybiBz
d2VlcEhlbHBlcjxmYWxzZT4oc3dlZXBNb2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVy
U2VsZWN0UmVzZXRNb2RlPE5lZWRzRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7CisgICAgcmV0dXJu
IHN3ZWVwSGVscGVyU2VsZWN0UmVzZXRNb2RlPERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24+KHN3ZWVw
TW9kZSk7Cit9CisKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+CitN
YXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnN3ZWVwSGVscGVyU2VsZWN0UmVzZXRN
b2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCit7CisgICAgaWYgKHJlc2V0RnJlZUNlbGxzQmFkbHko
KSkKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U3RhdGVBbmRTd2VlcE1vZGU8ZGVz
dHJ1Y3Rpb25Nb2RlLCBSZXNldEJhZGx5Pihzd2VlcE1vZGUpOworICAgIHJldHVybiBzd2VlcEhl
bHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlPGRlc3RydWN0aW9uTW9kZSwgRG9udFJlc2V0Pihz
d2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxib29sIGNhbGxEZXN0cnVjdG9ycz4KLU1hcmtlZEJs
b2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXBIZWxwZXIoU3dlZXBNb2RlIHN3ZWVwTW9k
ZSkKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2Nr
OjpSZXNldE1vZGUgcmVzZXRNb2RlPgorTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJsb2Nr
Ojpzd2VlcEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUp
CiB7CiAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgY2FzZSBOZXc6CiAgICAgICAgIEFTU0VS
VChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAgcmV0dXJuIHNwZWNpYWxp
emVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGNhbGxEZXN0cnVjdG9ycz4oKTsKKyAgICAg
ICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGRlc3RydWN0
aW9uTW9kZSwgcmVzZXRNb2RlPigpOwogICAgIGNhc2UgRnJlZUxpc3RlZDoKICAgICAgICAgLy8g
SGFwcGVucyB3aGVuIGEgYmxvY2sgdHJhbnNpdGlvbnMgdG8gZnVsbHkgYWxsb2NhdGVkLgogICAg
ICAgICBBU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7CkBAIC0xNjAsOCArMTg4
LDggQEAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJsb2NrOjpzd2VlcAogICAgICAgICBy
ZXR1cm4gRnJlZUxpc3QoKTsKICAgICBjYXNlIE1hcmtlZDoKICAgICAgICAgcmV0dXJuIHN3ZWVw
TW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QKLSAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2VlcDxN
YXJrZWQsIFN3ZWVwVG9GcmVlTGlzdCwgY2FsbERlc3RydWN0b3JzPigpCi0gICAgICAgICAgICA6
IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcE9ubHksIGNhbGxEZXN0cnVjdG9ycz4oKTsK
KyAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwVG9GcmVlTGlzdCwg
ZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+KCkKKyAgICAgICAgICAgIDogc3BlY2lhbGl6ZWRT
d2VlcDxNYXJrZWQsIFN3ZWVwT25seSwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+KCk7CiAg
ICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDEyICsxMDksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtdXRhYmxlIFJl
dHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgTWFya2VkQmxv
Y2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXpl
X3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAgICAgc3RhdGlj
IE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvciosIHNpemVfdCBj
YXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7CiAKICAgICAg
ICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CisgICAgICAgIHZvaWQq
IGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogYmxvY2tGb3Io
Y29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZpcnN0QXRvbSgpOworICAgICAg
ICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAgICAgIAogICAgICAgICB2b2lk
IGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKQEAgLTE4NCwxNSArMTg2LDE2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNrID0g
YXRvbVNpemUgLSAxOwogCiAgICAgICAgIGVudW0gQmxvY2tTdGF0ZSB7IE5ldywgRnJlZUxpc3Rl
ZCwgQWxsb2NhdGVkLCBNYXJrZWQsIFJldGlyZWQgfTsKLSAgICAgICAgdGVtcGxhdGU8Ym9vbCBj
YWxsRGVzdHJ1Y3RvcnM+IEZyZWVMaXN0IHN3ZWVwSGVscGVyKFN3ZWVwTW9kZSA9IFN3ZWVwT25s
eSk7CisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZT4gRnJlZUxpc3Qgc3dlZXBIZWxw
ZXJTZWxlY3RSZXNldE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKKyAgICAgICAgZW51bSBS
ZXNldE1vZGUgeyBEb250UmVzZXQsIFJlc2V0QmFkbHkgfTsKKyAgICAgICAgdGVtcGxhdGU8RGVz
dHJ1Y3Rpb25Nb2RlLCBSZXNldE1vZGU+IEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0U3RhdGVB
bmRTd2VlcE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKIAogICAgICAgICB0eXBlZGVmIGNo
YXIgQXRvbVthdG9tU2l6ZV07CiAKICAgICAgICAgTWFya2VkQmxvY2soTWFya2VkQWxsb2NhdG9y
Kiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJp
YnV0ZXMmKTsKICAgICAgICAgQXRvbSogYXRvbXMoKTsKLSAgICAgICAgc2l6ZV90IGF0b21OdW1i
ZXIoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIGNhbGxEZXN0cnVjdG9yKEhlYXBDZWxsKik7
Ci0gICAgICAgIHRlbXBsYXRlPEJsb2NrU3RhdGUsIFN3ZWVwTW9kZSwgYm9vbCBjYWxsRGVzdHJ1
Y3RvcnM+IEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAoKTsKKyAgICAgICAgdGVtcGxhdGU8Qmxv
Y2tTdGF0ZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFJlc2V0TW9kZT4gRnJlZUxpc3Qg
c3BlY2lhbGl6ZWRTd2VlcCgpOwogICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2sqIG1fcHJl
djsKICAgICAgICAgTWFya2VkQmxvY2sqIG1fbmV4dDsKQEAgLTIzNiw2ICsyMzksMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkg
JiBhdG9tQWxpZ25tZW50TWFzayk7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQqIE1hcmtlZEJs
b2NrOjpjZWxsQWxpZ24odm9pZCogcCkKKyAgICB7CisgICAgICAgIEJpdHMgYmFzZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Qml0cz4oYXRvbXMoKSArIGZpcnN0QXRvbSgpKTsKKyAgICAgICAgQml0cyBi
aXRzID0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPihwKTsKKyAgICAgICAgYml0cyAtPSBiYXNlOwor
ICAgICAgICBiaXRzIC09IGJpdHMgJSBjZWxsU2l6ZSgpOworICAgICAgICBiaXRzICs9IGJhc2U7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihiaXRzKTsKKyAgICB9CisK
ICAgICBpbmxpbmUgTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2b2lk
KiBwKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxvY2sq
PihyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYmxvY2tNYXNrKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NjIsMTIgKzYyLDE1IEBAIHB1YmxpYzoKICAgICB+TWFya2VkU3BhY2UoKTsKICAgICB2b2lkIGxh
c3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKKyAgICBzdGF0aWMgc2l6ZV90IG9wdGltYWxTaXplRm9y
KHNpemVfdCk7CisgICAgCiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3Ioc2l6ZV90
KTsKICAgICBNYXJrZWRBbGxvY2F0b3ImIGRlc3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6ZV90KTsK
ICAgICBNYXJrZWRBbGxvY2F0b3ImIGF1eGlsaWFyeUFsbG9jYXRvckZvcihzaXplX3QpOwogICAg
IHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0
ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlhcnko
c2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOwogCiAgICAg
U3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhEZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9k
ZXN0cnVjdG9yU3BhY2U7IH0KICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aG91
dERlc3RydWN0b3IoKSB7IHJldHVybiBtX25vcm1hbFNwYWNlOyB9CkBAIC0xODIsNiArMTg1LDEx
IEBAIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGkKICAgICByZXR1cm4g
YXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZShieXRlcyk7CiB9CiAKK2lubGlu
ZSB2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90IGJ5dGVzKQor
eworICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLnRyeUFsbG9jYXRlKGJ5
dGVzKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtl
ZFNwYWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBmb3JF
YWNoU3Vic3BhY2UoCkBAIC0yNTEsNiArMjU5LDE1IEBAIGlubGluZSB2b2lkIE1hcmtlZFNwYWNl
Ojpmb3JFYWNoU3Vic3BhY2UKICAgICBmdW5jKG1fYXV4aWxpYXJ5U3BhY2UsIGF0dHJpYnV0ZXMp
OwogfQogCitBTFdBWVNfSU5MSU5FIHNpemVfdCBNYXJrZWRTcGFjZTo6b3B0aW1hbFNpemVGb3Io
c2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKQorICAgICAg
ICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHByZWNpc2VTdGVwLCBieXRlcyk7Cisg
ICAgaWYgKGJ5dGVzIDw9IGltcHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihpbXByZWNpc2VTdGVwLCBieXRlcyk7CisgICAgcmV0dXJuIE1hcmtl
ZEFsbG9jYXRvcjo6b3B0aW1hbFNpemVGb3JMYXJnZUFsbG9jYXRpb24oYnl0ZXMpOworfQorCiBp
bmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9yKFN1YnNwYWNl
JiBzcGFjZSwgc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChieXRlcyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTYsNiArOTYsOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFy
dE1hcmtpbmcoKQogewogICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBG
dWxsQ29sbGVjdGlvbikKICAgICAgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsg
Ly8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KKyAgICBlbHNlCisgICAgICAgIHJlc2V0KCk7
CiAKICAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSB2bSgpLmhlYXBQcm9maWxl
cigpKQogICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBoZWFwUHJvZmlsZXItPmFjdGl2
ZVNuYXBzaG90QnVpbGRlcigpOwpAQCAtMTE4LDEwICsxMjAsNDIgQEAgdm9pZCBTbG90VmlzaXRv
cjo6Y2xlYXJNYXJrU3RhY2soKQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2VydmF0
aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewotICAgIEpTQ2VsbCoqIHJvb3RzID0gY29u
c2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29uc2VydmF0
aXZlUm9vdHMucm9vdHMoKTsKICAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgYXBw
ZW5kKHJvb3RzW2ldKTsKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9vdHNbaV0p
OworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2Vs
bCogaGVhcENlbGwpCit7CisgICAgaWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIEFTU0VSVCghbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24pOworICAg
IAorICAgIGlmIChIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGhlYXBDZWxsKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpibG9ja0Zv
cihoZWFwQ2VsbCk7CisgICAgc3dpdGNoIChibG9jay0+Y2VsbEtpbmQoKSkgeworICAgIGNhc2Ug
SGVhcENlbGw6OkpTQ2VsbDogeworICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0
PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAgICAgCisgICAgICAgIGlmICghanNDZWxsLT5zdHJ1
Y3R1cmUoKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0
YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisKKyAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soYmxv
Y2ssIGpzQ2VsbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
SGVhcENlbGw6OkF1eGlsaWFyeTogeworICAgICAgICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoYmxv
Y2ssIGhlYXBDZWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gfQogfQogCiB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmQoSlNWYWx1ZSB2YWx1ZSkKQEAgLTE2OCwxNyArMjAyLDQ1IEBAIHZvaWQg
U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWEKIAogdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQogeworICAgIGFwcGVuZFRvTWFya1N0YWNr
KE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKSwgY2VsbCk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZFRvTWFya1N0YWNrKE1hcmtlZEJsb2NrKiBibG9jaywgSlNDZWxsKiBjZWxsKQor
ewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5p
c1phcHBlZCgpKTsKLQorICAgIAorICAgIC8vIEZJWE1FOiBUaGVzZSAianVzdCB3b3JrIiBiZWNh
dXNlIHRoZSBHQyByZXNldHMgdGhlc2UgZmllbGRzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNl
LiBCdXQKKyAgICAvLyB0aGF0IHdvbid0IGJlIHRoZSBjYXNlIHdoZW4gd2UgZG8gY29uY3VycmVu
dCBHQy4KICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5dGVzVmlzaXRlZCArPSBNYXJrZWRC
bG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7CisgICAgbV9ieXRlc1Zpc2l0ZWQgKz0g
YmxvY2stPmNlbGxTaXplKCk7CisgICAgCiAgICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7CiAKICAg
ICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAgICAgICAgbV9oZWFwU25h
cHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2b2lkIFNsb3RWaXNpdG9yOjpt
YXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgaWYgKEhlYXA6OnRlc3RBbmRT
ZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBub3RlTGl2ZUF1eGls
aWFyeUNlbGwoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGJhc2UpLCBiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihiYXNlKSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6Om5vdGVMaXZlQXV4aWxpYXJ5Q2Vs
bChNYXJrZWRCbG9jayogYmxvY2ssIEhlYXBDZWxsKikKK3sKKyAgICAvLyBXZSBnZXQgaGVyZSBv
bmNlIHBlciBHQyB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzOgorICAgIC8vCisgICAgLy8gRWRl
biBjb2xsZWN0aW9uOiBpZiB0aGUgY2VsbCB3YXMgYWxsb2NhdGVkIHNpbmNlIHRoZSBsYXN0IGNv
bGxlY3Rpb24gYW5kIGlzIGxpdmUgc29tZWhvdy4KKyAgICAvLworICAgIC8vIEZ1bGwgY29sbGVj
dGlvbjogaWYgdGhlIGNlbGwgaXMgbGl2ZSBzb21laG93LgorICAgIAorICAgIG1fdmlzaXRDb3Vu
dCsrOworICAgIG1fYnl0ZXNWaXNpdGVkICs9IGJsb2NrLT5jZWxsU2l6ZSgpOworfQorCiBjbGFz
cyBTZXRDdXJyZW50Q2VsbFNjb3BlIHsKIHB1YmxpYzoKICAgICBTZXRDdXJyZW50Q2VsbFNjb3Bl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBKU0NlbGwqIGNlbGwpCkBAIC0yMDIsOSArMjY0
LDkgQEAgcHJpdmF0ZToKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGls
ZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNl
bGwpKTsKLQorICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgq
dGhpcywgY2VsbCk7Ci0KKyAgICAKICAgICBtX2N1cnJlbnRPYmplY3RDZWxsU3RhdGVCZWZvcmVW
aXNpdGluZyA9IGNlbGwtPmNlbGxTdGF0ZSgpOwogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxs
U3RhdGU6Ok9sZEJsYWNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzcsOCArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsK
IGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKIGNsYXNzIEhlYXA7CitjbGFzcyBIZWFwQ2VsbDsK
IGNsYXNzIEhlYXBTbmFwc2hvdEJ1aWxkZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBK
SVRXcml0ZUJhcnJpZXI7CitjbGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwogY2xhc3MgV2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlcjsKQEAgLTEwNSw2ICsxMDcsMTAgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKTsKKyAgICAKKyAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFib3V0IGF1
eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYgeW91IGRv
bid0IGRvCisgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBv
ZiBHQy4KKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7CiAKICAgICB2
b2lkIGNvcHlMYXRlcihKU0NlbGwqLCBDb3B5VG9rZW4sIHZvaWQqLCBzaXplX3QpOwogICAgIApA
QCAtMTI0LDEwICsxMzAsMTMgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxN
b2RlRW5hYmxlcjsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChKU1Zh
bHVlKTsgLy8gVGhpcyBpcyBwcml2YXRlIHRvIGVuY291cmFnZSBjbGllbnRzIHRvIHVzZSBXcml0
ZUJhcnJpZXI8VD4uCisgICAgdm9pZCBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2VsbCop
OwogICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpTVmFsdWUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKICAgICB2b2lk
IGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2so
TWFya2VkQmxvY2sqLCBKU0NlbGwqKTsKKyAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChN
YXJrZWRCbG9jayosIEhlYXBDZWxsKik7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3Nh
cnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDkgQEAKICNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgi
CiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3MiwxNyArNDcyLDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlYwogICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUs
IGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLQotICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPiBiYXNlLT5zdHJ1Y3R1cmUodm0pLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFsbG9jYXRv
cigpLmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRl
U3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwotICAgIGJhc2UtPnB1dERpcmVjdCh2
bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKLX0KLQogQUxXQVlTX0lOTElORSBz
dGF0aWMgYm9vbCBpc1N0cmluZ09yU3ltYm9sKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0dXJu
IHZhbHVlLmlzU3RyaW5nKCkgfHwgdmFsdWUuaXNTeW1ib2woKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIwLDcgKzMyMCw2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1
aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlx
dWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0
cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZv
KikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVy
LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9N
b2R1bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIk1vZHVsZUFuYWx5emVyLmgiCiAKLSNpbmNsdWRlICJJZGVu
dGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlUmVjb3JkLmgiCiAjaW5jbHVkZSAi
U3Ryb25nSW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTcwLDEzICs3MCwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKIC8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFy
cmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KICNkZWZpbmUgTUFYX0FSUkFZ
X0lOREVYIDB4RkZGRkZGRkVVCiAKLS8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhl
IG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQorLy8gVGhl
IHZhbHVlIEJBU0VfWFhYX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3Rv
ciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQogLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0
ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQotI2Rl
ZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAgICAKKyNkZWZpbmUgQkFTRV9DT05USUdVT1VTX1ZF
Q1RPUl9MRU4gM1UKKyNkZWZpbmUgQkFTRV9BUlJBWV9TVE9SQUdFX1ZFQ1RPUl9MRU4gNFUKKwog
Ly8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBh
cnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50CiAvLyBpcyBhZGRlZC4KLSNkZWZpbmUgRklSU1Rf
VkVDVE9SX0dST1cgNFUKKyNkZWZpbmUgRklSU1RfQVJSQVlfU1RPUkFHRV9WRUNUT1JfR1JPVyA0
VQogCiAjZGVmaW5lIE1JTl9CRVlPTkRfTEVOR1RIX1NQQVJTRV9JTkRFWCAxMDAwCiAKQEAgLTk2
LDcgKzk3LDcgQEAgaW5saW5lIGJvb2wgaW5kZXhJc1N1ZmZpY2llbnRseUJleW9uZExlbgogICAg
IHJldHVybiBpID49IE1JTl9CRVlPTkRfTEVOR1RIX1NQQVJTRV9JTkRFWCAmJiBpID4gbGVuZ3Ro
OwogfQogCi1pbmxpbmUgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK2lubGluZSBJbmRleGluZ0hlYWRl
ciBpbmRleGluZ0hlYWRlckZvckFycmF5U3RvcmFnZSh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ0hlYWRlciByZXN1bHQ7CiAgICAgcmVzdWx0
LnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwpAQCAtMTA0LDkgKzEwNSw5IEBAIGlubGluZSBJbmRl
eGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1p
bmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQg
bGVuZ3RoKQoraW5saW5lIEluZGV4aW5nSGVhZGVyIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5
U3RvcmFnZSh1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9y
QXJyYXkobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHJldHVybiBpbmRleGluZ0hlYWRl
ckZvckFycmF5U3RvcmFnZShsZW5ndGgsIEJBU0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5
LDkgQEAKICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5
LmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJNYXJrZWRTcGFjZS5o
IgogI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIApAQCAtNTgsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxk
cyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgogICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1Ymxp
Y0xlbmd0aCgpOyB9CiAgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4
aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOyB9Ci0gICAgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7IH0K
KyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRl
cigpLT52ZWN0b3JMZW5ndGgoKTsgfQogICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsgfQog
ICAgIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5SGVhZGVyRnJvbUR1cmluZ0dDKGNvbnN0
IEFycmF5U3RvcmFnZSYgb3RoZXIpCkBAIC05OSw2ICsxMDEsNjYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyB2ZWN0b3JMZW5n
dGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAgICB9CisgICAgCisgICAgc3Rh
dGljIHNpemVfdCB0b3RhbFNpemVGb3IodW5zaWduZWQgaW5kZXhCaWFzLCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwg
c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHRvdGFsU2l6
ZShzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
b3RhbFNpemVGb3IobV9pbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIHZlY3Rvckxlbmd0aCgp
KTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHRvdGFsU2l6ZShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b3RhbFNpemUoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGF2YWls
YWJsZVZlY3Rvckxlbmd0aCh1bnNpZ25lZCBpbmRleEJpYXMsIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICBzaXplX3QgY2VsbFNp
emUgPSBNYXJrZWRTcGFjZTo6b3B0aW1hbFNpemVGb3IodG90YWxTaXplRm9yKGluZGV4Qmlhcywg
cHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIAorICAgICAgICB2ZWN0
b3JMZW5ndGggPSAoY2VsbFNpemUgLSB0b3RhbFNpemVGb3IoaW5kZXhCaWFzLCBwcm9wZXJ0eUNh
cGFjaXR5LCAwKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKworICAgICAgICBy
ZXR1cm4gdmVjdG9yTGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgYXZh
aWxhYmxlVmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGluZGV4QmlhcywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdmFpbGFi
bGVWZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCks
IHZlY3Rvckxlbmd0aCk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGF2YWlsYWJsZVZlY3Rv
ckxlbmd0aChzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVZlY3Rvckxlbmd0aChtX2luZGV4Qmlhcywg
cHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVuZ3RoKTsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgYXZhaWxhYmxlVmVjdG9yTGVuZ3RoKFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gYXZhaWxhYmxlVmVjdG9yTGVuZ3Ro
KHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdmVjdG9yTGVuZ3RoKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdW5zaWduZWQgb3B0aW1hbFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBpbmRleEJp
YXMsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAg
eworICAgICAgICB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX0FSUkFZX1NUT1JBR0VfVkVD
VE9SX0xFTiwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVZlY3Rvckxl
bmd0aChpbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIHZlY3Rvckxlbmd0aCk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBvcHRpbWFsVmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGlu
ZGV4QmlhcywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBvcHRpbWFsVmVjdG9yTGVuZ3RoKGluZGV4Qmlhcywgc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB2ZWN0b3JMZW5ndGgpOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBvcHRpbWFsVmVjdG9yTGVuZ3RoKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb3B0aW1hbFZlY3Rv
ckxlbmd0aChtX2luZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVuZ3RoKTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgb3B0aW1hbFZlY3Rvckxlbmd0aChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9w
dGltYWxWZWN0b3JMZW5ndGgoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB2ZWN0b3JM
ZW5ndGgpOworICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworY2xhc3MgVk07CisKKy8vIEFu
IEF1eGlsaWFyeSBiYXJyaWVyIGlzIGEgYmFycmllciB0aGF0IGRvZXMgbm90IHRyeSB0byByZWFz
b24gYWJvdXQgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBpbnRvCisvLyBpdCwgb3RoZXIgdGhhbiBp
bnRlcnByZXRpbmcgYSBmYWxzaXNoIHZhbHVlIGFzIG5vdCBuZWVkIGEgYmFycmllci4gSXQncyBP
SyB0byB1c2UgdGhpcyBmb3IgZWl0aGVyCisvLyBKU0NlbGxzIG9yIGFueSBvdGhlciBraW5kIG9m
IGRhdGEsIHNvIGxvbmcgYXMgaXQgcmVzcG9uZHMgdG8gb3BlcmF0b3IhKCkuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CitwdWJsaWM6CisgICAgQXV4aWxp
YXJ5QmFycmllcigpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQXV4
aWxpYXJ5QmFycmllcihWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgdm9pZCBjbGVhcigp
IHsgbV92YWx1ZSA9IFQoKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAg
dm9pZCBzZXQoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIGNvbnN0IFQmIGdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBzbG90KCkgeyByZXR1cm4gJm1f
dmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lk
IHNldFdpdGhvdXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUIG1fdmFsdWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxp
YXJ5QmFycmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVT4KK0F1eGlsaWFyeUJhcnJp
ZXI8VD46OkF1eGlsaWFyeUJhcnJpZXIoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVJiYgdmFsdWUp
Cit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAgdm0uaGVhcC53
cml0ZUJhcnJpZXIob3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8
dHlwZW5hbWUgVT4KK3ZvaWQgQXV4aWxpYXJ5QmFycmllcjxUPjo6c2V0KFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgVSYmIHZhbHVlKQoreworICAgIG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5o
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNiArOTAsMTIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAg
fQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIHVuc2lnbmVkIGF2YWlsYWJsZUNvbnRp
Z3VvdXNWZWN0b3JMZW5ndGgoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0b3JM
ZW5ndGgoU3RydWN0dXJlKiwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICAKKyAgICBBTFdB
WVNfSU5MSU5FIHN0YXRpYyB1bnNpZ25lZCBvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICBzdGF0
aWMgdW5zaWduZWQgb3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoU3RydWN0dXJlKiwgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIG5v
dCBqdXN0IGJlY2F1c2UgaXQncyBoYW5keSwgYnV0IHRvIHJlbWluZCB5b3UgdGhhdAogICAgIC8v
IHRoZSB3aG9sZSBwb2ludCBvZiBidXR0ZXJmbGllcyBpcyB0byBkbyBldmlsIHBvaW50ZXIgYXJp
dGhtZXRpYy4KICAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tUG9pbnRlcihjaGFyKiBwdHIpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5l
cy5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEyICszNSwzNSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6OmF2YWlsYWJs
ZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCkKK3sKKyAgICBzaXplX3QgY2VsbFNpemUgPSB0b3RhbFNpemUoMCwgcHJv
cGVydHlDYXBhY2l0eSwgdHJ1ZSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0
aCk7CisgICAgY2VsbFNpemUgPSBNYXJrZWRTcGFjZTo6b3B0aW1hbFNpemVGb3IoY2VsbFNpemUp
OworICAgIHZlY3Rvckxlbmd0aCA9IChjZWxsU2l6ZSAtIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNh
cGFjaXR5LCB0cnVlLCAwKSkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgIHJldHVybiB2
ZWN0b3JMZW5ndGg7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgQnV0dGVyZmx5OjphdmFp
bGFibGVDb250aWd1b3VzVmVjdG9yTGVuZ3RoKFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgcmV0dXJuIGF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0b3JM
ZW5ndGgoc3RydWN0dXJlID8gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpIDogMCwgdmVj
dG9yTGVuZ3RoKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGlt
YWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9DT05U
SUdVT1VTX1ZFQ1RPUl9MRU4sIHZlY3Rvckxlbmd0aCk7CisgICAgcmV0dXJuIGF2YWlsYWJsZUNv
bnRpZ3VvdXNWZWN0b3JMZW5ndGgocHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVuZ3RoKTsKK30K
KworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVj
dG9yTGVuZ3RoKFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7
CisgICAgcmV0dXJuIG9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSA/IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA6IDAsIHZlY3Rvckxlbmd0aCk7Cit9CisKIGlu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpT
Q2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQogewotICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNp
emUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgc2l6ZSwgJnRlbXApKTsKLSAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uaGVhcC5hbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93
bmVyLCBzaXplKTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0x
MTksNyArMTQyLDggQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQog
ICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVf
dCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVh
ZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUg
PSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwotICAgIGlmICghdm0uaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZShpbnRl
bmRlZE93bmVyLCAmdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgdGhlQmFzZSA9IHZt
LmhlYXAudHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCB0aGVCYXNlLCBvbGRT
aXplLCBuZXdTaXplKTsKKyAgICBpZiAoIXRoZUJhc2UpCiAgICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBmcm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNw
cAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xv
bmVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDE5IEBAIENsb25l
ZEFyZ3VtZW50czo6Q2xvbmVkQXJndW1lbnRzKFZNJiB2bSwKIENsb25lZEFyZ3VtZW50cyogQ2xv
bmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKICAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGxlbmd0aCk7CisgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbGVuZ3RoOwogICAgIGlmICh2ZWN0b3JMZW5ndGggPiBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZvaWQq
IHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6
OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgdm9pZCogdGVt
cCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5n
dGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYgKCF0ZW1wKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2Uo
dGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBidXR0ZXJmbHkt
PnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKGxlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwg
dmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNs
ZWFyKCk7CiAKICAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9CiAgICAgICAgIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPENsb25lZEFyZ3VtZW50cz4odm0uaGVhcCkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNyw4IEBACiAj
aW5jbHVkZSAiR2VuZXJhdG9yUHJvdG90eXBlLmgiCiAKICNpbmNsdWRlICJKU0NCdWlsdGlucy5o
IgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIkdlbmVyYXRvclBy
b3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKHRoZXRhbGVj
cmFmdGVyQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAxNSBTdWtvbHNhayBTYWtzaHV3
b25nIChzdWtvbHNha0BnbWFpbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMyw4ICszNCw3IEBACiAjaW5jbHVkZSAiSW50bENvbGxhdG9yQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0jaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5l
cy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw4ICszNCw3IEBACiAjaW5jbHVkZSAiSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0j
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1l
Rm9ybWF0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAz
OTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsOCBAQAogI2luY2x1
ZGUgIkludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkludGxPYmplY3Qu
aCIKICNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCw4IEBACiAjaW5jbHVkZSAiSW50bERhdGVUaW1l
Rm9ybWF0LmgiCiAjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5j
dGlvbi5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxs
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXQuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDggQEAK
ICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwxMiBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIDAKKyNkZWZpbmUgTE9HSVQoKSBk
YXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6ICIsIFdURl9QUkVUVFlfRlVOQ1RJT04sICJcbiIp
OworI2Vsc2UKKyNkZWZpbmUgTE9HSVQoKSBkbyB7IH0gd2hpbGUoZmFsc2UpCisjZW5kaWYKKwog
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTQXJyYXkpOwogCiBjb25z
dCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU05vbkZpbmFsT2JqZWN0
OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheSl9OwpAQCAtNjEsNiArNjcs
OCBAQCBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uCiAKIHZvaWQgSlNB
cnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRhYmxlKQog
eworICAgIExPR0lUKCk7CisgICAgCiAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCAh
d3JpdGFibGUpOwogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAg
ICAgICByZXR1cm47CkBAIC0yMzgsMTEgKzI0NiwxMyBAQCB2b2lkIEpTQXJyYXk6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2ZWN0
b3IsIGJ1dCBsZWF2ZXMgdGhlIG5ldyBzcGFjZSBmb3IgY291bnQgc2xvdHMgdW5jbGVhcmVkLgog
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdm0sIGJvb2wgYWRkVG9Gcm9u
dCwgdW5zaWduZWQgY291bnQpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pOwogICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBh
Y2l0eSA9IHN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgdW5zaWduZWQg
cHJvcGVydHlTaXplID0gc3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lU2l6ZSgpOwotCisgICAgCiAg
ICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0
aC4KICAgICBBU1NFUlQoIWFkZFRvRnJvbnQgfHwgY291bnQgPiBzdG9yYWdlLT5tX2luZGV4Qmlh
cyk7CiAKQEAgLTI1NCw3ICsyNjQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dD
YXNlKFZNJiB2CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxhcmdlIHNob3VsZCB3
ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJlcXVpcmVkVmVjdG9y
TGVuZ3RoLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7Ci0gICAg
dW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwg
bGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG9sZFZlY3Rvckxl
bmd0aCwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5n
dGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291
bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTI2
NSw3ICsyNzYsMTAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgog
ICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKICAgICB1bnNpZ25lZCBjdXJyZW50Q2Fw
YWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwog
ICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3cs
IGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICB1bnNp
Z25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4
KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOworICAgIC8vIEZJ
WE1FOiBUaGlzIGNvZGUgc2hvdWxkIGJlIGZpeGVkIHRvIGF2b2lkIGludGVybmFsIGZyYWdtZW50
YXRpb24uIEl0J3Mgbm90IHN1cGVyIGhpZ2gKKyAgICAvLyBwcmlvcml0eSBzaW5jZSBpbmNyZWFz
ZVZlY3Rvckxlbmd0aCgpIHdpbGwgImZpeCIgYW55IG1pc3Rha2VzIHdlIG1ha2UsIGJ1dCBpdCB3
b3VsZCBiZSBjb29sCisgICAgLy8gdG8gZ2V0IHRoaXMgcmlnaHQgZXZlbnR1YWxseS4KKyAgICB1
bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwg
bWF4KEJBU0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOLCByZXF1aXJlZFZlY3Rvckxlbmd0aCkg
PDwgMSk7CiAKICAgICAvLyBTdGVwIDI6CiAgICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRvIGNo
b29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJl
dXNlIHRoZSBleGlzdGluZyBvbmUuCkBAIC0yNzMsMTUgKzI4NywxOSBAQCBib29sIEpTQXJyYXk6
OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwogICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7CiAgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNh
cGFjaXR5OworICAgIGJvb2wgYWxsb2NhdGVkTmV3U3RvcmFnZTsKICAgICAvLyBJZiB0aGUgY3Vy
cmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28gbGFy
Z2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KICAgICBpZiAoY3VycmVudENhcGFjaXR5ID4g
ZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFjaXR5
LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKICAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVy
Zmx5LT5iYXNlKHN0cnVjdHVyZSh2bSkpOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBj
dXJyZW50Q2FwYWNpdHk7CisgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAg
ICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVk
Q2FwYWNpdHkpKTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlz
LCBuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uaGVh
cC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBuZXdTaXplKTsKKyAgICAgICAgaWYgKCFuZXdB
bGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VD
YXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKKyAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFnZSA9
IHRydWU7CiAgICAgfQogCiAgICAgLy8gU3RlcCAzOgpAQCAtMzExLDEzICszMjksMTkgQEAgYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgICAgICBBU1NFUlQoY291
bnQgKyB1c2VkVmVjdG9yTGVuZ3RoIDw9IG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIG1lbW1v
dmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFn
ZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOwogICAgICAg
ICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUs
IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1Zh
bHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IoMCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGFsbG9jYXRlZE5ld1N0b3Jh
Z2UpIHsKKyAgICAgICAgICAgIC8vIFdlIHdpbGwgc2V0IHRoZSB2ZWN0b3JMZW5ndGggdG8gbmV3
VmVjdG9yTGVuZ3RoLiBXZSBwb3B1bGF0ZWQgcmVxdWlyZWRWZWN0b3JMZW5ndGgKKyAgICAgICAg
ICAgIC8vICh1c2VkVmVjdG9yTGVuZ3RoICsgY291bnQpLCB3aGljaCBpcyBsZXNzLiBDbGVhciB0
aGUgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJlcXVpcmVkVmVj
dG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAoKG5ld0FsbG9jQmFzZSAhPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0
dXJlKHZtKSkpIHx8IChuZXdJbmRleEJpYXMgIT0gc3RvcmFnZS0+bV9pbmRleEJpYXMpKSB7CiAg
ICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5
U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9m
KEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3IsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoSlNWYWx1ZSkg
KiB1c2VkVmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG5l
d1ZlY3RvciA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBu
ZXdWZWN0b3JMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigpOwor
ICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xl
YXIoKTsKICAgICB9CiAKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0
b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKQEAgLTMyOSw4ICszNTMsMTAgQEAgYm9vbCBKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogCiBib29sIEpTQXJyYXk6OnNldExlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJv
b2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKKyAgICBMT0dJVCgp
OworICAgIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwotCisgICAg
CiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBzcGFyc2Ug
bW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lmJy4KICAgICBBU1NFUlQoaXNM
ZW5ndGhXcml0YWJsZSgpIHx8IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKIApAQCAtMzkzLDYgKzQx
OSw4IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKIAogYm9vbCBK
U0FycmF5OjphcHBlbmRNZW1jcHkoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIHVuc2lnbmVkIHN0
YXJ0SW5kZXgsIEpTQzo6SlNBcnJheSogb3RoZXJBcnJheSkKIHsKKyAgICBMT0dJVCgpOworICAg
IAogICAgIGlmICghY2FuRmFzdENvcHkodm0sIG90aGVyQXJyYXkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTQzMyw2ICs0NjEsOCBAQCBib29sIEpTQXJyYXk6OmFwcGVuZE1lbWNweShF
eGVjU3RhdGUqIGV4CiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQogeworICAgIExPR0lUKCk7
CisgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtNDk3
LDYgKzUyNyw4IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKIAog
SlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogeworICAgIExPR0lUKCk7Cisg
ICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAK
ICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CkBAIC01OTQsNiArNjI2LDggQEAgSlNWYWx1
ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogLy8gIC0gcHVzaGluZyB0byBhbiBhcnJh
eSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5n
ZSBlcnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKQEAg
LTczMCw2ICs3NjQsOCBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1Zh
CiAKIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGV4ZWMsIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAg
YXV0byBhcnJheVR5cGUgPSBpbmRleGluZ1R5cGUoKTsKICAgICBzd2l0Y2ggKGFycmF5VHlwZSkg
ewogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOgpAQCAtNzYwLDYgKzc5Niw4IEBAIEpTQXJyYXkq
IEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGUKIAogYm9vbCBKU0FycmF5OjpzaGlmdENv
dW50V2l0aEFycmF5U3RvcmFnZShWTSYgdm0sIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVk
IGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAg
ICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICBSRUxFQVNFX0FT
U0VSVChjb3VudCA8PSBvbGRMZW5ndGgpOwogICAgIApAQCAtODY1LDYgKzkwMyw4IEBAIGJvb2wg
SlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKIAogYm9vbCBKU0FycmF5OjpzaGlm
dENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkJiBzdGFy
dEluZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgPiAwKTsKIApAQCAtOTYz
LDYgKzEwMDMsOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZh
bGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0SW5k
ZXggPD0gbGVuZ3RoKTsKQEAgLTExMDAsNiArMTE0Miw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFueUluZGV4aW4KIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogeworICAgIExPR0lUKCk7Cisg
ICAgCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwogICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOwpAQCAtMTE2Niw2ICsxMjEwLDggQEAgdm9pZCBK
U0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogCiB2b2lkIEpTQXJyYXk6OmNvcHlU
b0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBMT0dJVCgpOwor
ICAgIAogICAgIHVuc2lnbmVkIGkgPSBvZmZzZXQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiB2ZWN0b3I7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTc3LDcgKzE3Nyw4IEBAIHBy
aXZhdGU6CiBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHko
Vk0mIHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQm
IHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7Ci0gICAgdmVjdG9y
TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHZlY3Rvckxl
bmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoCisgICAgICAg
IGludGVuZGVkT3duZXIgPyBpbnRlbmRlZE93bmVyLT5zdHJ1Y3R1cmUodm0pIDogMCwgbGVuZ3Ro
KTsKICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgaGVhZGVy
LnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gQnV0dGVy
Zmx5OjpjcmVhdGUoCkBAIC0xODgsMTEgKzE4OSwxMSBAQCBpbmxpbmUgQnV0dGVyZmx5KiBjcmVh
dGVDb250aWd1b3VzQXJyYXlCCiBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZs
eShWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkK
IHsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAotICAgICAg
ICB2bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJy
YXkoaW5pdGlhbExlbmd0aCksCi0gICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZF
Q1RPUl9MRU4pKTsKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIDAsIDAsIHRydWUsIGJhc2VJ
bmRleGluZ0hlYWRlckZvckFycmF5U3RvcmFnZShpbml0aWFsTGVuZ3RoKSwKKyAgICAgICAgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOKSk7CiAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICBz
dG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIo
KTsKKyAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IDA7CiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KQEAgLTIxNSwxMiArMjE2
LDE3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCAKICAgICAgICAg
aWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7
ICsraSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKAogICAgICAgICAgICAg
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
CiAgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFy
cmF5U3RvcmFnZSk7CiAgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KHZt
LCAwLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJB
U0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVy
biBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CkBAIC0yMjgs
NDAgKzIzNCw0NyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAK
IGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7Ci0gICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVu
Z3RoKTsKLSAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkK
KyAgICBpZiAoaW5pdGlhbExlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU3RvcmFnZSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OwotICAg
IGlmIChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSkpIHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKTsKKyAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBl
KSkpIHsKICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKLQotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0
b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVt
cCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGhhc1VuZGVjaWRlZChpbmRl
eGluZ1R5cGUpCisgICAgICAgICAgICB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUpCisgICAgICAg
ICAgICB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzQ29udGln
dW91cyhpbmRleGluZ1R5cGUpKTsKKworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBC
dXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgaW5pdGlh
bExlbmd0aCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxp
YXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRy
dWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgaWYg
KCF0ZW1wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9
IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CiAgICAgICAg
IGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJ1dHRl
cmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOwotICAgICAgICBpZiAoaGFzRG91
YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIGlmIChoYXNEb3VibGUo
aW5kZXhpbmdUeXBlKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExl
bmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYg
KCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBv
dXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGggPSBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoMCwgc3RydWN0dXJl
LCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2Nh
dGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3Rv
cmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAg
ICAgaWYgKCF0ZW1wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7Ci0g
ICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFy
cmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgICpidXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5U3RvcmFnZShpbml0aWFsTGVu
Z3RoLCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7
CiAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVybiBjcmVh
dGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZpc2lvbiAyMDM5MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlz
aW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjcsMTMgKzI3LDkgQEAKICNpbmNsdWRlICJKU0NhbGxlZS5oIgog
CiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTAsMjUgKzUxMCwxNSBAQCBBcnJheUJ1ZmZlciogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhCiAgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0
cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKICAgICAvLyB0aGF0IHlv
dSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRl
bHkuCiAgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAgVk0mIHZt
ID0gKmhlYXAtPnZtKCk7CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKICAg
ICAKICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOwogCi0gICAg
c2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwotICAgIAotICAgIGlmICh0aGlz
T2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKLSAgICAgICAgJiYgIXRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgewotICAgICAg
ICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwotICAgICAgICAvLyBSZXVzZSBhbHJlYWR5
IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgotICAgICAgICB0aGlzT2JqZWN0
LT5tX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcigKLSAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPnZlY3RvcigpKS0+YnV0dGVyZmx5KCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRl
eGluZ0hlYWRlcigpKTsKLSAgICAgICAgVk0mIHZtID0gKmhlYXAtPnZtKCk7Ci0gICAgICAgIHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwgdGhpc09iamVjdCwgQnV0dGVyZmx5OjpjcmVh
dGVPckdyb3dBcnJheVJpZ2h0KAotICAgICAgICAgICAgdGhpc09iamVjdC0+YnV0dGVyZmx5KCks
IHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgIHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCkp
OwotICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdIZWFk
ZXIoKSk7CisgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzT2JqZWN0LCBC
dXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1
dHRlcmZseSgpLCB2bSwgdGhpc09iamVjdCwgdGhpc09iamVjdC0+c3RydWN0dXJlKCksCisgICAg
ICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwg
MCwgMCkpOwogCiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2
aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTIgKzI2LDkgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgot
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlz
aW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxNCArMjcsMTAgQEAKICNpbmNsdWRl
ICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgogCiAjaW5jbHVkZSAiRXJyb3IuaCIKLSNpbmNs
dWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQu
aCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2xvdFZp
c2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDE0ICsyOCwx
MCBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCi0jaW5j
bHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5j
bHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklu
bGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEyIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCisjaWYgMAorI2RlZmluZSBMT0dJVCgpIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjog
IiwgV1RGX1BSRVRUWV9GVU5DVElPTiwgIlxuIik7CisjZWxzZQorI2RlZmluZSBMT0dJVCgpIGRv
IHsgfSB3aGlsZShmYWxzZSkKKyNlbmRpZgorCiAvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXpl
IG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gV2UgdXNlIHRoaXMKIC8vIGFz
IGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQgYXJy
YXkgZnJvbSBzaXplIDAuCiAvLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3RhbnQg
RklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBpbgpAQCAtODgsNzcgKzk0LDYgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFTU0VSVChidXR0
ZXJmbHkpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJl
KCk7Ci0gICAgCi0gICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gdGhp
cy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFk
ZXIpKSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigp
LT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMoc3RydWN0dXJlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0eSA9IDA7
Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0gICAgc2l6
ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZseS0+YmFz
ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVj
dGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdI
ZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAvLyBDb3B5IHRo
ZSBwcm9wZXJ0aWVzLgotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5l
d0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBj
dXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgZm9y
IChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAgICAgICAoLS1j
dXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50U291cmNlKS0+
Z2V0KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVy
KSkgewotICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENv
cHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQ7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBj
YXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJM
RV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdC
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNv
dXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsK
LSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAgICAgICAgICAg
ICAgIGN1cnJlbnRTb3VyY2UgPSAwOwotICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5KGN1
cnJlbnRUYXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRC
YXJyaWVyKG5ld0J1dHRlcmZseSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0ZXJmbHkt
PmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwot
ICAgIH0gCi19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHko
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKQEAgLTE3NSwxMyArMTEwLDE2IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJlQ2Fw
YWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAgICAg
fQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBIZWFwQ2VsbCogYmFzZSA9IGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0
eSkpOworICAgIAorICAgIEFTU0VSVChIZWFwOjpoZWFwKGJhc2UpID09IHZpc2l0b3IuaGVhcCgp
KTsKIAorICAgIC8vIEtlZXAgdGhlIGJ1dHRlcmZseSBhbGl2ZS4KKyAgICB2aXNpdG9yLm1hcmtB
dXhpbGlhcnkoYmFzZSk7CisgICAgCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0g
c3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICB2aXNpdG9yLmNvcHlMYXRlcigKLSAgICAg
ICAgdGhpcywgQnV0dGVyZmx5Q29weVRva2VuLAotICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwogICAgIAogICAg
IC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgIHN3aXRjaCAodGhpcy0+aW5k
ZXhpbmdUeXBlKCkpIHsKQEAgLTIyNSwxOSArMTYzLDYgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbAogI2VuZGlmCiB9CiAKLXZvaWQgSlNPYmplY3Q6OmNvcHlCYWNr
aW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRv
a2VuKQotewotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2Vs
bCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
Ci0gICAgaWYgKHRva2VuICE9IEJ1dHRlcmZseUNvcHlUb2tlbikKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHku
Z2V0KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+Y29weUJ1dHRl
cmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVTaXplKCkpOwotfQotCiB2b2lkIEpTT2JqZWN0OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxs
LCBIZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVyKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC03NzgsMTcgKzcwMywyMCBAQCB2b2lk
IEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjCiAgICAgZ2xvYmFsT2JqZWN0KCkt
PmhhdmVBQmFkVGltZSh2bSk7CiB9CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRp
YWxJbmRleGVkU3RvcmFnZShWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVsZW1lbnRT
aXplKQorQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKFZN
JiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIExPR0lUKCk7CiAgICAgQVNTRVJUKGxlbmd0
aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGlu
Z1R5cGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGll
cyhvbGRUeXBlKSk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhp
bmcoKSk7CiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOwotICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgdW5zaWdu
ZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVj
dG9yTGVuZ3RoKHByb3BlcnR5Q2FwYWNpdHksIGxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1f
YnV0dGVyZmx5LmdldCgpLCB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKLSAgICAgICAgZWxlbWVudFNpemUgKiB2ZWN0b3JM
ZW5ndGgpOworICAgICAgICBtX2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwg
cHJvcGVydHlDYXBhY2l0eSwgZmFsc2UsIDAsCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxl
bmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
ICAgICByZXR1cm4gbmV3QnV0dGVyZmx5OwpAQCAtNzk3LDcgKzcyNSw3IEBAIEJ1dHRlcmZseSog
SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGUKIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0
ZUluaXRpYWxVbmRlY2lkZWQoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRl
SW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9y
YWdlKHZtLCBsZW5ndGgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6QWxsb2NhdGVVbmRlY2lkZWQpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZs
eSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJm
bHk7CkBAIC04MDYsNyArNzM0LDkgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlh
bFVuZGVjaQogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIo
Vk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9y
YWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTsp
CisgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3Bl
cnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0ludDMyKCk7CkBAIC04MTUsNyArNzQ1LDcgQEAgQ29udGlndW91c0pT
VmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxEb3VibGUoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3Jl
YXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihkb3VibGUpKTsKKyAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2
bSwgbGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XSA9IFBOYU47CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
OjpBbGxvY2F0ZURvdWJsZSk7CkBAIC04MjYsNyArNzU2LDkgQEAgQ29udGlndW91c0RvdWJsZXMg
SlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVh
dGVJbml0aWFsQ29udGlndW91cyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVh
dGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0
b3JhZ2Uodm0sIGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKICAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
ICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CkBAIC04MzQsNiArNzY2LDcg
QEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogCiBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKKyAgICBMT0dJVCgpOwogICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVy
ZSh2bSk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGluZ1R5cGUoKTsKQEAgLTg0
OSw2ICs3ODIsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAg
ICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJ
blZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAgZm9yIChzaXpl
X3QgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBz
dHJ1Y3R1cmUtPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTg1NiwxMiArNzkxLDE4IEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNyZWF0ZUFycmF5U3RvcmEKIAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbEFycmF5U3RvcmFnZShWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFn
ZSh2bSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdl
KAorICAgICAgICB2bSwgMCwgQXJyYXlTdG9yYWdlOjpvcHRpbWFsVmVjdG9yTGVuZ3RoKDAsIHN0
cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCksIDApKTsKIH0KIAogQ29udGlndW91c0pT
VmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAgICAg
QVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAgIHNl
dFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwogICAgIHJl
dHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiB9CkBAIC04ODEsNiAr
ODIyLDExIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWMKIENvbnRp
Z3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYg
dm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CisK
ICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91
cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOwogfQpAQCAt
OTE3LDcgKzg2Myw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQK
IAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JM
ZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRB
cnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAg
IC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50cy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUo
dm0pLCB0cmFuc2l0aW9uKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0
cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOwpAQCAtOTM4LDExICs4ODYsMTIgQEAgQ29u
dGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsK
ICAgICAgICAgZG91YmxlKiBjdXJyZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4o
Y3VycmVudCk7CiAgICAgICAgIEpTVmFsdWUgdiA9IGN1cnJlbnQtPmdldCgpOwotICAgICAgICBp
ZiAoIXYpIHsKKyAgICAgICAgLy8gTk9URTogU2luY2UgdGhpcyBtYXkgYmUgdXNlZCBkdXJpbmcg
aW5pdGlhbGl6YXRpb24sIHYgY291bGQgYmUgZ2FyYmFnZS4gSWYgaXQncyBnYXJiYWdlLAorICAg
ICAgICAvLyB0aGF0IG1lYW5zIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAgICAg
IGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICpjdXJyZW50QXNEb3VibGUgPSBQTmFO
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHYuaXNJ
bnQzMigpKTsKICAgICAgICAgKmN1cnJlbnRBc0RvdWJsZSA9IHYuYXNJbnQzMigpOwogICAgIH0K
ICAgICAKQEAgLTk2NiwxMyArOTE1LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQXIKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQo
KS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3Ry
dWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9y
TGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBp
KyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsK
ICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0g
ICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBpZiAodikKICAgICAgICAgICAgIG5l
d1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAg
ICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0xMDE0
LDEzICs5NjEsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQog
ICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5n
dGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRB
cnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBkb3Vi
bGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgaWYg
KHZhbHVlID09IHZhbHVlKSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZh
bHVlKSk7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAg
aWYgKHZhbHVlID09IHZhbHVlKQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEwNDEsMTMgKzk4NiwxMSBAQCBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgdW5zaWduZWQgdmVjdG9yTGVu
Z3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFn
ZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5
aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3U3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3
U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAg
aWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ld
LmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSks
IHRyYW5zaXRpb24pOwpAQCAtMjM4MSw3ICsyMzI0LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUodm0p
LT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CiAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBp
bmRleGluZyB0eXBlIHRvIHRoZSBTbG93UHV0QXJyYXlTdG9yYWdlIGFuZCByZXRyeS4KLSAgICAg
ICAgICAgIGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgw
LCAwLCBpICsgMSkpOworICAgICAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBpICsgMSwg
Z2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIDAsIGkgKyAxKSk7CiAgICAgICAgICAgICByZXR1cm4g
cHV0QnlJbmRleCh0aGlzLCBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMjUyMiw3ICsyNDY1LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1
dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIDAsIDApKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoc3RydWN0dXJlKHZtKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgewotICAgICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBpICsg
MSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIGkgKyAxLCBnZXROZXdWZWN0
b3JMZW5ndGgoMCwgMCwgMCwgaSArIDEpKTsKICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcisrOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjQxLDcgKzI1ODQs
OCBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpCiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgZnVuY3Rpb24sIGF0dHJpYnV0
ZXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JM
ZW5ndGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0
aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCkKKy8vIE5PVEU6IFRoaXMgbWV0aG9kIGlzIGZvciBB
cnJheVN0b3JhZ2UgdmVjdG9ycy4KK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6Omdl
dE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBpbmRleEJpYXMsIHVuc2lnbmVkIGN1cnJlbnRWZWN0
b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgp
CiB7CiAgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7CiAKQEAgLTI2NTgsMjUgKzI2MDIsMjcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09i
amVjdDo6Z2V0TmV3VgogCiAgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVu
Z3RoKTsKIAotICAgIGxhc3RBcnJheVNpemUgPSBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIEZJ
UlNUX1ZFQ1RPUl9HUk9XKTsKKyAgICBsYXN0QXJyYXlTaXplID0gc3RkOjptaW4oaW5jcmVhc2Vk
TGVuZ3RoLCBGSVJTVF9BUlJBWV9TVE9SQUdFX1ZFQ1RPUl9HUk9XKTsKIAotICAgIHJldHVybiBz
dGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworICAg
IHJldHVybiBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoCisgICAgICAgIGluZGV4
Qmlhcywgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIHN0ZDo6bWlu
KGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkpOwogfQogCiBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQg
ZGVzaXJlZExlbmd0aCkKIHsKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoOworICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CisgICAgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIAogICAgIGlmICho
YXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgaWYgKEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yTnVsbCgpKQorICAgICAgICAgICAgaW5k
ZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7CiAgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1f
YnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgbGVuZ3RoID0gbV9idXR0
ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZlY3Rv
ckxlbmd0aCA9IDA7Ci0gICAgICAgIGxlbmd0aCA9IDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGdl
dE5ld1ZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7Cisg
ICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChpbmRleEJpYXMsIHZlY3Rvckxlbmd0aCwgbGVu
Z3RoLCBkZXNpcmVkTGVuZ3RoKTsKIH0KIAogdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5n
U2hhcGU+CkBAIC0yNzI5LDE5ICsyNjc1LDI5IEBAIHVuc2lnbmVkIEpTT2JqZWN0Ojpjb3VudEVs
ZW1lbnRzKCkKIAogYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIHZtLCB1
bnNpZ25lZCBuZXdMZW5ndGgpCiB7CisgICAgTE9HSVQoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBhdmFpbGFibGVWZWN0b3JM
ZW5ndGggPSBzdG9yYWdlLT5hdmFpbGFibGVWZWN0b3JMZW5ndGgoc3RydWN0dXJlKHZtKSwgdmVj
dG9yTGVuZ3RoKTsgCisgICAgaWYgKGF2YWlsYWJsZVZlY3Rvckxlbmd0aCA+PSBuZXdMZW5ndGgp
IHsKKyAgICAgICAgLy8gVGhlIGNlbGwgd2FzIGFscmVhZHkgYmlnIGVub3VnaCBmb3IgdGhlIGRl
c2lyZWQgbGVuZ3RoIQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkg
PCBhdmFpbGFibGVWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLmNsZWFyKCk7CisgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChhdmFpbGFi
bGVWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25z
aXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNw
YXJzZSB2YWx1ZSBtYXAKICAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNj
b3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5Lgog
ICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2Uo
KTsKLSAgICAKICAgICBpZiAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKICAg
ICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobmV3TGVuZ3RoLCBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQg
aW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7Ci0gICAgdW5zaWduZWQgdmVjdG9yTGVu
Z3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZl
Y3Rvckxlbmd0aCk7CiAgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9y
TGVuZ3RoKG5ld0xlbmd0aCk7CiAKQEAgLTI3NTQsNiArMjcxMCw4IEBAIGJvb2wgSlNPYmplY3Q6
OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3Ro
KSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JM
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgICAgICBzZXRCdXR0ZXJmbHlX
aXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMjc2OCw2ICsyNzI2LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0
b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8
IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1dHRl
cmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKQEAgLTI3NzYs
MzEgKzI3MzYsNDkgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAog
CiBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgdW5zaWduZWQgbGVuZ3Ro
KQogeworICAgIExPR0lUKCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQoKTsKICAgICAKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKICAg
ICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkgfHwgaGFzSW50MzIoaW5kZXhp
bmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVkKGlu
ZGV4aW5nVHlwZSgpKSk7CiAgICAgQVNTRVJUKGxlbmd0aCA+IGJ1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOwogICAgIAotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKAot
ICAgICAgICBsZW5ndGggPDwgMSwKLSAgICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7
CiAgICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgYnV0dGVyZmx5ID0gYnV0dGVy
Zmx5LT5ncm93QXJyYXlSaWdodCgKLSAgICAgICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKLSAgICAgICAgb2xkVmVjdG9yTGVu
Z3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKLSAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgaWYgKCFidXR0ZXJmbHkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7Cisg
ICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5
ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIAorICAgIHVuc2lnbmVkIGF2
YWlsYWJsZU9sZExlbmd0aCA9CisgICAgICAgIEJ1dHRlcmZseTo6YXZhaWxhYmxlQ29udGlndW91
c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBvbGRWZWN0b3JMZW5ndGgpOworICAgIGlm
IChhdmFpbGFibGVPbGRMZW5ndGggPj0gbGVuZ3RoKSB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhl
IGNhc2Ugd2hlcmUgc29tZW9uZSBlbHNlIHNlbGVjdGVkIGEgdmVjdG9yIGxlbmd0aCB0aGF0IGNh
dXNlZCBpbnRlcm5hbAorICAgICAgICAvLyBmcmFnbWVudGF0aW9uLiBJZiB3ZSBkaWQgb3VyIGpv
YnMgcmlnaHQsIHRoaXMgd291bGQgbmV2ZXIgaGFwcGVuLiBCdXQgSSBiZXQgd2Ugd2lsbCBtZXNz
CisgICAgICAgIC8vIHRoaXMgdXAsIHNvIHRoaXMgZGVmZW5zZSBzaG91bGQgc3RheS4KKyAgICAg
ICAgbmV3VmVjdG9yTGVuZ3RoID0gYXZhaWxhYmxlT2xkTGVuZ3RoOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIG5ld1ZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0
b3JMZW5ndGgoCisgICAgICAgICAgICBwcm9wZXJ0eUNhcGFjaXR5LCBzdGQ6Om1pbihsZW5ndGgg
PDwgMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkpOworICAgICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CisgICAgICAgIGJ1dHRlcmZseSA9IGJ1dHRlcmZseS0+Z3Jvd0FycmF5Umln
aHQoCisgICAgICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5LCB0
cnVlLAorICAgICAgICAgICAgb2xkVmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSwKKyAgICAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgICAgICBpZiAoIWJ1dHRlcmZseSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOworICAgIH0KIAogICAg
IGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAKICAgICBpZiAo
aGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBv
bGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47CisgICAgICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9y
TGVuZ3RoOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVh
cigpOwogICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yODIxLDYgKzI3OTksNyBA
QCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAKIEJ1dHRlcmZseSog
SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKQogeworICAgIExPR0lUKCk7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKIAogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVs
eSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSAr
MjYsMTEgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9u
cy5oIgogI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJp
ZXIuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgotI2lu
Y2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTEwMyw3ICsxMDMsNiBA
QCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9r
ZW4pOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGhlYXBTbmFwc2hvdChKU0Nl
bGwqLCBIZWFwU25hcHNob3RCdWlsZGVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtNDE0LDYgKzQxMyw4IEBA
IHB1YmxpYzoKICAgICAgICAgaW5pdGlhbGl6ZUluZGV4KHZtLCBpLCB2LCBpbmRleGluZ1R5cGUo
KSk7CiAgICAgfQogCisgICAgLy8gTk9URTogQ2xpZW50cyBvZiB0aGlzIG1ldGhvZCBtYXkgY2Fs
bCBpdCBtb3JlIHRoYW4gb25jZSBmb3IgYW55IGluZGV4LCBhbmQgdGhpcyBpcyBzdXBwb3NlZAor
ICAgIC8vIHRvIHdvcmsuCiAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0mIHZtLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwpAQCAtNjg2LDggKzY4
Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBTdHJ1
Y3R1cmUqKTsKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYsIFN0cnVjdHVy
ZSosIEJ1dHRlcmZseSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3Jh
Z2VJZk5lY2Vzc2FyeShWTSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKLSAg
ICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCBT
dHJ1Y3R1cmUqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydFRvRGljdGlv
bmFyeShWTSYpOwogCkBAIC03OTcsNyArNzk2LDYgQEAgcHJvdGVjdGVkOgogICAgIEpTT2JqZWN0
KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICB2b2lkIHZp
c2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7Ci0gICAg
dm9pZCBjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3Jh
Z2VTaXplKTsKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3Qg
aXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2ls
bCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtOTA4LDcgKzkwNiw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBpc09iamVjdCgpOwogICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAgCi0gICAgQnV0dGVy
Zmx5KiBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoVk0mLCB1bnNpZ25lZCBsZW5ndGgsIHNp
emVfdCBlbGVtZW50U2l6ZSk7CisgICAgQnV0dGVyZmx5KiBjcmVhdGVJbml0aWFsSW5kZXhlZFN0
b3JhZ2UoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICAKICAgICBBcnJheVN0b3JhZ2Uq
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3Rz
KFZNJiwgQXJyYXlTdG9yYWdlKik7CiAgICAgICAgIApAQCAtOTMyLDcgKzkzMCw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUsIEFycmF5U3RvcmFnZSopOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBQdXREaXJlY3RJbmRleE1vZGUpOwogICAgICAgICAKLSAgICB1bnNpZ25lZCBnZXROZXdW
ZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVu
dExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgdW5zaWduZWQgZ2V0TmV3VmVj
dG9yTGVuZ3RoKHVuc2lnbmVkIGluZGV4QmlhcywgdW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0
aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAgICAg
dW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwogCiAg
ICAgQXJyYXlTdG9yYWdlKiBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29w
eWluZ0VsZW1lbnRzKFZNJiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKQEAgLTk0OSw3ICs5NDcs
NyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJl
QXJyYXlTdG9yYWdlU2xvdyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29weUJhcnJpZXI8QnV0
dGVyZmx5PiBtX2J1dHRlcmZseTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPEJ1dHRlcmZseSo+IG1f
YnV0dGVyZmx5OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90
IG1fcGFkZGluZzsKQEAgLTE0ODcsOCArMTQ4NSwxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEluCiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIHNldFN0
cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIG5ld1N0cnVjdHVyZSk7
Ci0KKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgc2l6ZV90IG9sZENhcGFjaXR5
ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBuZXdDYXBhY2l0
eSA9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBBU1NFUlQob2xkQ2Fw
YWNpdHkgPD0gbmV3Q2FwYWNpdHkpOworICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdDYXBhY2l0
eSkKKyAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOworICAgIGVsc2Ugewor
ICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZt
LCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkpOworICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICB9CiAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9m
ZnNldCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKQEAgLTE0OTYsMjcgKzE1MDIs
NiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9j
YXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlKQotewotICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIAotICAgIGlmIChvbGRDYXBhY2l0eSA9
PSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgc2V0U3RydWN0
dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOyAKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdy
b3dPdXRPZkxpbmVTdG9yYWdlKAotICAgICAgICB2bSwgb2xkQ2FwYWNpdHksIG5ld1N0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci19Ci0KLWlubGluZSB2b2lkIEpTT2JqZWN0
OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCi17Ci0gICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0
b3JhZ2VJZk5lY2Vzc2FyeSgKLSAgICAgICAgdm0sIHN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNh
cGFjaXR5KCksIG5ld1N0cnVjdHVyZSk7Ci19Ci0KIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRP
d25EYXRhUHJvcGVydHkoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAwNiwgMjAwOCwgMjAwOSwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOCwgMjAwOSwg
MjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjQsNiArMjQsNyBAQAogI2lmbmRlZiBKU09iamVjdElubGluZXNfaAogI2RlZmluZSBKU09iamVj
dElubGluZXNfaAogCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKICNpbmNs
dWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgi
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJKHJl
dmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCw5IEBACiAKICNpbmNsdWRlICJCdWls
dGluTmFtZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk1pY3JvdGFz
ay5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDExIEBACiAjaW5jbHVkZSAiQnVp
bHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU0NCdWlsdGlucy5o
IgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNpbmNs
dWRlICJNaWNyb3Rhc2suaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiwxMyArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIklkZW50aWZpZXJJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgotI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiwxMiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU2V0SXRl
cmF0b3IuaCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlND
ZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1NldC5o
IgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3
IEBACiAjaW5jbHVkZSAiSlNTdHJpbmdJdGVyYXRvci5oIgogCiAjaW5jbHVkZSAiQnVpbHRpbk5h
bWVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAkocmV2aXNp
b24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJl
Z2lzdHJ5S2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI3LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKIAotI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgotI2luY2x1
ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlR5cGVk
QXJyYXlBZGFwdG9ycy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMiArMjksMTAgQEAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTWFwLmgi
CiAjaW5jbHVkZSAiTWFwUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxMyArMzEsMTEgQEAKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAi
R2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpT
TWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5s
aW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIk1hcFBy
b3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDcgQEAgdHlwZWRlZiBjb25z
dCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB0ZXN0VGhlRlRMLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUs
IE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgcmVzZXRGcmVlQ2VsbHNCYWRseSwgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZWFnZXJseVVwZGF0ZVRvcENhbGxG
cmFtZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZU9T
UkVudHJ5VG9ERkcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNsdWRlICJFcnJv
ci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiUHJveHlPYmplY3QuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzkyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRl
ICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAyMDM5
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTcgKzM0LDIwIEBAIHN0YXRpYyBjb25zdCBQcm9wZXJ0
eU9mZnNldCBSZWdFeHBNYXRjaGUKIAogQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVV
bmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7Ci0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
ID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogICAgIGlmICh2ZWN0b3JMZW5ndGggPiBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZvaWQq
IHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6
OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCi0gICAgICAgIHJldHVy
biAwOworICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxw
dHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIGlm
ICghdGVtcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CiAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
ICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKLQorICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsr
aSkKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAKICAg
ICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0
ZXJmbHkpOwogfQogCkBAIC02Nyw0MCArNzAsNTQgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiBj
cmVhdGVSZWdFeHBNYXRjaAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYW5kbGUgYXJyYXkg
YWxsb2NhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ0CiAgICAgCisgICAgYXV0byBzZXRQcm9wZXJ0aWVz
ID0gWyZdICgpIHsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0Fy
cmF5SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1iZXIocmVzdWx0LnN0YXJ0KSk7CisgICAgICAg
IGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZz
ZXQsIGlucHV0KTsKKyAgICB9OworICAgIAorICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0g
cmVnRXhwLT5udW1TdWJwYXR0ZXJucygpOworICAgIAogICAgIGlmIChVTkxJS0VMWShnbG9iYWxP
YmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSkpIHsKLSAgICAgICAgYXJyYXkgPSBKU0FycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJh
eVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICAgICAgYXJy
YXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPnJl
Z0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyArIDEpOworICAgICAg
ICAKKyAgICAgICAgc2V0UHJvcGVydGllcygpOworICAgICAgICAKKyAgICAgICAgYXJyYXktPmlu
aXRpYWxpemVJbmRleCh2bSwgMCwganNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpCisgICAgICAgICAg
ICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBieSBHQy4KICAgICAg
ICAgCiAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzU3Vic3RyaW5nT2ZS
ZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFy
dCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVn
RXhwLT5udW1TdWJwYXR0ZXJucygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgc3RhcnQg
PSBzdWJwYXR0ZXJuUmVzdWx0c1syICogaV07Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49
IDApCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpT
Um9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBz
dWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpz
VW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKKyAgICAgICAgICAgIGludCBzdGFydCA9IHN1
YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKQorICAg
ICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0cmluZzo6
Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVz
dWx0c1syICogaSArIDFdIC0gc3RhcnQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSh2bSwg
Z2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1T
dWJwYXR0ZXJucygpICsgMSk7CisgICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZFJlZ0V4cE1hdGNoZXNBcnJheSh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlT
dHJ1Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMgKyAxKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YXJyYXkpOwogICAgICAgICAKKyAgICAgICAgc2V0UHJvcGVydGllcygpOworICAgICAgICAKKyAg
ICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNVbmRlZmluZWQoKSwgQXJyYXlX
aXRoQ29udGlndW91cyk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDw9IG51bVN1YnBhdHRlcm5zOyArK2kpCisgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBieSBHQy4KKwogICAg
ICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQo
dm0sIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpLCBBcnJh
eVdpdGhDb250aWd1b3VzKTsKICAgICAgICAgCi0gICAgICAgIGlmICh1bnNpZ25lZCBudW1TdWJw
YXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOwotICAgICAgICAgICAgICAg
IGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlu
cHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSwgQXJyYXlX
aXRoQ29udGlndW91cyk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdpdGhD
b250aWd1b3VzKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7CisgICAgICAgICAgICBpbnQgc3RhcnQgPSBzdWJw
YXR0ZXJuUmVzdWx0c1syICogaV07CisgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkKKyAgICAg
ICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNy
ZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3Vs
dHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbmRl
eFByb3BlcnR5T2Zmc2V0LCBqc051bWJlcihyZXN1bHQuc3RhcnQpKTsKLSAgICBhcnJheS0+cHV0
RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5T2Zmc2V0LCBpbnB1dCk7
Ci0KICAgICByZXR1cm4gYXJyYXk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyMDM5MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNp
bmNsdWRlICJIZWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgor
I2luY2x1ZGUgIkhlYXBVdGlsLmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpAQCAt
MzkyLDcgKzM5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQK
ICAgICAgICAgICAgIEpTVmFsdWUgY2FsbGVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRDYWxs
ZWUpOwogICAgICAgICAgICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuZnJh
bWVzLmxhc3QoKTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUhhc0V4ZWN1dGFibGUgPSAhIXN0
YWNrRnJhbWUuZXhlY3V0YWJsZTsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNWYWx1ZUdDT2Jq
ZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGNhbGxlZSkpIHsKKyAgICAgICAgICAgIGlmICgh
SGVhcFV0aWw6OmlzVmFsdWVHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBjYWxsZWUp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5SGFzRXhlY3V0YWJsZSkKICAgICAgICAg
ICAgICAgICAgICAgc3RhY2tGcmFtZS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6OlVua25vd247CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDM3LDcgKzQzOCw3IEBAIHZvaWQgU2FtcGxpbmdQ
cm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEhlYXA6OmlzUG9pbnRlckdD
T2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGV4ZWN1dGFibGUpKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKEhlYXBVdGlsOjppc1BvaW50ZXJHQ09iamVjdEpTQ2VsbChmaWx0ZXIs
IG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7CiAgICAgICAgICAgICBzdGFja0ZyYW1lLmZy
YW1lVHlwZSA9IEZyYW1lVHlwZTo6RXhlY3V0YWJsZTsKICAgICAgICAgICAgIHN0YWNrRnJhbWUu
ZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBtX2xpdmVDZWxsUG9pbnRlcnMu
YWRkKGV4ZWN1dGFibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMyArMjksMTEgQEAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTU2V0Lmgi
CiAjaW5jbHVkZSAiTWFwRGF0YS5oIgogI2luY2x1ZGUgIlNldFByb3RvdHlwZS5oIgotI2luY2x1
ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjAzOTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjaW5jbHVkZSAiRXhjZXB0aW9u
SGVscGVycy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9y
T3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNGdW5jdGlvbklubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgi
CiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCiAKICNpbmNsdWRlICJTZXRQcm90b3R5cGUubHV0LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwCShyZXZpc2lv
biAyMDM5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lz
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDkgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5LmgiCiAKLSNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsMTEgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSXRlcmF0
b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBQcm90b3R5cGUuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCwxMSArMjgsOSBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJdGVyYXRvck9w
ZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldFByb3RvdHlwZS5oIgogCiBuYW1lc3BhY2UgSlND
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktc3RvcmFn
ZS1hcnJheS11bnNoaWZ0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvYXJyYXktc3RvcmFnZS1hcnJheS11bnNoaWZ0LmpzCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktc3RvcmFnZS1hcnJh
eS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorLy9AIHJ1bkRlZmF1
bHQKK3ZhciB4ID0gWzIuNSwgMS41XTsKK3gubGVuZ3RoID0gMTAwMDAwMDAwMDsKK3gubGVuZ3Ro
ID0gMjsKK0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoeCwgMy41KTsKK2lmICh4LnRvU3Ry
aW5nKCkgIT0gIjMuNSwyLjUsMS41IikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIg
KyBkZXNjcmliZSh4KTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVuc2hpZnQuanMJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb250aWd1b3Vz
LWFycmF5LXVuc2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisvL0AgcnVu
RGVmYXVsdAordmFyIHggPSBbJ2InLCAnYSddOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2Fs
bCh4LCAnYycpOworaWYgKHgudG9TdHJpbmcoKSAhPSAiYyxiLGEiKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1hcnJheS11bnNoaWZ0LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZG91YmxlLWFycmF5LXVuc2hpZnQu
anMJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9k
b3VibGUtYXJyYXktdW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKy8v
QCBydW5EZWZhdWx0Cit2YXIgeCA9IFsyLjUsIDEuNV07CitBcnJheS5wcm90b3R5cGUudW5zaGlm
dC5jYWxsKHgsIDMuNSk7CitpZiAoeC50b1N0cmluZygpICE9ICIzLjUsMi41LDEuNSIpCisgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW50MzItYXJyYXktdW5zaGlmdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ludDMyLWFycmF5
LXVuc2hpZnQuanMJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9pbnQzMi1hcnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NiBAQAorLy9AIHJ1bkRlZmF1bHQKK3ZhciB4ID0gWzIsIDFdOworQXJyYXkucHJvdG90eXBlLnVu
c2hpZnQuY2FsbCh4LCAzKTsKK2lmICh4LnRvU3RyaW5nKCkgIT0gIjMsMiwxIikKKyAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNjcmliZSh4KTsKKwpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwMzkyMCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTggQEAKKzIwMTYtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxsb2NhdGVkIGluIEF1eGlsaWFyeSBNYXJr
ZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoZSBKU0MgR0MgbmVlZHMgYSB0cnlGYXN0
QWxpZ25lZE1hbGxvYygpLCBhbmQgdGhpcyBleHBvc2VzIHN1Y2ggYSBmdW5jdGlvbi4KKworICAg
ICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAgICAgICAgKFdURjo6ZmFzdEFsaWduZWRNYWxs
b2MpOgorICAgICAgICAoV1RGOjp0cnlGYXN0QWxpZ25lZE1hbGxvYyk6CisgICAgICAgIChXVEY6
OmZhc3RBbGlnbmVkRnJlZSk6CisgICAgICAgICogd3RmL0Zhc3RNYWxsb2MuaDoKKwogMjAxNi0w
Ny0yOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBTdHJp
bmdWaWV3IGNhcGFibGUgb2YgYmVpbmcgcGFzc2VkIG9yIHJldHVybmVkIGluIG9ubHkgMiByZWdp
c3RlcnMuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291
cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBA
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxMSwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUt
MjAwOSwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpAQCAtOTcsNiArOTYsMTEgQEAg
dm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBfYWxp
Z25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKIH0KIAordm9pZCogdHJ5RmFzdEFsaWduZWRN
YWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAoreworICAgIHJldHVybiBfYWxp
Z25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKK30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUo
dm9pZCogcCkgCiB7CiAgICAgX2FsaWduZWRfZnJlZShwKTsKQEAgLTExMSw2ICsxMTUsMTMgQEAg
dm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudAogICAgIHJldHVybiBwOwog
fQogCit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qg
c2l6ZSkgCit7CisgICAgdm9pZCogcCA9IG51bGxwdHI7CisgICAgcG9zaXhfbWVtYWxpZ24oJnAs
IGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7Cit9CisKIHZvaWQgZmFzdEFsaWduZWRG
cmVlKHZvaWQqIHApIAogewogICAgIGZyZWUocCk7CkBAIC0yMzEsNiArMjQyLDExIEBAIHZvaWQq
IGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQKICAgICByZXR1cm4gYm1hbGxvYzo6
YXBpOjptZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25l
ZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgcmV0dXJuIGJt
YWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsKK30KKwogdm9pZCBmYXN0
QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHApOwpJbmRl
eDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL1dURi93dGYvRmFz
dE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDUtMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTMsNiArNTMsNyBAQCBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0RnJlZSh2b2lkKik7CiAKIC8vIEFsbG9jYXRpb25zIGZy
b20gZmFzdEFsaWduZWRNYWxsb2MoKSBtdXN0IGJlIGZyZWVkIHVzaW5nIGZhc3RBbGlnbmVkRnJl
ZSgpLgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5RmFzdEFsaWdu
ZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKik7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3Qg
ZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCopOwpAQCAtMTA3LDYgKzEwOCw3IEBAIHVzaW5nIFdU
Rjo6ZmFzdE1hbGxvY1NpemU7CiB1c2luZyBXVEY6OmZhc3RSZWFsbG9jOwogdXNpbmcgV1RGOjpm
YXN0U3RyRHVwOwogdXNpbmcgV1RGOjpmYXN0WmVyb2VkTWFsbG9jOwordXNpbmcgV1RGOjp0cnlG
YXN0QWxpZ25lZE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdENhbGxvYzsKIHVzaW5nIFdURjo6
dHJ5RmFzdE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdFplcm9lZE1hbGxvYzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAyMDM5MjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CiAjaW5jbHVkZSA8aGVhcC9XZWFrSW5saW5lcy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaD4KICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMu
aD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIu
Y3BwCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1
LDkgQEAKICNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5oIgogI2luY2x1ZGUgIkNvbnRl
bnRFeHRlbnNpb25zQmFja2VuZC5oIgogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdn
aW5nLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSWRlbnRpZmllcklubGluZXMuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0ds
b2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT05PYmplY3QuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVk0uaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzkyNykK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDE2LTA3LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgQnV0dGVyZmxpZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBpbiBBdXhpbGlhcnkgTWFya2VkU3Bh
Y2UgaW5zdGVhZCBvZiBDb3BpZWRTcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBOZWVkIHRvICNpbmNsdWRlIG1vcmUgdGhpbmdzIG5v
dy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNw
cDoKKwogMjAxNi0wNy0yOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBDcmFzaCB3aXRoIGFuIEludmFsaWQgV2ViIFByb2Nlc3MgSVBDIE1lc3NhZ2UgSUQ6IFdl
YlBhZ2VQcm94eS5BdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjawpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTlBKU09iamVjdC5oIgogI2luY2x1ZGUgIk5QUnVu
dGltZU9iamVjdE1hcC5oIgogI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlm
aWVySW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0Lmg+
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDM5MjApCisrKyBTb3VyY2UvYm1hbGxvYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxNi0wNy0yOSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEJ1dHRlcmZsaWVzIHNob3VsZCBi
ZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3Bh
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDEy
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhlIEpTQyBHQyBuZWVkcyB0byBiZSBhYmxlIHRvIHRyeU1lbWFsaWduLCBhbmQgdGhpcyBy
ZWZhY3RvcnMgdGhlIGNvZGUgdG8gZXhwb3NlIHN1Y2ggYQorICAgICAgICBmdW5jdGlvbi4KKwor
ICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9j
YXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbCk6CisgICAgICAg
IChibWFsbG9jOjpBbGxvY2F0b3I6OnJlYWxsb2NhdGUpOgorICAgICAgICAqIGJtYWxsb2MvQWxs
b2NhdG9yLmg6CisgICAgICAgICogYm1hbGxvYy9DYWNoZS5oOgorICAgICAgICAoYm1hbGxvYzo6
Q2FjaGU6OmFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjp0cnlBbGxvY2F0ZSk6
CisgICAgICAgICogYm1hbGxvYy9ibWFsbG9jLmg6CisgICAgICAgIChibWFsbG9jOjphcGk6Om1h
bGxvYyk6CisgICAgICAgIChibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKToKKyAgICAgICAgKGJt
YWxsb2M6OmFwaTo6bWVtYWxpZ24pOgorCiAyMDE2LTA3LTEzICBFbnJpY2EgQ2FzdWNjaSAgPGVu
cmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHN1cHBvcnRlZCBwbGF0Zm9ybXMgaW4g
eGNjb25maWcgZmlsZXMgdG8gbWF0Y2ggdGhlIHNkayBuYW1lcy4KSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw2ICs2NCwxOCBA
QCB2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBzaXplCiAKIHZvaWQqIEFsbG9j
YXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CisgICAgYm9v
bCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbChhbGlnbm1l
bnQsIHNpemUsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBib29sIGNyYXNoT25G
YWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbChhbGlnbm1lbnQsIHNpemUs
IGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUltcGwoc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit7CiAgICAg
QkFTU0VSVChpc1Bvd2VyT2ZUd28oYWxpZ25tZW50KSk7CiAKICAgICBpZiAoIW1faXNCbWFsbG9j
RW5hYmxlZCkgewpAQCAtODAsNyArOTIsMTAgQEAgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3QgYWxpZ25tZQogICAgICAgICByZXR1cm4gYWxsb2NhdGUocm91bmRVcFRvTXVsdGlwbGVP
ZihhbGlnbm1lbnQsIHNpemUpKTsKIAogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4g
bG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxI
ZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUp
OworICAgIEhlYXAqIGhlYXAgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpOworICAg
IGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgcmV0dXJuIGhlYXAtPmFsbG9jYXRlTGFyZ2Uo
bG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gaGVhcC0+dHJ5QWxsb2NhdGVMYXJn
ZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogfQogCiB2b2lkKiBBbGxvY2F0b3I6OnJlYWxsb2Nh
dGUodm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
bGxvY2F0b3IuaAkocmV2aXNpb24gMjAzOTIwKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE1IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZv
aWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogcmVhbGxv
Y2F0ZSh2b2lkKiwgc2l6ZV90KTsKIAogICAgIHZvaWQgc2NhdmVuZ2UoKTsKIAogcHJpdmF0ZToK
KyAgICB2b2lkKiBhbGxvY2F0ZUltcGwoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBib29sIGNy
YXNoT25GYWlsdXJlKTsKKyAgICAKICAgICBib29sIGFsbG9jYXRlRmFzdENhc2Uoc2l6ZV90LCB2
b2lkKiYpOwogICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKICAgICAKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0NhY2hlLmgJKHJldmlzaW9uIDIwMzkyMCkKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCog
YWxsb2NhdGUoc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90IGFs
aWdubWVudCwgc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqKTsKICAgICBz
dGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90KTsKQEAgLTc5LDYgKzgwLDE0IEBA
IGlubGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUKICAgICByZXR1cm4gY2Fj
aGUtPmFsbG9jYXRvcigpLmFsbG9jYXRlKHNpemUpOwogfQogCitpbmxpbmUgdm9pZCogQ2FjaGU6
OnRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIENhY2hl
KiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CisgICAgaWYgKCFjYWNo
ZSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoYWxpZ25tZW50LCBz
aXplKTsKKyAgICByZXR1cm4gY2FjaGUtPmFsbG9jYXRvcigpLnRyeUFsbG9jYXRlKGFsaWdubWVu
dCwgc2l6ZSk7Cit9CisKIGlubGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hl
Pjo6Z2V0RmFzdENhc2UoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCShyZXZpc2lv
biAyMDM5MjApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Myw2ICs0MywxMiBAQCBpbmxpbmUgdm9pZCogbWFsbG9jKHNpemVfdCBzaXpl
KQogICAgIHJldHVybiBDYWNoZTo6YWxsb2NhdGUoc2l6ZSk7CiB9CiAKKy8vIFJldHVybnMgbnVs
bCBvbiBmYWlsdXJlLgoraW5saW5lIHZvaWQqIHRyeU1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBDYWNoZTo6dHJ5QWxsb2NhdGUoYWxpZ25tZW50
LCBzaXplKTsKK30KKwogLy8gQ3Jhc2hlcyBvbiBmYWlsdXJlLgogaW5saW5lIHZvaWQqIG1lbWFs
aWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTUwKQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDct
MzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCdXR0ZXJmbGll
cyBzaG91bGQgYmUgYWxsb2NhdGVkIGluIEF1eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9m
IENvcGllZFNwYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjAxMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGFkZHMgYSBuZXcgdmFsaWRhdGlvbiBmbGFnIHRvIHRoZSBWTSwgd2hpY2ggaXMg
dmVyeSBjaGVhcCBhbmQgc2hvdWxkbid0IGV2ZXIgYnJlYWsKKyAgICAgICAgYW55dGhpbmcuIFRo
aXMgZW5hYmxlcyB0aGUgZmxhZyBmb3IgYWxsIG5vLWNqaXQgdGVzdHMsIHNpbmNlIHRob3NlIGFy
ZSB0aGUgb25lcyB3aGVyZSB3ZSBhcmUKKyAgICAgICAgYWxyZWFkeSBoYXBweSB0byBwYXkgc29t
ZSBwcmljZSBmb3IgYWx0ZXJlcmVkIGNvdmVyYWdlLgorCisgICAgICAgICogU2NyaXB0cy9ydW4t
anNjLXN0cmVzcy10ZXN0czoKKwogMjAxNi0wNy0zMCAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAg
PHJlZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkOiBhZGQgbXlzZWxmIHRvIHRo
ZSByZXZpZXdlcnMgbGlzdC4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVz
dHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2
aXNpb24gMjAzOTIwKQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29y
a2luZyBjb3B5KQpAQCAtNDIwLDcgKzQyMCw3IEBAICRudW1QYXNzZXMgPSAwCiAjIFdlIGZvcmNl
IGFsbCB0ZXN0cyB0byB1c2UgYSBzbWFsbGVyICgxLjVNKSBzdGFjayBzbyB0aGF0IHN0YWNrIG92
ZXJmbG93IHRlc3RzIGNhbiBydW4gZmFzdGVyLgogQkFTRV9PUFRJT05TID0gWyItLXVzZUZUTEpJ
VD1mYWxzZSIsICItLXVzZUZ1bmN0aW9uRG90QXJndW1lbnRzPXRydWUiLCAiLS1tYXhQZXJUaHJl
YWRTdGFja1VzYWdlPTE1NzI4NjQiXQogRUFHRVJfT1BUSU9OUyA9IFsiLS10aHJlc2hvbGRGb3JK
SVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAiLCAiLS10aHJlc2hv
bGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwPTIwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXA9MjAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MjAiLCAiLS10aHJl
c2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwPTIwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0
aW1pemVTb29uPTIwIiwgIi0tbWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VMZW5ndGg9MTUwMDAw
Il0KLU5PX0NKSVRfT1BUSU9OUyA9IFsiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdGhy
ZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAwIl0KK05PX0NKSVRfT1BUSU9OUyA9IFsiLS11c2VD
b25jdXJyZW50SklUPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAwIiwg
Ii0tcmVzZXRGcmVlQ2VsbHNCYWRseT10cnVlIl0KIEZUTF9PUFRJT05TID0gWyItLXVzZUZUTEpJ
VD10cnVlIl0KIAogJHJ1bmxpc3QgPSBbXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285170</attachid>
            <date>2016-08-02 17:57:11 -0700</date>
            <delta_ts>2016-08-03 11:29:19 -0700</delta_ts>
            <desc>latest patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>200173</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2FycmF5LXN0b3JhZ2UtYXJyYXktdW5zaGlmdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvYXJyYXktc3RvcmFnZS1hcnJheS11bnNo
aWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorLy9AIHJ1bkRlZmF1bHQKK3Zh
ciB4ID0gWzIuNSwgMS41XTsKK3gubGVuZ3RoID0gMTAwMDAwMDAwMDsKK3gubGVuZ3RoID0gMjsK
K0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoeCwgMy41KTsKK2lmICh4LnRvU3RyaW5nKCkg
IT0gIjMuNSwyLjUsMS41IikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNj
cmliZSh4KTsKKwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY29udGlndW91cy1hcnJheS11bnNoaWZ0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlm
dC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVu
c2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisvL0AgcnVuRGVmYXVsdAor
dmFyIHggPSBbJ2InLCAnYSddOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAnYycp
OworaWYgKHgudG9TdHJpbmcoKSAhPSAiYyxiLGEiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9kb3VibGUtYXJy
YXktdW5zaGlmdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXkt
dW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXkt
dW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKy8vQCBydW5EZWZhdWx0
Cit2YXIgeCA9IFsyLjUsIDEuNV07CitBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKHgsIDMu
NSk7CitpZiAoeC50b1N0cmluZygpICE9ICIzLjUsMi41LDEuNSIpCisgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2lu
dDMyLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvaW50MzIt
YXJyYXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9pbnQzMi1h
cnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorLy9AIHJ1bkRl
ZmF1bHQKK3ZhciB4ID0gWzIsIDFdOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAz
KTsKK2lmICh4LnRvU3RyaW5nKCkgIT0gIjMsMiwxIikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyBkZXNjcmliZSh4KTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEzIEBACisyMDE2LTA3LTI5ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQnV0dGVyZmxpZXMgc2hvdWxkIGJlIGFsbG9jYXRl
ZCBpbiBBdXhpbGlhcnkgTWFya2VkU3BhY2UgaW5zdGVhZCBvZiBDb3BpZWRTcGFjZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTI1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbiBvcmRl
ciB0byBtYWtlIHRoZSBHQyBjb25jdXJyZW50IChidWcgMTQ5NDMyKSwgd2Ugd291bGQgZWl0aGVy
IG5lZWQgdG8gZW5hYmxlIGNvbmN1cnJlbnQKKyAgICAgICAgY29weWluZyBvciB3ZSB3b3VsZCBu
ZWVkIHRvIG5vdCBjb3B5LiBDb25jdXJyZW50IGNvcHlpbmcgY2FycmllcyBhIDEtMiUgdGhyb3Vn
aHB1dCBvdmVyaGVhZAorICAgICAgICBmcm9tIHRoZSBiYXJyaWVycyBhbG9uZS4gQ29uc2lkZXJp
bmcgdGhhdCBNYXJrZWRTcGFjZSBkb2VzIGEgZGVjZW50IGpvYiBvZiBhdm9pZGluZworICAgICAg
ICBmcmFnbWVudGF0aW9uLCBpdCdzIHVubGlrZWx5IHRoYXQgaXQncyB3b3J0aCBwYXlpbmcgMS0y
JSB0aHJvdWdocHV0IGZvciBjb3B5aW5nLiBTbywgd2Ugd2FudAorICAgICAgICB0byBnZXQgcmlk
IG9mIGNvcGllZCBzcGFjZS4gVGhpcyBjaGFuZ2UgbW92ZXMgY29waWVkIHNwYWNlJ3MgYmlnZ2Vz
dCBjbGllbnQgb3ZlciB0byBtYXJrZWQKKyAgICAgICAgc3BhY2UuCisgICAgICAgIAorICAgICAg
ICBNb3ZpbmcgYnV0dGVyZmxpZXMgdG8gbWFya2VkIHNwYWNlIG1lYW5zIGhhdmluZyB0aGVtIHVz
ZSB0aGUgbmV3IEF1eGlsaWFyeSBIZWFwQ2VsbAorICAgICAgICBhbGxvY2F0aW9uIHBhdGguIFRo
aXMgaXMgYSBmYWlybHkgbWVjaGFuaWNhbCBjaGFuZ2UuIEF0IGEgaGlnaCBsZXZlbCB0aGlzIGRv
ZXMgdGhlc2UgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBXZSB1c2UgQXV4aWxpYXJ5QmFy
cmllciBpbnN0ZWFkIG9mIENvcHlCYXJyaWVyLgorICAgICAgICAKKyAgICAgICAgLSBXZSB1c2Ug
dHJ5QWxsb2NhdGVBdXhpbGlhcnkgaW5zdGVhZCBvZiB0cnlBbGxvY2F0ZVN0b3JhZ2UuIEkgZ290
IHJpZCBvZiB0aGUgc2lsbHkKKyAgICAgICAgICBDaGVja2VkQm9vbGVhbiBzdHVmZiwgc2luY2Ug
aXQncyBzbyBtdWNoIG1vcmUgdHJvdWJsZSB0aGFuIGl0J3Mgd29ydGguCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBKSVRzIGhhdmUgdG8gZW1pdCBpbmxpbmVkIG1hcmtlZCBzcGFjZSBhbGxvY2F0
aW9ucyBpbnN0ZWFkIG9mIGlubGluZSBjb3B5IHNwYWNlCisgICAgICAgICAgYWxsb2NhdGlvbnMu
CisgICAgICAgIAorICAgICAgICAtIEV2ZXJ5b25lIGhhcyB0byBnZXQgdXNlZCB0byB6ZXJvaW5n
IHRoZWlyIGJ1dHRlcmZsaWVzIGFmdGVyIGFsbG9jYXRpb24gaW5zdGVhZCBvZiByZWx5aW5nCisg
ICAgICAgICAgb24gdGhlbSBiZWluZyBwcmUtemVyb2VkIGJ5IHRoZSBHQy4gQ29waWVkIHNwYWNl
IHdvdWxkIHplcm8gdGhpbmdzIGZvciB5b3UsIHdoaWxlIG1hcmtlZAorICAgICAgICAgIHNwYWNl
IGRvZXNuJ3QuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHN0aWxsIGEgd29yayBpbiBwcm9n
cmVzcy4gSXQgc3RpbGwgZmFpbHMgc29tZSBpbnRlcm5hbCBmdXp6aW5nIHRlc3RzIGFuZCBJIGhh
dmVuJ3QKKyAgICAgICAgbWVhc3VyZWQgcGVyZm9ybWFuY2UgeWV0LgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZURp
cmVjdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVOZXdBcnJheVdpdGhTaXplKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6aW5pdGlhbGl6ZUFycmF5RWxlbWVudHMpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXpl
SW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmVtaXRSaWdodFNo
aWZ0U25pcHBldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9j
YXRlSGVhcENlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxv
Y2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0
ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRv
ckZvclNpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0
ZVZhcmlhYmxlU2l6ZWRPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjphbGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3Rz
KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6Omdyb3cpOgorICAgICAgICAoSlND
OjpDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIpOgorICAgICAgICAqIGhlYXAv
Q29uc2VydmF0aXZlUm9vdHMuaDoKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OnNp
emUpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6cm9vdHMpOgorICAgICAgICAq
IGhlYXAvQ29weVRva2VuLmg6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpT
Qzo6SGVhcDo6Y29weUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAg
ICAgICAoSlNDOjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3Rvcik6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdFdpdGhEZXN0cnVjdG9yKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YSk6CisgICAgICAgIChK
U0M6OkhlYXA6OnN0b3JhZ2VBbGxvY2F0b3IpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6aGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ip
OgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZSk6CisgICAgICAgIChK
U0M6OkhlYXA6OnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVB
dXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeSk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlND
OjpIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRGcmVl
QmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmaW5kR0NPYmplY3RQb2ludGVyKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6aXNQb2ludGVyR0NPYmplY3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpI
ZWFwOjppc1ZhbHVlR0NPYmplY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjppc1BvaW50ZXJHQ09i
amVjdCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJldGlyZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwpOgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeVBvcEZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
SGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVC
bG9jayk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAg
ICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpkZXN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6Y2VsbEtpbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6
OmhlYXApOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRha2VMYXN0QWN0aXZlQmxv
Y2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmluaXQpOgorICAgICAgICAoSlND
OjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp0cnlDcmVhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmNlbGxBbGlnbik6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpibG9j
a0Zvcik6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpNYXJr
ZWRTcGFjZTo6c3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IpOgorICAgICAgICAoSlND
OjpNYXJrZWRTcGFjZTo6c3Vic3BhY2VGb3JPYmplY3RzV2l0aG91dERlc3RydWN0b3IpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlND
OjpNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjphcHBlbmRUb01hcmtTdGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptYXJr
QXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om5vdGVMaXZlQXV4aWxpYXJ5
Q2VsbCk6CisgICAgICAgIChKU0M6OlNldEN1cnJlbnRDZWxsU2NvcGU6OlNldEN1cnJlbnRDZWxs
U2NvcGUpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAqIGluc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5j
cHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBwYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6QXV4aWxpYXJ5QmFycmllcik6CisgICAgICAgIChKU0M6
OkF1eGlsaWFyeUJhcnJpZXI6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmll
cjo6Z2V0KToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6c2xvdCk6CisgICAgICAg
IChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpB
dXhpbGlhcnlCYXJyaWVyOjpzZXRXaXRob3V0QmFycmllcik6CisgICAgICAgICogcnVudGltZS9B
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5
QmFycmllcjxUPjo6QXV4aWxpYXJ5QmFycmllcik6CisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJh
cnJpZXI8VD46OnNldCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0
eSk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuaDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKToKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FsbGVlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgICogcnVudGltZS9KU01h
cEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0Q2xhc3NQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aGVh
cFNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91cyk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29udmVydEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVy
dEludDMyVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERv
dWJsZVRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pT
UHJvbWlzZVByb3RvdHlwZS5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Rl
bXBsYXRlUmVnaXN0cnlLZXkuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5jcHA6CisgICAgICAgICogcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvUHJv
eHlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6Cisg
ICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAgICogcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6
cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAgICogcnVudGltZS9TZXRDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dl
YWtTZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2FycmF5LXN0b3Jh
Z2UtYXJyYXktdW5zaGlmdC5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2NvbnRp
Z3VvdXMtYXJyYXktdW5zaGlmdC5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2Rv
dWJsZS1hcnJheS11bnNoaWZ0LmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvaW50
MzItYXJyYXktdW5zaGlmdC5qczogQWRkZWQuCisKIDIwMTYtMDgtMDIgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBidWlsZGluZyB3aXRoIGNvbnRl
bnQgZmlsdGVyaW5nIGRpc2FibGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNiArMzIy
LDggQEAKIAkJMEYzOEIwMTgxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNDE3
Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCAqLzsgfTsKIAkJMEYzOEIwMTkx
N0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNTE3Q0ZFNzU1MDBCMTQ0RDMg
LyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCAqLzsgfTsKIAkJMEYzOEIwMUExN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0
aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4RDJBMDFENDQxOTY2
MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMzhEMkEzMUQ0NDE5NkQwMDY4MDQ5OSAvKiBBdXhp
bGlhcnlCYXJyaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzOTJDODkxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzkyQzg3MUI0NjE4ODQw
MDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgKi87IH07CiAJCTBGMzkyQzhBMUI0NjE4ODQw
MDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRG
dXp6LmggKi87IH07CiAJCTBGM0ExQkY5MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNBMUJGNzFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2Uu
Y3BwICovOyB9OwpAQCAtNTcyLDYgKzU3NCw3IEBACiAJCTBGQTdBOEVCMThCNDEzQzgwMDUyMzcx
RCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi87IH07CiAJCTBGQTdBOEVD
MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkE3QThFRTE4Q0U0
RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVEMThDRTRGRDgwMDUyMzcx
RCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovOyB9OworCQkwRkFERTY3MzFENEQy
M0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oICov
OyB9OwogCQkwRkFGN0VGRDE2NUJBOTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZBMTY1
QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFGN0VGRTE2
NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklU
RGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZCMTA1ODUxNjc1NDgwRjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTgyMTY3NTQ4MEMw
MEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgKi87IH07CkBAIC0yNTE5LDYgKzI1MjIsOCBAQAogCQkw
RjM4QjAxNDE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29tcGlsYXRpb25LZXkuaDsgcGF0aCA9IGRmZy9E
RkdDb21waWxhdGlvbktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAx
NTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5jcHA7IHBhdGggPSBk
ZmcvREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbk1vZGUuaDsgcGF0aCA9IGRm
Zy9ERkdDb21waWxhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYz
OEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXV4aWxpYXJ5QmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmll
cklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV4aWxpYXJ5QmFy
cmllcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOTJDODcxQjQ2
MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRGdXp6LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0
RnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzkyQzg4MUI0NjE4ODQw
MDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdPU1JFeGl0RnV6ei5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRGdXp6Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHUHV0U3RhY2tT
aW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc2Niw2ICsy
NzcxLDcgQEAKIAkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQURFNjcyMUQ0RDIz
QkMwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIZWFwVXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2NUJB
OTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0
S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGl0S2luZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjQ4LDYgKzUyNTQsNyBAQAogCQkJ
CUMyNEQzMUUxMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5oICovLAogCQkJCUMy
RTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovLAogCQkJCUMyRTUyNkJD
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLywKKwkJCQkwRkFERTY3MjFENEQyM0JD
MDA3Njg0NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJCQlGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQg
LyogSGVhcFZlcmlmaWVyLmNwcCAqLywKIAkJCQlGRTdCQTYwRTFBMUE3Q0VDMDBGMUY3QjQgLyog
SGVhcFZlcmlmaWVyLmggKi8sCiAJCQkJQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3Jl
bWVudGFsU3dlZXBlci5jcHAgKi8sCkBAIC01NjEwLDYgKzU2MTcsOCBAQAogCQkJCUY2OTJBODRE
MDI1NTU5N0QwMUZGNjBGNyAvKiBBcnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUw
MjU1NTk3RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVE
OEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYw
MDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAw
NjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAz
MTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FB
MEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAt
NTc3NSw3ICs1Nzg0LDYgQEAKIAkJCQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0
b3JQcm90b3R5cGUuaCAqLywKIAkJCQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJh
eS5jcHAgKi8sCiAJCQkJOTM4NzcyRTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywK
LQkJCQk1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJ
CQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJ
MEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJC
NjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywK
QEAgLTU3ODUsNiArNTc5Myw3IEBACiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQw
RkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3
IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3
IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAv
KiBKU0NhbGxlZS5jcHAgKi8sCkBAIC03MjY0LDYgKzcyNzMsNyBAQAogCQkJCTBGMzM4RTFDMUJG
Mjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk0OTU4ODFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM0RjRCNkYzMUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSBpbiBIZWFkZXJzICovLAorCQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhp
bGlhcnlCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0
MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3
RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJG
Q0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03
Njk2LDYgKzc3MDYsNyBAQAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0
ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTg3QTBGMUMwMzBENkMwMDM4QkJD
QSAvKiBTbmlwcGV0T3BlcmFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzAxQjREQzE0
MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkFERTY3MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUExNTg3RDc1MUI0REMxQzYwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRD
b25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1Mzk4RkFCMUM3NTBEQTQwMDYw
QTk2MyAvKiBIZWFwUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDcyMUI0REMx
NDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNzgxOCw2ICs3ODI5LDcgQEAKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyog
SlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThBNDExNzkwMDhB
MEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAw
ODc0MjE3Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzhE
MkEzMUQ0NDE5NkQwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBp
biBIZWFkZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVu
dmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA0MDU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIwNiwzNCArMTIwNiwyMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5l
d1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAg
ICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLmhlYXAuc3RvcmFn
ZUFsbG9jYXRvcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFp
bmluZyk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXls
b2FkRW5kKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvciA9IHZtLmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShuZXdTaXplKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJmFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAg
ICBqaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywg
c2xvd1BhdGgpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVhbGxvY2F0aW5nKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxv
Y2F0aW5nIChpLmUuIHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQogICAgICAgICAgICAgICAg
ICAgICAvLyBhbHJlYWR5IGhhZCBvdXQtb2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlKS4KICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5l
d1NpemUgPiBvbGRTaXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNo
R1BSMyA9IG9sZCBzdG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9
IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBv
ZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDQwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NTIsNyArODUyLDYgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheVdpdAogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJBcnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpKSkp
OwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1
Y3R1cmUsIHNpemUpOwotICAgIHJlc3VsdC0+YnV0dGVyZmx5KCk7IC8vIEVuc3VyZSB0aGF0IHRo
ZSBiYWNraW5nIHN0b3JlIGlzIGluIHRvLXNwYWNlLgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzkwNywyNyArMzkwNywzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHJl
c3VsdEdQUiwgc3RvcmFnZUdQUikpOwotICAgICAgICAgICAgbV9qaXQuc3ViUHRyKHNjcmF0Y2hH
UFIsIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVT
aXplZCgKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSLCBtX2ppdC52bSgpLT5oZWFwLnN1YnNw
YWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsCisgICAgICAgICAg
ICAgICAgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgICAgICBtX2ppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlR1BSKTsKICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpOwog
ICAgICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
LCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNp
emVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
VmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJs
ZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIG5hbiA9
IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobmFuLnUuYXNCaXRzLnRhZyksIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobmFuLnUuYXNCaXRzLnBh
eWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwot
ICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgSlNWYWx1ZSBob2xlOworICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRl
eGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgaG9sZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5j
b2RlQXNEb3VibGUsIFBOYU4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhv
bGUgPSBKU1ZhbHVlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsK
KyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihob2xlLnUuYXNCaXRzLnRhZyks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihob2xlLnUuYXNC
aXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7
CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0
b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg2OSwyNyArMzg2OSwz
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQubHNo
aWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAg
ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHJlc3VsdEdQUiwgc3RvcmFnZUdQUikpOwotICAgICAg
ICAgICAgbV9qaXQuc3ViUHRyKHNjcmF0Y2hHUFIsIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAg
bV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCgKKyAgICAgICAgICAgICAgICBzdG9yYWdl
R1BSLCBtX2ppdC52bSgpLT5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCByZXN1bHRH
UFIsIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7
CisgICAgICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBlbWl0
QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSkgeworICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpCiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0
PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92
ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2Ny
YXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3As
ICZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxv
b3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5saW5rVG8obG9vcCwgJm1faml0
KTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9j
YXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCisgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENhbGxB
cnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwg
cmVzdWx0R1BSLAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSks
CiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSksCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOwogCiAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aCA+PSBudW1FbGVtZW50cyk7Ci0g
ICAgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCB2ZWN0b3JMZW5ndGgp
OworICAgIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JM
ZW5ndGgoc3RydWN0dXJlLCB2ZWN0b3JMZW5ndGgpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CiAKQEAgLTEwMywxMiArMTAzLDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICBzaXplICs9IG91dE9mTGluZUNhcGFjaXR5
ICogc2l6ZW9mKEpTVmFsdWUpOwogCiAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZCgKLSAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShUcnVzdGVkSW1t
MzIoc2l6ZSksIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQot
ICAgICAgICAgICAgbV9qaXQuc3ViUHRyKFRydXN0ZWRJbW0zMih2ZWN0b3JMZW5ndGggKiBzaXpl
b2YoSlNWYWx1ZSkpLCBzdG9yYWdlR1BSKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9q
aXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQ
Uik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigmbV9qaXQudm0oKS0+aGVhcC5h
bGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG1f
aml0LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZFB0cigKKyAgICAgICAgICAgIFRy
dXN0ZWRJbW0zMihvdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZihJ
bmRleGluZ0hlYWRlcikpLAorICAgICAgICAgICAgc3RvcmFnZUdQUik7CiAgICAgfSBlbHNlCiAg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAKQEAgLTEy
NywxNCArMTI3LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUK
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdSYXdPYmplY3QsIHJlc3VsdEdQ
Uiwgc3RvcmFnZUdQUiwKICAgICAgICAgc3RydWN0dXJlLCB2ZWN0b3JMZW5ndGgpKTsKIAotICAg
IGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgJiYgbnVtRWxlbWVudHMg
PCB2ZWN0b3JMZW5ndGgpIHsKKyAgICBpZiAobnVtRWxlbWVudHMgPCB2ZWN0b3JMZW5ndGgpIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3
aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGhhc0Rv
dWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBzaXplb2YoZG91YmxlKSAqIGkpKTsKICNlbHNlCiAgICAgICAgIEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IgdmFsdWU7Ci0gICAgICAgIHZhbHVlLmFzSW50NjQgPSBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikpOworICAgICAgICBpZiAoaGFzRG91
YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgdmFsdWUuYXNJbnQ2
NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFO
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQgPSBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7
IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVz
dGVkSW1tMzIodmFsdWUuYXNCaXRzLnRhZyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIHNpemVvZihkb3VibGUpICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMih2YWx1
ZS5hc0JpdHMucGF5bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNp
emVvZihkb3VibGUpICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSkpOwpAQCAtNjY5MiwxOCArNjY5OCwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDMo
dGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBH
UFJSZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5n
cHIoKTsKICAgICAgICAgCiAgICAgQVNTRVJUKCFub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3Vz
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGluZUNhcGFj
aXR5ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAg
ICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPQotICAgICAgICBlbWl0QWxsb2Nh
dGVCYXNpY1N0b3JhZ2UoCi0gICAgICAgICAgICBUcnVzdGVkSW1tMzIoaW5pdGlhbE91dE9mTGlu
ZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQu
YWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHNjcmF0Y2hHUFIxKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICBtX2ppdC5tb3ZlKAorICAgICAgICBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cigmbV9qaXQudm0oKS0+aGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlE
YXRhKHNpemUpKSwKKyAgICAgICAgc2NyYXRjaEdQUjIpOworICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93UGF0aDsKKyAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOworICAgIG1faml0LmFkZFB0cihKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTMyKHNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRj
aEdQUjEpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIxKSk7CkBAIC02NzM4LDE2ICs2NzUwLDIx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBTdG9yYWdl
T3BlcmFuZCBvbGRTdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBvbGRTdG9yYWdlR1BSID0gb2xkU3RvcmFnZS5n
cHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIoKTsKLSAgICAgICAgCi0gICAgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGggPQotICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1
c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSk7Ci0KLSAgICBtX2ppdC5hZGRQdHIoSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQ
UjEpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOworICAgIAorICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBtX2ppdC5tb3ZlKAorICAgICAg
ICBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cigmbV9qaXQudm0oKS0+aGVhcC5hbGxvY2F0b3JG
b3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpKSwKKyAgICAgICAgc2NyYXRjaEdQUjIpOworICAgIG1f
aml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBz
bG93UGF0aCk7CisgICAgCisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
MzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7CiAgICAg
ICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwoc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BS
MSwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTQsNyArNTE0LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHB1YmxpY0xlbmd0aCA9IHJlc3VsdEFycmF5LnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBwdWJsaWNM
ZW5ndGgpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPQorICAg
ICAgICAgICAgICAgICAgICAgICAgQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxl
bmd0aChzdHJ1Y3R1cmUsIHB1YmxpY0xlbmd0aCk7CiAKICAgICAgICAgICAgICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGluZGV4VUlEID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5pbmRleC5pbXBs
KCk7CiAgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbnB1dFVJRCA9IHZt
KCkucHJvcGVydHlOYW1lcy0+aW5wdXQuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzY5LDcgKzM3NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNpemUsIG1f
b3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6ZShtaW5DYXBhY2l0
eSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZmFzdE9iamVjdCA9IGFsbG9jYXRlVmFy
aWFibGVTaXplZE9iamVjdDxEaXJlY3RBcmd1bWVudHM+KAotICAgICAgICAgICAgICAgIHNpemUs
IHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpOworICAgICAgICAgICAgICAg
IG1fb3V0Lnplcm9FeHRQdHIoc2l6ZSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xv
d1BhdGgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0
aC52YWx1ZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbGVuZ3RoKTsKQEAg
LTQwNjUsOSArNDA2NSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZs
eVNpemUgPSBtX291dC5hZGQoCiAgICAgICAgICAgICAgICAgcGF5bG9hZFNpemUsIG1fb3V0LmNv
bnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5k
KGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSBhbGxvY2F0b3Ig
PSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgICAgIHZtKCkuaGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAg
TFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChhbGxvY2F0b3IsIGZhaWxD
YXNlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0
LnN1YihlbmRPZlN0b3JhZ2UsIHBheWxvYWRTaXplKTsKKyAgICAgICAgICAgIExWYWx1ZSBidXR0
ZXJmbHkgPSBtX291dC5hZGQoc3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVv
ZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIG9i
amVjdCA9IGFsbG9jYXRlT2JqZWN0PEpTQXJyYXk+KHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBmYWls
Q2FzZSk7CiAgICAgICAgICAgICAKQEAgLTY5MjIsMTEgKzY5MjQsMTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdl
QW5kR2V0RW5kKGJ1dHRlcmZseVNpemUsIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKAorICAgICAgICAgICAgICAgICAg
ICBhbGxvY2F0b3JGb3JTaXplKHZtKCkuaGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwg
YnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpLAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCk7
CiAKICAgICAgICAgICAgICAgICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0gbV9vdXQuYWRk
KAotICAgICAgICAgICAgICAgICAgICBtX291dC5zdWIoZW5kT2ZTdG9yYWdlLCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KHNpemVvZihJbmRleGluZ0hlYWRlcikgLSBpbmRleGluZ0hlYWRlclNpemUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhcnRPZlN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwog
CiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGZhc3RCdXR0ZXJm
bHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAg
ICAKQEAgLTc3MjAsMTAgKzc3MjUsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5pdGlhbGl6
ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgTFZhbHVlIHZlY3Rvckxl
bmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAgICAgIGlmICghaGFzRG91YmxlKGlu
ZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBhbHJlYWR5IGluaXRpYWxpemVk
IGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShpbmRl
eGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9j
YXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOwogCiAgICAgICAgIC8v
IERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFOLgogICAgICAgICBMQmFzaWNCbG9j
ayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03NzM4LDkgKzc3NDQsNyBAQCBwcml2
YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkoSW50MzIsIG9yaWdpbmFsSW5k
ZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBv
cmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwKLSAg
ICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0
QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291dC5zdG9yZTY0KGhvbGUsIFR5cGVk
UG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9p
bnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5leHRJbmRleCA9IG1fb3V0LnN1Yihp
bmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGlu
ZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03ODAxLDEyICs3ODA1LDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZW5k
T2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBt
X291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0
aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVzICogc2l6ZW9m
KEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVh
cC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5dGVzKTsKKyAgICAgICAgTFZhbHVl
IHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxs
b2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFz
dEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5j
b25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CisgICAg
ICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgCiAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC04Mzc2LDcgKzgzODEsNyBAQCBw
cml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0KIAotICAgIExW
YWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
CisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxv
Y2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gbV9vdXQu
bmV3QmxvY2soKTsKICAgICAKQEAgLTgzOTcsNyArODQwMiw3IEBAIHByaXZhdGU6CiAgICAgICAg
IG1fb3V0LnN0b3JlUHRyKAogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihyZXN1bHQsIG1faGVh
cHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAgICAgICAgICBhbGxvY2F0b3IsIG1faGVhcHMu
TWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7Ci0KKyAgICAgICAgCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtODQxMSw3ICs4NDE2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAgICAgICAgIHN0
b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CkBAIC04NDM5LDQ2ICs4NDQ0LDU0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDbGFz
c1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgp
OwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0gICAgTFZh
bHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNpemUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0
aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2UsIExWYWx1ZSBz
aXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
IShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIC0g
MSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAmIChN
YXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXByZWNpc2VT
dGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVlIHN1YnNwYWNl
ID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9mVHlwZTxD
bGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxDYXNlQmxv
Y2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJnZU9yT3ZlcnNp
emVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJn
ZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgdXBy
b3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNl
OjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxv
dyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVjaXNlQ3V0
b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNpemUsIG1f
b3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAgICAgICAg
TFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdElu
dFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291dC5icmFuY2go
aXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVyc2l6ZUNh
c2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrKTsKICAg
ICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAg
ICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBzdWJzcGFj
ZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5kZWRTaXpl
LCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXApKSkp
KTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQz
MihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9jayk7CiAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91bmRlZFNp
emUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAorICAg
ICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoTWFy
a2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxseShsYXJnZUNh
c2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFkZHJlc3MgPSBt
X291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNl
X2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQuemVyb0V4
dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0
KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291dC5sU2hy
KHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpp
bXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxvY2F0b3Ig
PSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGkocG9pbnRl
clR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAgICAgCisgICAg
ICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdl
QWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoTWFy
a2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9vdXQuY29u
c3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVT
aXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBM
VmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExW
YWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgdm0oKS5oZWFw
LnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xvd1BhdGgpOwog
ICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIGJ1dHRl
cmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1NTcsMzQgKzg1NzAsMzQgQEAgcHJp
dmF0ZToKICAgICBBcnJheVZhbHVlcyBhbGxvY2F0ZUpTQXJyYXkoCiAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1FbGVtZW50cywgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
CiAgICAgewotICAgICAgICBBU1NFUlQoCisgICAgICAgIERGR19BU1NFUlQoCisgICAgICAgICAg
ICBtX2dyYXBoLCBtX25vZGUsCiAgICAgICAgICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpCiAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIXN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIG51bUVsZW1lbnRzKTsKKyAgICAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rv
ckxlbmd0aCgwbHUsIG51bUVsZW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRP
ZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJ
bmRleGluZ0hlYWRlcikpLAotICAgICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICBNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRh
KAorICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRl
SGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoCi0gICAgICAgICAgICBl
bmRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxl
bmd0aCkpOworICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9y
YWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAg
IAotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oCi0gICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUg
b2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIHNs
b3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQz
MihudW1FbGVtZW50cyksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KTsKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHZlY3Rvckxlbmd0aCks
IGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgICAg
ICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksCi0gICAgICAg
ICAgICAgICAgICAgIGJ1dHRlcmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllc1tp
XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKworICAgICAgICBMVmFsdWUgaG9sZTsKKyAg
ICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAg
ICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxl
bWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
aG9sZSwgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBBcnJheVZhbHVlcyhvYmplY3QsIGJ1dHRlcmZseSk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2
ZVJvb3RzLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIK
ICNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBVdGlsLmgiCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCkBAIC01MSwxNiArNTIsMTYgQEAgQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJv
b3RzKE1hcgogQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCiB7CiAgICAg
aWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29t
bWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAg
ICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5
ICogc2l6ZW9mKEhlYXBDZWxsKikpOwogfQogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93
KCkKIHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNhcGFj
aXR5ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKLSAgICBKU0NlbGwqKiBu
ZXdSb290cyA9IHN0YXRpY19jYXN0PEpTQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENv
bW1pdChuZXdDYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSkpOwotICAgIG1lbWNweShuZXdSb290
cywgbV9yb290cywgbV9zaXplICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICBIZWFwQ2VsbCoqIG5l
d1Jvb3RzID0gc3RhdGljX2Nhc3Q8SGVhcENlbGwqKj4oT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRD
b21taXQobmV3Q2FwYWNpdHkgKiBzaXplb2YoSGVhcENlbGwqKSkpOworICAgIG1lbWNweShuZXdS
b290cywgbV9yb290cywgbV9zaXplICogc2l6ZW9mKEhlYXBDZWxsKikpOwogICAgIGlmIChtX3Jv
b3RzICE9IG1faW5saW5lUm9vdHMpCi0gICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJl
bGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSk7CisgICAgICAgIE9T
QWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVv
ZihIZWFwQ2VsbCopKTsKICAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgbV9yb290
cyA9IG5ld1Jvb3RzOwogfQpAQCAtNzIsMTMgKzczLDE0IEBAIGlubGluZSB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjpnZW5lcmljQWQKIAogICAgIG1fY29waWVkU3BhY2UtPnBpbklmTmVjZXNzYXJ5
KHApOwogCi0gICAgaWYgKCFIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsICptX2Jsb2Nr
cywgcCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkK
LSAgICAgICAgZ3JvdygpOwotCi0gICAgbV9yb290c1ttX3NpemUrK10gPSBzdGF0aWNfY2FzdDxK
U0NlbGwqPihwKTsKKyAgICBIZWFwVXRpbDo6ZmluZEdDT2JqZWN0UG9pbnRlcnMoCisgICAgICAg
IGZpbHRlciwgKm1fYmxvY2tzLCBwLAorICAgICAgICBbJl0gKHZvaWQqIHApIHsKKyAgICAgICAg
ICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBncm93KCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fcm9vdHNbbV9zaXplKytdID0gYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4ocCk7CisgICAgICAgIH0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJr
SG9vaz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZl
Um9vdHMuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsOCArMzEsOCBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIEhlYXBDZWxsOwogY2xhc3Mg
SklUU3R1YlJvdXRpbmVTZXQ7Ci1jbGFzcyBKU0NlbGw7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJv
b3RzIHsKIHB1YmxpYzoKQEAgLTQ0LDExICs0NCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQo
dm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQm
KTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpOwotICAgIEpTQ2VsbCoqIHJvb3RzKCk7CisgICAg
SGVhcENlbGwqKiByb290cygpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHkgPSAxMjg7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25JbmxpbmVD
YXBhY2l0eSA9IDgxOTIgLyBzaXplb2YoSlNDZWxsKik7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBub25JbmxpbmVDYXBhY2l0eSA9IDgxOTIgLyBzaXplb2YoSGVhcENlbGwqKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KICAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVy
KHZvaWQqLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29rJik7CkBAIC01OCwxMiArNTgsMTIgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIGdyb3coKTsKIAotICAgIEpTQ2VsbCoqIG1fcm9vdHM7
CisgICAgSGVhcENlbGwqKiBtX3Jvb3RzOwogICAgIHNpemVfdCBtX3NpemU7CiAgICAgc2l6ZV90
IG1fY2FwYWNpdHk7CiAgICAgTWFya2VkQmxvY2tTZXQqIG1fYmxvY2tzOwogICAgIENvcGllZFNw
YWNlKiBtX2NvcGllZFNwYWNlOwotICAgIEpTQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBh
Y2l0eV07CisgICAgSGVhcENlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsK
IAogaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCkBAIC03MSw3ICs3MSw3
IEBAIGlubGluZSBzaXplX3QgQ29uc2VydmF0aXZlUm9vdHM6OnNpemUoKQogICAgIHJldHVybiBt
X3NpemU7CiB9CiAKLWlubGluZSBKU0NlbGwqKiBDb25zZXJ2YXRpdmVSb290czo6cm9vdHMoKQor
aW5saW5lIEhlYXBDZWxsKiogQ29uc2VydmF0aXZlUm9vdHM6OnJvb3RzKCkKIHsKICAgICByZXR1
cm4gbV9yb290czsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tl
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5o
CShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9r
ZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw2IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKICAgICBU
eXBlZEFycmF5VmVjdG9yQ29weVRva2VuLAogICAgIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwK
ICAgICBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDEyICs1OTgsNiBAQCB2
b2lkIEhlYXA6OmNvcHlCYWNraW5nU3RvcmVzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgQ29weVdvcmtMaXN0JiB3b3JrTGlzdCA9IGJsb2NrLT53
b3JrTGlzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDb3B5V29ya2xpc3RJdGVt
IGl0ZW0gOiB3b3JrTGlzdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
LnRva2VuKCkgPT0gQnV0dGVyZmx5Q29weVRva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCksIGNvcHlWaXNpdG9yLCBCdXR0ZXJmbHlDb3B5
VG9rZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCktPm1ldGhvZFRhYmxlKCktPmNv
cHlCYWNraW5nU3RvcmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2Vs
bCgpLCBjb3B5VmlzaXRvciwgaXRlbS50b2tlbigpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTEzNDcsOCArMTM0MSwxNSBAQCB2b2lkIEhlYXA6OnJlc2V0QWxsb2NhdG9ycygpCiAK
IHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiB7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAogICAgIEdDUEhBU0UoVXBkYXRlQWxsb2NhdGlv
bkxpbWl0cyk7CiAgICAgCisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygiXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAiLCBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlLCAiXG4iKTsKKyAgICB9CisgICAgCiAgICAgLy8gQ2FsY3VsYXRl
IG91ciBjdXJyZW50IGhlYXAgc2l6ZSB0aHJlc2hvbGQgZm9yIHRoZSBwdXJwb3NlIG9mIGZpZ3Vy
aW5nIG91dCB3aGVuIHdlIHNob3VsZAogICAgIC8vIHJ1biBhbm90aGVyIGNvbGxlY3Rpb24uIFRo
aXMgaXNuJ3QgdGhlIHNhbWUgYXMgZWl0aGVyIHNpemUoKSBvciBjYXBhY2l0eSgpLCB0aG91Z2gg
aXQgc2hvdWxkCiAgICAgLy8gYmUgc29tZXdoZXJlIGJldHdlZW4gdGhlIHR3by4gVGhlIGtleSBp
cyB0byBtYXRjaCB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgY2FsbHMgdG8KQEAgLTEz
NjQsNiArMTM2NSw4IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAgICAg
Ly8gb2YgZnJhZ21lbnRhdGlvbiwgdGhpcyBtYXkgYmUgc3Vic3RhbnRpYWwuIEZvcnR1bmF0ZWx5
LCBtYXJrZWQgc3BhY2UgcmFyZWx5IGZyYWdtZW50cyBiZWNhdXNlCiAgICAgLy8gY2VsbHMgdXN1
YWxseSBoYXZlIGEgbmFycm93IHJhbmdlIG9mIHNpemVzLiBTbywgdGhlIHVuZGVyZXN0aW1hdGlv
biBpcyBwcm9iYWJseSBPSy4KICAgICBjdXJyZW50SGVhcFNpemUgKz0gbV90b3RhbEJ5dGVzVmlz
aXRlZDsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygidG90YWxCeXRlc1Zpc2l0
ZWQgPSAiLCBtX3RvdGFsQnl0ZXNWaXNpdGVkLCAiLCBjdXJyZW50SGVhcFNpemUgPSAiLCBjdXJy
ZW50SGVhcFNpemUsICJcbiIpOwogCiAgICAgLy8gRm9yIGNvcGllZCBzcGFjZSwgd2UgdXNlIHRo
ZSBjYXBhY2l0eSBvZiBzdG9yYWdlIHNwYWNlLiBUaGlzIGlzIGJlY2F1c2UgY29waWVkIHNwYWNl
IG1heSBnZXQKICAgICAvLyBiYWRseSBmcmFnbWVudGVkIGJldHdlZW4gZnVsbCBjb2xsZWN0aW9u
cy4gVGhpcyBhcmlzZXMgd2hlbiBlYWNoIGVkZW4gY29sbGVjdGlvbiBldmFjdWF0ZXMKQEAgLTEz
NzksMTAgKzEzODIsMTUgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjY4CiAgICAg
QVNTRVJUKG1fdG90YWxCeXRlc0NvcGllZCA8PSBtX3N0b3JhZ2VTcGFjZS5zaXplKCkpOwogICAg
IGN1cnJlbnRIZWFwU2l6ZSArPSBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpOworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJzdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSA9ICIsIG1f
c3RvcmFnZVNwYWNlLmNhcGFjaXR5KCksICIsIGN1cnJlbnRIZWFwU2l6ZSA9ICIsIGN1cnJlbnRI
ZWFwU2l6ZSwgIlxuIik7CiAKICAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIGVuc3VyZSB0
aGF0IGV4dHJhTWVtb3J5U2l6ZSgpIGVuZHMgdXAgY29ycmVzcG9uZGluZyB0byBhbGxvY2F0aW9u
LXRpbWUKICAgICAvLyBleHRyYSBtZW1vcnkgcmVwb3J0aW5nLgogICAgIGN1cnJlbnRIZWFwU2l6
ZSArPSBleHRyYU1lbW9yeVNpemUoKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJleHRyYU1lbW9yeVNpemUoKSA9ICIsIGV4dHJhTWVtb3J5U2l6ZSgpLCAiLCBjdXJyZW50
SGVhcFNpemUgPSAiLCBjdXJyZW50SGVhcFNpemUsICJcbiIpOwogICAgIAogICAgIGlmIChPcHRp
b25zOjpnY01heEhlYXBTaXplKCkgJiYgY3VycmVudEhlYXBTaXplID4gT3B0aW9uczo6Z2NNYXhI
ZWFwU2l6ZSgpKQogICAgICAgICBIZWFwU3RhdGlzdGljczo6ZXhpdFdpdGhGYWlsdXJlKCk7CkBA
IC0xMzkyLDI5ICsxNDAwLDM4IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygp
CiAgICAgICAgIC8vIHRoZSBuZXcgYWxsb2NhdGlvbiBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVu
dCBzaXplIG9mIHRoZSBoZWFwLCB3aXRoIGEKICAgICAgICAgLy8gZml4ZWQgbWluaW11bS4KICAg
ICAgICAgbV9tYXhIZWFwU2l6ZSA9IG1heChtaW5IZWFwU2l6ZShtX2hlYXBUeXBlLCBtX3JhbVNp
emUpLCBwcm9wb3J0aW9uYWxIZWFwU2l6ZShjdXJyZW50SGVhcFNpemUsIG1fcmFtU2l6ZSkpOwor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkZ1bGw6IG1heEhlYXBT
aXplID0gIiwgbV9tYXhIZWFwU2l6ZSwgIlxuIik7CiAgICAgICAgIG1fbWF4RWRlblNpemUgPSBt
X21heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIkZ1bGw6IG1heEVkZW5TaXplID0gIiwgbV9tYXhFZGVuU2l6ZSwg
IlxuIik7CiAgICAgICAgIG1fc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0ID0gY3VycmVudEhlYXBT
aXplOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkZ1bGw6IHNp
emVBZnRlckxhc3RGdWxsQ29sbGVjdCA9ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7CiAgICAg
ICAgIG1fYnl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxsQ29sbGVjdCA9IDA7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRnVsbDogYnl0ZXNBYmFuZG9uZWRTaW5j
ZUxhc3RGdWxsQ29sbGVjdCA9ICIsIDAsICJcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLSAgICAgICAgCiAgICAgICAgIEFTU0VS
VChjdXJyZW50SGVhcFNpemUgPj0gbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCk7Ci0gICAgICAgIG1f
bWF4RWRlblNpemUgPSBtX21heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgICAgICAv
LyBUaGVvcmV0aWNhbGx5LCB3ZSBzaG91bGRuJ3QgZXZlciBzY2FuIG1vcmUgbWVtb3J5IHRoYW4g
dGhlIGhlYXAgc2l6ZSB3ZSBwbGFubmVkIHRvIGhhdmUuCisgICAgICAgIC8vIEJ1dCB3ZSBhcmUg
c2xvcHB5LCBzbyB3ZSBoYXZlIHRvIGRlZmVuZCBhZ2FpbnN0IHRoZSBvdmVyZmxvdy4KKyAgICAg
ICAgbV9tYXhFZGVuU2l6ZSA9IGN1cnJlbnRIZWFwU2l6ZSA+IG1fbWF4SGVhcFNpemUgPyAwIDog
bV9tYXhIZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBkYXRhTG9nKCJFZGVuOiBtYXhFZGVuU2l6ZSA9ICIsIG1fbWF4RWRlblNpemUs
ICJcbiIpOwogICAgICAgICBtX3NpemVBZnRlckxhc3RFZGVuQ29sbGVjdCA9IGN1cnJlbnRIZWFw
U2l6ZTsKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIk1heCBo
ZWFwIHNpemU6ICIsIG1fbWF4SGVhcFNpemUsICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygi
Q3VycmVudCBoZWFwIHNpemU6ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7Ci0gICAgICAgICAg
ICBkYXRhTG9nKCJTaXplIGFmdGVyIGxhc3QgZWRlbiBjb2xsZWN0aW9uOiAiLCBtX3NpemVBZnRl
ckxhc3RFZGVuQ29sbGVjdCwgIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZG91YmxlIGVkZW5U
b09sZEdlbmVyYXRpb25SYXRpbyA9IChkb3VibGUpbV9tYXhFZGVuU2l6ZSAvIChkb3VibGUpbV9t
YXhIZWFwU2l6ZTsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJF
ZGVuIHRvIG9sZCBnZW5lcmF0aW9uIHJhdGlvOiAiLCBlZGVuVG9PbGRHZW5lcmF0aW9uUmF0aW8s
ICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiRWRlbjogc2l6ZUFmdGVyTGFzdEVkZW5Db2xs
ZWN0ID0gIiwgY3VycmVudEhlYXBTaXplLCAiXG4iKTsKKyAgICAgICAgZG91YmxlIGVkZW5Ub09s
ZEdlbmVyYXRpb25SYXRpbyA9IChkb3VibGUpbV9tYXhFZGVuU2l6ZSAvIChkb3VibGUpbV9tYXhI
ZWFwU2l6ZTsKICAgICAgICAgZG91YmxlIG1pbkVkZW5Ub09sZEdlbmVyYXRpb25SYXRpbyA9IDEu
MCAvIDMuMDsKICAgICAgICAgaWYgKGVkZW5Ub09sZEdlbmVyYXRpb25SYXRpbyA8IG1pbkVkZW5U
b09sZEdlbmVyYXRpb25SYXRpbykKICAgICAgICAgICAgIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlv
biA9IHRydWU7CiAgICAgICAgIC8vIFRoaXMgc2VlbXMgc3VzcGVjdCBhdCBmaXJzdCwgYnV0IHdo
YXQgaXQgZG9lcyBpcyBlbnN1cmUgdGhhdCB0aGUgbnVyc2VyeSBzaXplIGlzIGZpeGVkLgogICAg
ICAgICBtX21heEhlYXBTaXplICs9IGN1cnJlbnRIZWFwU2l6ZSAtIG1fc2l6ZUFmdGVyTGFzdENv
bGxlY3Q7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRWRlbjog
bWF4SGVhcFNpemUgPSAiLCBtX21heEhlYXBTaXplLCAiXG4iKTsKICAgICAgICAgbV9tYXhFZGVu
U2l6ZSA9IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRWRlbjogbWF4RWRlblNpemUgPSAiLCBtX21heEVk
ZW5TaXplLCAiXG4iKTsKICAgICAgICAgaWYgKG1fZnVsbEFjdGl2aXR5Q2FsbGJhY2spIHsKICAg
ICAgICAgICAgIEFTU0VSVChjdXJyZW50SGVhcFNpemUgPj0gbV9zaXplQWZ0ZXJMYXN0RnVsbENv
bGxlY3QpOwogICAgICAgICAgICAgbV9mdWxsQWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUo
Y3VycmVudEhlYXBTaXplIC0gbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3QpOwpAQCAtMTQyMiw2
ICsxNDM5LDggQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICB9CiAK
ICAgICBtX3NpemVBZnRlckxhc3RDb2xsZWN0ID0gY3VycmVudEhlYXBTaXplOworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJzaXplQWZ0ZXJMYXN0Q29sbGVjdCA9ICIsIG1fc2l6
ZUFmdGVyTGFzdENvbGxlY3QsICJcbiIpOwogICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUg
PSAwOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEzICs4MywxNSBAQCB0eXBlZGVmIEhhc2hD
b3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlCiAKIGVudW0gSGVhcFR5cGUgeyBTbWFsbEhlYXAs
IExhcmdlSGVhcCB9OwogCitjbGFzcyBIZWFwVXRpbDsKKwogY2xhc3MgSGVhcCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSGVhcCk7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsK
ICAgICBmcmllbmQgY2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKICAgICBzdGF0aWMgSGVhcCog
aGVhcChjb25zdCBKU1ZhbHVlKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZhbHVlcwotICAgIHN0YXRp
YyBIZWFwKiBoZWFwKGNvbnN0IEpTQ2VsbCopOworICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0
IEhlYXBDZWxsKik7CiAKICAgICAvLyBUaGlzIGNvbnN0YW50IGRldGVybWluZXMgaG93IG1hbnkg
YmxvY2tzIHdlIGl0ZXJhdGUgYmV0d2VlbiBjaGVja3Mgb2Ygb3VyIAogICAgIC8vIGRlYWRsaW5l
IHdoZW4gY2FsbGluZyBIZWFwOjppc1BhZ2VkT3V0LiBEZWNyZWFzaW5nIGl0IHdpbGwgY2F1c2Ug
dXMgdG8gZGV0ZWN0IApAQCAtMTAyLDExICsxMDQsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgc2V0TWFy
a2VkKGNvbnN0IHZvaWQqKTsKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBydW4gYWZ0
ZXIgc3RvcEFsbG9jYXRpb24oKSBpcyBjYWxsZWQgYW5kIAotICAgIC8vIGJlZm9yZSBsaXZlbmVz
cyBkYXRhIGlzIGNsZWFyZWQgdG8gYmUgYWNjdXJhdGUuCi0gICAgc3RhdGljIGJvb2wgaXNQb2lu
dGVyR0NPYmplY3QoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIHZvaWQqIHBvaW50
ZXIpOwotICAgIHN0YXRpYyBib29sIGlzVmFsdWVHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIsIE1h
cmtlZEJsb2NrU2V0JiwgSlNWYWx1ZSk7Ci0KICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBK
U0NlbGwqKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsK
ICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKQEAgLTE1MCw3
ICsxNDcsMTEgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2Jq
ZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNl
LmFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZv
ck9iamVjdFdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFj
ZS5kZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENsYXNzVHlwZT4gTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6
ZV90IGJ5dGVzKTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvckF1eGlsaWFyeURh
dGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmF1eGlsaWFyeUFsbG9jYXRv
ckZvcihieXRlcyk7IH0KICAgICBDb3BpZWRBbGxvY2F0b3ImIHN0b3JhZ2VBbGxvY2F0b3IoKSB7
IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxvY2F0b3IoKTsgfQorICAgIHZvaWQqIGFsbG9jYXRl
QXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlB
bGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9s
ZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgQ2hlY2tlZEJvb2xl
YW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2b2lk
KiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgdm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CiAgICAgdm9pZCBhc2NyaWJlT3du
ZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7CkBAIC0yNjcsNiArMjY4LDcgQEAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgR0NMb2dnaW5nOwogICAgIGZyaWVuZCBjbGFzcyBHQ1Ro
cmVhZDsKICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OworICAgIGZyaWVuZCBjbGFzcyBIZWFw
VXRpbDsKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogICAgIGZyaWVuZCBjbGFzcyBK
SVRTdHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAy
MDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3B5QmFycmllci5oIgog
I2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgogI2luY2x1ZGUg
IkpTQ2VsbC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHR5cGVfdHJhaXRz
PgpAQCAtNTksNyArNjAsNyBAQCBpbmxpbmUgYm9vbCBIZWFwOjppc0NvbGxlY3RpbmcoKQogICAg
IHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24gfHwgbV9vcGVy
YXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uOwogfQogCi1pbmxpbmUgSGVhcCogSGVh
cDo6aGVhcChjb25zdCBKU0NlbGwqIGNlbGwpCitpbmxpbmUgSGVhcCogSGVhcDo6aGVhcChjb25z
dCBIZWFwQ2VsbCogY2VsbCkKIHsKICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNl
bGwpLT5oZWFwKCk7CiB9CkBAIC0xOTksNyArMjAwLDcgQEAgaW5saW5lIHZvaWQqIEhlYXA6OmFs
bG9jYXRlV2l0aG91dERlc3RydQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci12
b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9p
ZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogewogICAgIC8vIEpT
Q2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBk
ZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VS
VCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVG
bGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NU
eXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMTAsNyArMjExLDcgQEAg
dm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IAogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBDbGFzc1R5cGU+Ci1NYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNl
Rm9yT2JqZWN0T2ZUeXBlKCkKK2lubGluZSBNYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1
YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKCkKIHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4
cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUg
ZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KICAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRz
RGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0lt
bW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVP
YmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjIxLDcgKzIyMiw3IEBAIE1hcmtlZFNwYWNlOjpTdWJzcGFj
ZSYgSGVhcDo6c3Vic3BhY2VGb3IKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgot
TWFya2VkQWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5
dGVzKQoraW5saW5lIE1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZU
eXBlKHNpemVfdCBieXRlcykKIHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMg
b2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBK
U0Rlc3RydWN0aWJsZU9iamVjdC4KICAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1
Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFs
KSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+
Ojp2YWx1ZSkpOwpAQCAtMjMxLDYgKzIzMiwzNyBAQCBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFs
bG9jYXRvckZvck9iamVjCiAgICAgcmV0dXJuIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0
cnVjdG9yKGJ5dGVzKTsKIH0KIAoraW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5
KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3Vs
dCA9IG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVBdXhpbGlhcnkoYnl0ZXMpOworI2lmIEVOQUJMRShB
TExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBi
eXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCBy
ZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5kaWYK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVB
dXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9p
ZCogcmVzdWx0ID0gbV9vYmplY3RTcGFjZS50cnlBbGxvY2F0ZUF1eGlsaWFyeShieXRlcyk7Cisj
aWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9j
YXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGludGVu
ZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVy
KTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBIZWFwOjp0
cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogb2xkQmFz
ZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworICAgIHZvaWQqIG5ld0Jhc2Ug
PSB0cnlBbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCBuZXdTaXplKTsKKyAgICBpZiAo
IW5ld0Jhc2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIG1lbWNweShuZXdCYXNlLCBv
bGRCYXNlLCBvbGRTaXplKTsKKyAgICByZXR1cm4gbmV3QmFzZTsKK30KKwogaW5saW5lIENoZWNr
ZWRCb29sZWFuIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIs
IHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKIHsKICAgICBDaGVja2VkQm9vbGVhbiByZXN1
bHQgPSBtX3N0b3JhZ2VTcGFjZS50cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKTsKQEAgLTM1NCwz
MyArMzg2LDYgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGlkRnJlZUJsb2NrKHNpemVfdCBjYQogI2Vu
ZGlmCiB9CiAKLWlubGluZSBib29sIEhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KFRpbnlCbG9vbUZp
bHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCwgdm9pZCogcG9pbnRl
cikKLXsKLSAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxvY2s6OmJsb2NrRm9y
KHBvaW50ZXIpOwotICAgIGlmIChmaWx0ZXIucnVsZU91dChiaXR3aXNlX2Nhc3Q8Qml0cz4oY2Fu
ZGlkYXRlKSkpIHsKLSAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1hcmtlZEJsb2NrU2V0
LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlu
cyhjYW5kaWRhdGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNhbmRpZGF0
ZS0+aXNMaXZlQ2VsbChwb2ludGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIEhlYXA6OmlzVmFsdWVHQ09iamVjdChUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBpc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBz
dGF0aWNfY2FzdDx2b2lkKj4odmFsdWUuYXNDZWxsKCkpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBIZWFwSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwVXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBVdGlsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFV0aWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQXJlIHlvdSB0aXJlZCBv
ZiB3YWl0aW5nIGZvciBhbGwgb2YgV2ViS2l0IHRvIGJ1aWxkIGJlY2F1c2UgeW91IGNoYW5nZWQg
dGhlIGltcGxlbWVudGF0aW9uIG9mIGEKKy8vIGZ1bmN0aW9uIGluIEhlYXBJbmxpbmVzLmg/ICBE
b2VzIGl0IGJvdGhlciB5b3UgdGhhdCB5b3UncmUgd2FpdGluZyBvbiByZWJ1aWxkaW5nIHRoZSBK
UyBET00KKy8vIGJpbmRpbmdzIGV2ZW4gdGhvdWdoIHlvdXIgY2hhbmdlIGlzIGluIGEgZnVuY3Rp
b24gY2FsbGVkIGZyb20gb25seSAyIC5jcHAgZmlsZXM/ICBUaGVuIEhlYXBVdGlsLmgKKy8vIGlz
IGZvciB5b3UhICBFdmVyeXRoaW5nIGluIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGEgc3RhdGljIG1l
dGhvZCB0aGF0IHRha2VzIGEgSGVhcCYgaWYgbmVlZGVkLgorLy8gVGhpcyBpcyBhIGZyaWVuZCBv
ZiBIZWFwLCBzbyB5b3UgY2FuIGFjY2VzcyBhbGwgb2YgSGVhcCdzIHByaXZhdGVzLgorLy8KKy8v
IFRoaXMgZW5kcyB1cCBiZWluZyBhbiBpc3N1ZSBiZWNhdXNlIEhlYXAgZXhwb3NlcyBhIGxvdCBv
ZiBtZXRob2RzIHRoYXQgb3VnaHQgdG8gYmUgaW5saW5lIGZvcgorLy8gcGVyZm9ybWFuY2Ugb3Ig
dGhhdCBtdXN0IGJlIGlubGluZSBiZWNhdXNlIHRoZXkgYXJlIHRlbXBsYXRlcy4gIFRoaXMgY2xh
c3Mgb3VnaHQgdG8gY29udGFpbgorLy8gbWV0aG9kcyB0aGF0IGFyZSB1c2VkIGZvciB0aGUgaW1w
bGVtZW50YXRpb24gb2YgdGhlIGNvbGxlY3Rvciwgb3IgZm9yIHVudXN1YWwgY2xpZW50cyB0aGF0
IG5lZWQKKy8vIHRvIHJlYWNoIGRlZXAgaW50byB0aGUgY29sbGVjdG9yIGZvciBzb21lIHJlYXNv
bi4gIERvbid0IHB1dCB0aGluZ3MgaW4gaGVyZSB0aGF0IHdvdWxkIGNhdXNlIHlvdQorLy8gdG8g
aGF2ZSB0byBpbmNsdWRlIGl0IGZyb20gbW9yZSB0aGFuIGEgaGFuZGZ1bCBvZiBwbGFjZXMsIHNp
bmNlIHRoYXQgd291bGQgZGVmZWF0IHRoZSBwdXJwb3NlLgorLy8gVGhpcyBjbGFzcyBpc24ndCBo
ZXJlIHRvIGxvb2sgcHJldHR5LiAgSXQncyB0byBsZXQgdXMgaGFjayB0aGUgR0MgbW9yZSBlYXNp
bHkhCisKK2NsYXNzIEhlYXBVdGlsIHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG11
c3QgYmUgcnVuIGFmdGVyIHN0b3BBbGxvY2F0aW9uKCkgaXMgY2FsbGVkIGFuZCAKKyAgICAvLyBi
ZWZvcmUgbGl2ZW5lc3MgZGF0YSBpcyBjbGVhcmVkIHRvIGJlIGFjY3VyYXRlLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZmluZEdDT2JqZWN0UG9pbnRlcnMo
CisgICAgICAgIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRC
bG9ja1NldCwgdm9pZCogcGFzc2VkUG9pbnRlciwKKyAgICAgICAgY29uc3QgRnVuYyYgZnVuYykK
KyAgICB7CisgICAgICAgIGNoYXIqIHBvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocGFzc2Vk
UG9pbnRlcik7CisgICAgCisgICAgICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRC
bG9jazo6YmxvY2tGb3IocG9pbnRlcik7CisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIGEg
YnV0dGVyZmx5IHBvaW50ZXIgdG8gcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGEgYnV0dGVyZmx5LiBD
aGVjayB0aGlzIG5vdy4KKyAgICAgICAgaWYgKHBvaW50ZXIgPD0gYml0d2lzZV9jYXN0PGNoYXIq
PihjYW5kaWRhdGUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAgICAgLy8g
V2UgbWF5IGJlIGludGVyZXN0ZWQgaW4gdGhlIGxhc3QgY2VsbCBvZiB0aGUgcHJldmlvdXMgTWFy
a2VkQmxvY2suCisgICAgICAgICAgICBjaGFyKiBwcmV2aW91c1BvaW50ZXIgPSBwb2ludGVyIC0g
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIDE7CisgICAgICAgICAgICBNYXJrZWRCbG9jayogcHJl
dmlvdXNDYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocHJldmlvdXNQb2ludGVyKTsK
KyAgICAgICAgICAgIGlmICghZmlsdGVyLnJ1bGVPdXQoYml0d2lzZV9jYXN0PEJpdHM+KHByZXZp
b3VzQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAmJiBtYXJrZWRCbG9ja1NldC5zZXQoKS5j
b250YWlucyhwcmV2aW91c0NhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAmJiBwcmV2aW91c0Nh
bmRpZGF0ZS0+Y2VsbEtpbmQoKSA9PSBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSB7CisgICAgICAgICAg
ICAgICAgcHJldmlvdXNQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHByZXZpb3VzQ2FuZGlk
YXRlLT5jZWxsQWxpZ24ocHJldmlvdXNQb2ludGVyKSk7CisgICAgICAgICAgICAgICAgaWYgKHBy
ZXZpb3VzQ2FuZGlkYXRlLT5pc0xpdmVDZWxsKHByZXZpb3VzUG9pbnRlcikpCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmMocHJldmlvdXNQb2ludGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIAorICAgICAgICBpZiAoZmlsdGVyLnJ1bGVPdXQoYml0d2lzZV9jYXN0PEJpdHM+KGNh
bmRpZGF0ZSkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAhbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKCFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlu
cyhjYW5kaWRhdGUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gdHJ5UG9p
bnRlciA9IFsmXSAodm9pZCogcG9pbnRlcikgeworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+
aXNMaXZlQ2VsbChwb2ludGVyKSkKKyAgICAgICAgICAgICAgICBmdW5jKHBvaW50ZXIpOworICAg
ICAgICB9OworICAgIAorICAgICAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpID09IEhlYXBD
ZWxsOjpKU0NlbGwpIHsKKyAgICAgICAgICAgIGlmICghTWFya2VkQmxvY2s6OmlzQXRvbUFsaWdu
ZWQocG9pbnRlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
ICAgIHRyeVBvaW50ZXIocG9pbnRlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAKKyAgICAgICAgLy8gQSBidXR0ZXJmbHkgY291bGQgcG9pbnQgaW50byB0aGUgbWlkZGxl
IG9mIGFuIG9iamVjdC4KKyAgICAgICAgY2hhciogYWxpZ25lZFBvaW50ZXIgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oY2FuZGlkYXRlLT5jZWxsQWxpZ24ocG9pbnRlcikpOworICAgICAgICB0cnlQb2lu
dGVyKGFsaWduZWRQb2ludGVyKTsKKyAgICAKKyAgICAgICAgLy8gQWxzbywgYSBidXR0ZXJmbHkg
Y291bGQgcG9pbnQgYXQgdGhlIGVuZCBvZiBhbiBvYmplY3QgcGx1cyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpLiBJbiB0aGF0CisgICAgICAgIC8vIGNhc2UsIHRoaXMgaXMgcG9pbnRpbmcgdG8gdGhl
IG9iamVjdCB0byB0aGUgcmlnaHQgb2YgdGhlIG9uZSB3ZSBzaG91bGQgYmUgbWFya2luZy4KKyAg
ICAgICAgaWYgKGNhbmRpZGF0ZS0+YXRvbU51bWJlcihhbGlnbmVkUG9pbnRlcikgPiBNYXJrZWRC
bG9jazo6Zmlyc3RBdG9tKCkKKyAgICAgICAgICAgICYmIHBvaW50ZXIgPD0gYWxpZ25lZFBvaW50
ZXIgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKQorICAgICAgICAgICAgdHJ5UG9pbnRlcihhbGln
bmVkUG9pbnRlciAtIGNhbmRpZGF0ZS0+Y2VsbFNpemUoKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBib29sIGlzUG9pbnRlckdDT2JqZWN0SlNDZWxsKAorICAgICAgICBUaW55Qmxvb21GaWx0
ZXIgZmlsdGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIGNvbnN0IHZvaWQqIHBv
aW50ZXIpCisgICAgeworICAgICAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxv
Y2s6OmJsb2NrRm9yKHBvaW50ZXIpOworICAgICAgICBpZiAoZmlsdGVyLnJ1bGVPdXQoYml0d2lz
ZV9jYXN0PEJpdHM+KGNhbmRpZGF0ZSkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbmRpZGF0
ZSB8fCAhbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghTWFy
a2VkQmxvY2s6OmlzQXRvbUFsaWduZWQocG9pbnRlcikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBpZiAoIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5z
KGNhbmRpZGF0ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpICE9IEhlYXBDZWxsOjpKU0NlbGwpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoIWNhbmRpZGF0ZS0+aXNM
aXZlQ2VsbChwb2ludGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbHVl
R0NPYmplY3QoCisgICAgICAgIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0
JiBtYXJrZWRCbG9ja1NldCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFs
dWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBp
c1BvaW50ZXJHQ09iamVjdEpTQ2VsbChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBzdGF0aWNfY2Fz
dDx2b2lkKj4odmFsdWUuYXNDZWxsKCkpKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQg
TWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+ZGlkUmV0aXJl
QmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMpCiB7CiAgICAg
aWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayA9PSBt
X25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5lIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQogCi1pbmxpbmUg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCitpbmxpbmUg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVf
dCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAgIG1faGVhcC0+
bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiByZXN1bHQgPSB0
cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFtX2N1cnJlbnRC
bG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNp
emVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1
cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKK3sK
KyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xv
d0Nhc2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBib29sIGNyYXNoT25GYWls
dXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdB
UElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKIApAQCAtMTU1LDM4
ICsxNjcsNTYgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKAogICAg
IEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJl
ZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVz
KTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVz
KTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkp
IHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgICAgICByZXN1bHQg
PSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAgICAgaWYgKHJlc3Vs
dCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgQVNTRVJUKCFtX2hl
YXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0gYWxs
b2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAgICBNYXJrZWRCbG9jayog
YmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAoIWJsb2NrKSB7CisgICAg
ICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJlc3VsdCA9IHRyeUFsbG9j
YXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5
dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1NYXJr
ZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBieXRlcykKK3N0
YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKK3sKKyAgICByZXR1cm4gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSk7
Cit9CisKK3NpemVfdCBNYXJrZWRBbGxvY2F0b3I6OmJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCBi
eXRlcykKIHsKICAgICBzaXplX3QgbWluQmxvY2tTaXplID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6
ZTsKLSAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplb2YoTWFya2VkQmxvY2spKSArIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKKyAgICBzaXpl
X3QgbWluQWxsb2NhdGlvblNpemUgPSBibG9ja0hlYWRlclNpemUoKSArIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKICAgICBtaW5BbGxvY2F0
aW9uU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihXVEY6OnBhZ2VTaXplKCksIG1pbkFs
bG9jYXRpb25TaXplKTsKLSAgICBzaXplX3QgYmxvY2tTaXplID0gc3RkOjptYXgobWluQmxvY2tT
aXplLCBtaW5BbGxvY2F0aW9uU2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6
ZSwgbWluQWxsb2NhdGlvblNpemUpOworfQogCi0gICAgc2l6ZV90IGNlbGxTaXplID0gbV9jZWxs
U2l6ZSA/IG1fY2VsbFNpemUgOiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6
OmF0b21TaXplPihieXRlcyk7CitzaXplX3QgTWFya2VkQWxsb2NhdG9yOjpvcHRpbWFsU2l6ZUZv
ckxhcmdlQWxsb2NhdGlvbihzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGJsb2NrU2l6ZUZv
ckJ5dGVzKGJ5dGVzKSAtIGJsb2NrSGVhZGVyU2l6ZSgpOworfQogCi0gICAgcmV0dXJuIE1hcmtl
ZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxsU2l6ZSwgbV9hdHRy
aWJ1dGVzKTsKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2so
c2l6ZV90IGJ5dGVzKQoreworICAgIHNpemVfdCBibG9ja1NpemUgPSBibG9ja1NpemVGb3JCeXRl
cyhieXRlcyk7CisgICAgc2l6ZV90IGNlbGxTaXplID0gbV9jZWxsU2l6ZSA/IG1fY2VsbFNpemUg
OiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7
CisgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tT
aXplLCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6
OmFkZEJsb2NrKE1hcmtlZEJsb2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6
OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0K
ICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVf
dCk7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE1hcmtlZEJsb2Nr
KiB0YWtlTGFzdEFjdGl2ZUJsb2NrKCkKICAgICB7CkBAIC02OCwxMyArNjksMTggQEAgcHVibGlj
OgogICAgIHZvaWQgaW5pdChIZWFwKiwgTWFya2VkU3BhY2UqLCBzaXplX3QgY2VsbFNpemUsIGNv
bnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKIAogICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUg
ZGVhZGxpbmUpOworICAgIAorICAgIHN0YXRpYyBzaXplX3QgYmxvY2tTaXplRm9yQnl0ZXMoc2l6
ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IG9wdGltYWxTaXplRm9y
TGFyZ2VBbGxvY2F0aW9uKHNpemVfdCk7CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9j
YXRlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CisgICAg
dm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lkKiB0
cnlQb3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNp
emVfdCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZvaWQg
cmV0aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBAIC0x
MTMsMjEgKzExOSwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCog
CiAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtl
ZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJsb2Nr
OjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFkoIWhl
YWQpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMp
OworICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBt
ZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0
dXJuIGhlYWQ7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNp
emVfdCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVM
aXN0LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1
bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1l
bXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVh
ZC0+bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsK
LSNlbmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwg
MHhDRCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDIwICsyOSwzOSBAQAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN1cGVy
U2FtcGxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgY29tcHV0
ZUJhbGFuY2UgPSBmYWxzZTsKIHN0YXRpYyBzaXplX3QgYmFsYW5jZTsKIAotTWFya2VkQmxvY2sq
IE1hcmtlZEJsb2NrOjpjcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzKQorc3RhdGljIGJvb2wgcmVzZXRGcmVlQ2VsbHNCYWRseSgpCit7
CisgICAgcmV0dXJuICFBU1NFUlRfRElTQUJMRUQgfHwgT3B0aW9uczo6cmVzZXRGcmVlQ2VsbHNC
YWRseSgpOworfQorCitzdGF0aWMgdm9pZCByZXNldEJhZGx5KHZvaWQqIGJhc2UsIHNpemVfdCBz
aXplKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBzaXplIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsgaS0tOykgeworICAgICAgICBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2UpW2ld
ID0gSlNWYWx1ZTo6ZW5jb2RlKAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PEpTQ2VsbCo+KHN0
YXRpY19jYXN0PGludHB0cl90Pig2NjYgKiA4KSkpOworICAgIH0KK30KKworTWFya2VkQmxvY2sq
IE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JB
dHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQogewogICAgIGlmIChjb21wdXRlQmFsYW5jZSkgewogICAg
ICAgICBiYWxhbmNlKys7CiAgICAgICAgIGlmICghKGJhbGFuY2UgJSAxMCkpCiAgICAgICAgICAg
ICBkYXRhTG9nKCJNYXJrZWRCbG9jayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsKICAgICB9
Ci0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1hbGxv
YyhibG9ja1NpemUsIGNhcGFjaXR5KSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwg
Y2VsbFNpemUsIGF0dHJpYnV0ZXMpOworICAgIHZvaWQqIGJsb2NrU3BhY2UgPSB0cnlGYXN0QWxp
Z25lZE1hbGxvYyhibG9ja1NpemUsIGNhcGFjaXR5KTsKKyAgICBpZiAoIWJsb2NrU3BhY2UpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChyZXNldEZyZWVDZWxsc0JhZGx5KCkpCisg
ICAgICAgIHJlc2V0QmFkbHkoYmxvY2tTcGFjZSwgY2FwYWNpdHkpOworICAgIE1hcmtlZEJsb2Nr
KiBibG9jayA9IG5ldyAoTm90TnVsbCwgYmxvY2tTcGFjZSkgTWFya2VkQmxvY2soYWxsb2NhdG9y
LCBjYXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMpOwogICAgIGhlYXAuZGlkQWxsb2NhdGVC
bG9jayhjYXBhY2l0eSk7CiAgICAgcmV0dXJuIGJsb2NrOwogfQpAQCAtOTIsMTEgKzExMSwxMSBA
QCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2FsbERlc3RydWN0b3IoCiAgICAgY2VsbC0+emFw
KCk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1h
cmtlZEJsb2NrOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBib29sIGNhbGxEZXN0cnVjdG9ycz4KK3Rl
bXBsYXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtlZEJsb2NrOjpT
d2VlcE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJr
ZWRCbG9jazo6UmVzZXRNb2RlIHJlc2V0TW9kZT4KIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJr
ZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCgpCiB7CiAgICAgQVNTRVJUKGJsb2NrU3RhdGUgIT0g
QWxsb2NhdGVkICYmIGJsb2NrU3RhdGUgIT0gRnJlZUxpc3RlZCk7Ci0gICAgQVNTRVJUKCEoIWNh
bGxEZXN0cnVjdG9ycyAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CisgICAgQVNTRVJUKCEo
ZGVzdHJ1Y3Rpb25Nb2RlID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09
IFN3ZWVwT25seSkpOwogCiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlz
IG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZp
bmUsIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQg
dGhlCkBAIC0xMDksMTEgKzEyOCwxMyBAQCBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxv
Y2s6OnNwZWNpCiAKICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0
cjxIZWFwQ2VsbCo+KCZhdG9tcygpW2ldKTsKIAotICAgICAgICBpZiAoY2FsbERlc3RydWN0b3Jz
ICYmIGJsb2NrU3RhdGUgIT0gTmV3KQorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IE5l
ZWRzRGVzdHJ1Y3Rpb24gJiYgYmxvY2tTdGF0ZSAhPSBOZXcpCiAgICAgICAgICAgICBjYWxsRGVz
dHJ1Y3RvcihjZWxsKTsKIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlz
dCkgewogICAgICAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxG
cmVlQ2VsbCo+KGNlbGwpOworICAgICAgICAgICAgaWYgKHJlc2V0TW9kZSA9PSBSZXNldEJhZGx5
KQorICAgICAgICAgICAgICAgIHJlc2V0QmFkbHkoZnJlZUNlbGwsIGNlbGxTaXplKCkpOwogICAg
ICAgICAgICAgZnJlZUNlbGwtPm5leHQgPSBoZWFkOwogICAgICAgICAgICAgaGVhZCA9IGZyZWVD
ZWxsOwogICAgICAgICAgICAgKytjb3VudDsKQEAgLTEzOSwxNyArMTYwLDI1IEBAIE1hcmtlZEJs
b2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXAKICAgICAgICAgcmV0dXJuIEZyZWVMaXN0
KCk7CiAKICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rp
b24pCi0gICAgICAgIHJldHVybiBzd2VlcEhlbHBlcjx0cnVlPihzd2VlcE1vZGUpOwotICAgIHJl
dHVybiBzd2VlcEhlbHBlcjxmYWxzZT4oc3dlZXBNb2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVw
SGVscGVyU2VsZWN0UmVzZXRNb2RlPE5lZWRzRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7CisgICAg
cmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0UmVzZXRNb2RlPERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24+
KHN3ZWVwTW9kZSk7Cit9CisKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1v
ZGU+CitNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnN3ZWVwSGVscGVyU2VsZWN0
UmVzZXRNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCit7CisgICAgaWYgKHJlc2V0RnJlZUNlbGxz
QmFkbHkoKSkKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U3RhdGVBbmRTd2VlcE1v
ZGU8ZGVzdHJ1Y3Rpb25Nb2RlLCBSZXNldEJhZGx5Pihzd2VlcE1vZGUpOworICAgIHJldHVybiBz
d2VlcEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlPGRlc3RydWN0aW9uTW9kZSwgRG9udFJl
c2V0Pihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxib29sIGNhbGxEZXN0cnVjdG9ycz4KLU1h
cmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXBIZWxwZXIoU3dlZXBNb2RlIHN3
ZWVwTW9kZSkKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtl
ZEJsb2NrOjpSZXNldE1vZGUgcmVzZXRNb2RlPgorTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpzd2VlcEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlKFN3ZWVwTW9kZSBzd2Vl
cE1vZGUpCiB7CiAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgY2FzZSBOZXc6CiAgICAgICAg
IEFTU0VSVChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAgcmV0dXJuIHNw
ZWNpYWxpemVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGNhbGxEZXN0cnVjdG9ycz4oKTsK
KyAgICAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGRl
c3RydWN0aW9uTW9kZSwgcmVzZXRNb2RlPigpOwogICAgIGNhc2UgRnJlZUxpc3RlZDoKICAgICAg
ICAgLy8gSGFwcGVucyB3aGVuIGEgYmxvY2sgdHJhbnNpdGlvbnMgdG8gZnVsbHkgYWxsb2NhdGVk
LgogICAgICAgICBBU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7CkBAIC0xNjAs
OCArMTg5LDggQEAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJsb2NrOjpzd2VlcAogICAg
ICAgICByZXR1cm4gRnJlZUxpc3QoKTsKICAgICBjYXNlIE1hcmtlZDoKICAgICAgICAgcmV0dXJu
IHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QKLSAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRT
d2VlcDxNYXJrZWQsIFN3ZWVwVG9GcmVlTGlzdCwgY2FsbERlc3RydWN0b3JzPigpCi0gICAgICAg
ICAgICA6IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcE9ubHksIGNhbGxEZXN0cnVjdG9y
cz4oKTsKKyAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwVG9GcmVl
TGlzdCwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+KCkKKyAgICAgICAgICAgIDogc3BlY2lh
bGl6ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwT25seSwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+
KCk7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjA0MDU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDEyICsxMDksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtdXRh
YmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgTWFy
a2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5
LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKKyAgICAgICAg
c3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFsbG9jYXRvciosIHNp
emVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVz
Jik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtlZEJsb2NrKik7CiAK
ICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CisgICAgICAg
IHZvaWQqIGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogYmxv
Y2tGb3IoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZpcnN0QXRvbSgpOwor
ICAgICAgICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKQEAgLTE4NCwxNSArMTg2LDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRN
YXNrID0gYXRvbVNpemUgLSAxOwogCiAgICAgICAgIGVudW0gQmxvY2tTdGF0ZSB7IE5ldywgRnJl
ZUxpc3RlZCwgQWxsb2NhdGVkLCBNYXJrZWQsIFJldGlyZWQgfTsKLSAgICAgICAgdGVtcGxhdGU8
Ym9vbCBjYWxsRGVzdHJ1Y3RvcnM+IEZyZWVMaXN0IHN3ZWVwSGVscGVyKFN3ZWVwTW9kZSA9IFN3
ZWVwT25seSk7CisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZT4gRnJlZUxpc3Qgc3dl
ZXBIZWxwZXJTZWxlY3RSZXNldE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKKyAgICAgICAg
ZW51bSBSZXNldE1vZGUgeyBEb250UmVzZXQsIFJlc2V0QmFkbHkgfTsKKyAgICAgICAgdGVtcGxh
dGU8RGVzdHJ1Y3Rpb25Nb2RlLCBSZXNldE1vZGU+IEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0
U3RhdGVBbmRTd2VlcE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKIAogICAgICAgICB0eXBl
ZGVmIGNoYXIgQXRvbVthdG9tU2l6ZV07CiAKICAgICAgICAgTWFya2VkQmxvY2soTWFya2VkQWxs
b2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRv
ckF0dHJpYnV0ZXMmKTsKICAgICAgICAgQXRvbSogYXRvbXMoKTsKLSAgICAgICAgc2l6ZV90IGF0
b21OdW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIGNhbGxEZXN0cnVjdG9yKEhlYXBD
ZWxsKik7Ci0gICAgICAgIHRlbXBsYXRlPEJsb2NrU3RhdGUsIFN3ZWVwTW9kZSwgYm9vbCBjYWxs
RGVzdHJ1Y3RvcnM+IEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAoKTsKKyAgICAgICAgdGVtcGxh
dGU8QmxvY2tTdGF0ZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFJlc2V0TW9kZT4gRnJl
ZUxpc3Qgc3BlY2lhbGl6ZWRTd2VlcCgpOwogICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2sq
IG1fcHJldjsKICAgICAgICAgTWFya2VkQmxvY2sqIG1fbmV4dDsKQEAgLTIzNiw2ICsyMzksMTYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0
cz4ocCkgJiBhdG9tQWxpZ25tZW50TWFzayk7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQqIE1h
cmtlZEJsb2NrOjpjZWxsQWxpZ24odm9pZCogcCkKKyAgICB7CisgICAgICAgIEJpdHMgYmFzZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYXRvbXMoKSArIGZpcnN0QXRvbSgpKTsKKyAgICAgICAg
Qml0cyBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPihwKTsKKyAgICAgICAgYml0cyAtPSBi
YXNlOworICAgICAgICBiaXRzIC09IGJpdHMgJSBjZWxsU2l6ZSgpOworICAgICAgICBiaXRzICs9
IGJhc2U7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihiaXRzKTsKKyAg
ICB9CisKICAgICBpbmxpbmUgTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25z
dCB2b2lkKiBwKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2Vk
QmxvY2sqPihyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYmxvY2tNYXNrKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjA0MDU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNjIsMTIgKzYyLDE1IEBAIHB1YmxpYzoKICAgICB+TWFya2VkU3BhY2UoKTsKICAgICB2
b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKKyAgICBzdGF0aWMgc2l6ZV90IG9wdGltYWxT
aXplRm9yKHNpemVfdCk7CisgICAgCiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3Io
c2l6ZV90KTsKICAgICBNYXJrZWRBbGxvY2F0b3ImIGRlc3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6
ZV90KTsKICAgICBNYXJrZWRBbGxvY2F0b3ImIGF1eGlsaWFyeUFsbG9jYXRvckZvcihzaXplX3Qp
OwogICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBh
bGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVBdXhp
bGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOwog
CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhEZXN0cnVjdG9yKCkgeyByZXR1
cm4gbV9kZXN0cnVjdG9yU3BhY2U7IH0KICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3Rz
V2l0aG91dERlc3RydWN0b3IoKSB7IHJldHVybiBtX25vcm1hbFNwYWNlOyB9CkBAIC0xODIsNiAr
MTg1LDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGkKICAgICBy
ZXR1cm4gYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZShieXRlcyk7CiB9CiAK
K2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90IGJ5
dGVzKQoreworICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLnRyeUFsbG9j
YXRlKGJ5dGVzKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lk
IE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAg
ICBmb3JFYWNoU3Vic3BhY2UoCkBAIC0yNTEsNiArMjU5LDE1IEBAIGlubGluZSB2b2lkIE1hcmtl
ZFNwYWNlOjpmb3JFYWNoU3Vic3BhY2UKICAgICBmdW5jKG1fYXV4aWxpYXJ5U3BhY2UsIGF0dHJp
YnV0ZXMpOwogfQogCitBTFdBWVNfSU5MSU5FIHNpemVfdCBNYXJrZWRTcGFjZTo6b3B0aW1hbFNp
emVGb3Ioc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKQor
ICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHByZWNpc2VTdGVwLCBieXRl
cyk7CisgICAgaWYgKGJ5dGVzIDw9IGltcHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihpbXByZWNpc2VTdGVwLCBieXRlcyk7CisgICAgcmV0dXJu
IE1hcmtlZEFsbG9jYXRvcjo6b3B0aW1hbFNpemVGb3JMYXJnZUFsbG9jYXRpb24oYnl0ZXMpOwor
fQorCiBpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9yKFN1
YnNwYWNlJiBzcGFjZSwgc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChieXRlcyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAy
MDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsNiArOTYsOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpk
aWRTdGFydE1hcmtpbmcoKQogewogICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3Mo
KSA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0
eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KKyAgICBlbHNlCisgICAgICAgIHJl
c2V0KCk7CiAKICAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSB2bSgpLmhlYXBQ
cm9maWxlcigpKQogICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBoZWFwUHJvZmlsZXIt
PmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpOwpAQCAtMTE4LDEwICsxMjAsNDIgQEAgdm9pZCBTbG90
VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2soKQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29u
c2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewotICAgIEpTQ2VsbCoqIHJvb3Rz
ID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBIZWFwQ2VsbCoqIHJvb3RzID0gY29u
c2VydmF0aXZlUm9vdHMucm9vdHMoKTsKICAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2ZVJv
b3RzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgYXBwZW5kKHJvb3RzW2ldKTsKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkocm9v
dHNbaV0pOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeShI
ZWFwQ2VsbCogaGVhcENlbGwpCit7CisgICAgaWYgKCFoZWFwQ2VsbCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIEFTU0VSVCghbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24p
OworICAgIAorICAgIGlmIChIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGhlYXBDZWxsKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpi
bG9ja0ZvcihoZWFwQ2VsbCk7CisgICAgc3dpdGNoIChibG9jay0+Y2VsbEtpbmQoKSkgeworICAg
IGNhc2UgSGVhcENlbGw6OkpTQ2VsbDogeworICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRp
Y19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAgICAgCisgICAgICAgIGlmICghanNDZWxs
LT5zdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGpzQ2VsbC0+c2V0
Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisKKyAgICAgICAgYXBwZW5kVG9NYXJrU3Rh
Y2soYmxvY2ssIGpzQ2VsbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgSGVhcENlbGw6OkF1eGlsaWFyeTogeworICAgICAgICBub3RlTGl2ZUF1eGlsaWFyeUNl
bGwoYmxvY2ssIGhlYXBDZWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gfQogfQogCiB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmQoSlNWYWx1ZSB2YWx1ZSkKQEAgLTE2OCwxNyArMjAyLDQ1IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWEKIAogdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQogeworICAgIGFwcGVuZFRvTWFy
a1N0YWNrKE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKSwgY2VsbCk7Cit9CisKK3ZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKE1hcmtlZEJsb2NrKiBibG9jaywgSlNDZWxsKiBj
ZWxsKQorewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFj
ZWxsLT5pc1phcHBlZCgpKTsKLQorICAgIAorICAgIC8vIEZJWE1FOiBUaGVzZSAianVzdCB3b3Jr
IiBiZWNhdXNlIHRoZSBHQyByZXNldHMgdGhlc2UgZmllbGRzIGJlZm9yZSBkb2luZyBhbnl0aGlu
ZyBlbHNlLiBCdXQKKyAgICAvLyB0aGF0IHdvbid0IGJlIHRoZSBjYXNlIHdoZW4gd2UgZG8gY29u
Y3VycmVudCBHQy4KICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5dGVzVmlzaXRlZCArPSBN
YXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7CisgICAgbV9ieXRlc1Zpc2l0
ZWQgKz0gYmxvY2stPmNlbGxTaXplKCk7CisgICAgCiAgICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7
CiAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAgICAgICAgbV9o
ZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2b2lkIFNsb3RWaXNp
dG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAgaWYgKEhlYXA6OnRl
c3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBub3RlTGl2
ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGJhc2UpLCBiaXR3aXNlX2Nhc3Q8
SGVhcENlbGwqPihiYXNlKSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6Om5vdGVMaXZlQXV4aWxp
YXJ5Q2VsbChNYXJrZWRCbG9jayogYmxvY2ssIEhlYXBDZWxsKikKK3sKKyAgICAvLyBXZSBnZXQg
aGVyZSBvbmNlIHBlciBHQyB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzOgorICAgIC8vCisgICAg
Ly8gRWRlbiBjb2xsZWN0aW9uOiBpZiB0aGUgY2VsbCB3YXMgYWxsb2NhdGVkIHNpbmNlIHRoZSBs
YXN0IGNvbGxlY3Rpb24gYW5kIGlzIGxpdmUgc29tZWhvdy4KKyAgICAvLworICAgIC8vIEZ1bGwg
Y29sbGVjdGlvbjogaWYgdGhlIGNlbGwgaXMgbGl2ZSBzb21laG93LgorICAgIAorICAgIG1fdmlz
aXRDb3VudCsrOworICAgIG1fYnl0ZXNWaXNpdGVkICs9IGJsb2NrLT5jZWxsU2l6ZSgpOworfQor
CiBjbGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlIHsKIHB1YmxpYzoKICAgICBTZXRDdXJyZW50Q2Vs
bFNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBKU0NlbGwqIGNlbGwpCkBAIC0yMDIs
OSArMjY0LDkgQEAgcHJpdmF0ZToKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlz
aXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFy
a2VkKGNlbGwpKTsKLQorICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxT
Y29wZSgqdGhpcywgY2VsbCk7Ci0KKyAgICAKICAgICBtX2N1cnJlbnRPYmplY3RDZWxsU3RhdGVC
ZWZvcmVWaXNpdGluZyA9IGNlbGwtPmNlbGxTdGF0ZSgpOwogICAgIGNlbGwtPnNldENlbGxTdGF0
ZShDZWxsU3RhdGU6Ok9sZEJsYWNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzcsOCArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDb25zZXJ2YXRpdmVS
b290czsKIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKIGNsYXNzIEhlYXA7CitjbGFzcyBIZWFw
Q2VsbDsKIGNsYXNzIEhlYXBTbmFwc2hvdEJ1aWxkZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBKSVRXcml0ZUJhcnJpZXI7CitjbGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwogY2xhc3Mg
V2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKQEAgLTEwNSw2ICsxMDcsMTAgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICAKKyAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFi
b3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYg
eW91IGRvbid0IGRvCisgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0
IGVuZCBvZiBHQy4KKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7CiAK
ICAgICB2b2lkIGNvcHlMYXRlcihKU0NlbGwqLCBDb3B5VG9rZW4sIHZvaWQqLCBzaXplX3QpOwog
ICAgIApAQCAtMTI0LDEwICsxMzAsMTMgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFy
YWxsZWxNb2RlRW5hYmxlcjsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVu
ZChKU1ZhbHVlKTsgLy8gVGhpcyBpcyBwcml2YXRlIHRvIGVuY291cmFnZSBjbGllbnRzIHRvIHVz
ZSBXcml0ZUJhcnJpZXI8VD4uCisgICAgdm9pZCBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFw
Q2VsbCopOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpTVmFsdWUpOwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKICAg
ICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOworICAgIHZvaWQgYXBwZW5kVG9NYXJr
U3RhY2soTWFya2VkQmxvY2sqLCBKU0NlbGwqKTsKKyAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5
Q2VsbChNYXJrZWRCbG9jayosIEhlYXBDZWxsKik7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZO
ZWNlc3NhcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDkgQEAKICNpbmNsdWRlICJEZWJ1Z2dlclNj
b3BlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5o
IgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZVBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlSW5saW5lcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNDA1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3MiwxNyArNDcyLDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlYwogICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlT2JqZWN0LCBzdHJ1
Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7CiB9CiAKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLQotICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPiBiYXNlLT5zdHJ1Y3R1cmUo
dm0pLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFs
bG9jYXRvcigpLmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFs
bG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwotICAgIGJhc2UtPnB1dERp
cmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKLX0KLQogQUxXQVlTX0lO
TElORSBzdGF0aWMgYm9vbCBpc1N0cmluZ09yU3ltYm9sKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
cmV0dXJuIHZhbHVlLmlzU3RyaW5nKCkgfHwgdmFsdWUuaXNTeW1ib2woKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDQwNTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIwLDcgKzMyMCw2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
U3RyaWMKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRM
aXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBX
VEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8q
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVj
dCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlW
YWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5U
RVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFu
YWx5emVyLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOSArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1vZHVsZUFuYWx5emVyLmgiCiAKLSNpbmNsdWRl
ICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlUmVjb3JkLmgiCiAjaW5j
bHVkZSAiTW9kdWxlU2NvcGVEYXRhLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNzAsMTMgKzcwLDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBu
b3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgogI2RlZmluZSBN
QVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKIAotLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xF
TiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRl
CisvLyBUaGUgdmFsdWUgQkFTRV9YWFhfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIg
b2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCiAvLyBmb3IgYW4gYXJyYXkgdGhhdCB3
YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEy
MykpCi0jZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQotICAgIAorI2RlZmluZSBCQVNFX0NPTlRJ
R1VPVVNfVkVDVE9SX0xFTiAzVQorI2RlZmluZSBCQVNFX0FSUkFZX1NUT1JBR0VfVkVDVE9SX0xF
TiA0VQorCiAvLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8g
bGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKIC8vIGlzIGFkZGVkLgotI2RlZmlu
ZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQorI2RlZmluZSBGSVJTVF9BUlJBWV9TVE9SQUdFX1ZFQ1RP
Ul9HUk9XIDRVCiAKICNkZWZpbmUgTUlOX0JFWU9ORF9MRU5HVEhfU1BBUlNFX0lOREVYIDEwMDAK
IApAQCAtOTYsNyArOTcsNyBAQCBpbmxpbmUgYm9vbCBpbmRleElzU3VmZmljaWVudGx5QmV5b25k
TGVuCiAgICAgcmV0dXJuIGkgPj0gTUlOX0JFWU9ORF9MRU5HVEhfU1BBUlNFX0lOREVYICYmIGkg
PiBsZW5ndGg7CiB9CiAKLWlubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFy
cmF5KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoraW5saW5lIEluZGV4
aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXlTdG9yYWdlKHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4aW5nSGVhZGVyIHJlc3VsdDsKICAg
ICByZXN1bHQuc2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CkBAIC0xMDQsOSArMTA1LDkgQEAgaW5s
aW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLWlubGluZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1
bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVy
Rm9yQXJyYXlTdG9yYWdlKHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1cm4gaW5kZXhpbmdI
ZWFkZXJGb3JBcnJheShsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAgcmV0dXJuIGluZGV4
aW5nSGVhZGVyRm9yQXJyYXlTdG9yYWdlKGxlbmd0aCwgQkFTRV9BUlJBWV9TVE9SQUdFX1ZFQ1RP
Ul9MRU4pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjksNyArMjksOSBAQAogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJC
dXR0ZXJmbHkuaCIKICNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIk1hcmtl
ZFNwYWNlLmgiCiAjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogCkBAIC01OCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAvLyBXZSBzdGVhbCB0
d28gZmllbGRzIGZyb20gdGhlIGluZGV4aW5nIGhlYWRlcjogdmVjdG9yTGVuZ3RoIGFuZCBsZW5n
dGguCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIo
KS0+cHVibGljTGVuZ3RoKCk7IH0KICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgp
IHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7IH0KLSAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5n
dGgoKTsgfQorICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4
aW5nSGVhZGVyKCktPnZlY3Rvckxlbmd0aCgpOyB9CiAgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgo
dW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldFZlY3Rvckxlbmd0aChsZW5n
dGgpOyB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlIZWFkZXJGcm9tRHVyaW5n
R0MoY29uc3QgQXJyYXlTdG9yYWdlJiBvdGhlcikKQEAgLTk5LDYgKzEwMSw2NiBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwogICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgc2l6ZV90IHRvdGFsU2l6ZUZvcih1bnNpZ25lZCBpbmRleEJpYXMsIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAg
ICByZXR1cm4gQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5
LCB0cnVlLCBzaXplRm9yKHZlY3Rvckxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qg
dG90YWxTaXplKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvdGFsU2l6ZUZvcihtX2luZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgdmVjdG9y
TGVuZ3RoKCkpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgdG90YWxTaXplKFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZShzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgYXZhaWxhYmxlVmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGluZGV4Qmlhcywgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAgICAgIHNpemVf
dCBjZWxsU2l6ZSA9IE1hcmtlZFNwYWNlOjpvcHRpbWFsU2l6ZUZvcih0b3RhbFNpemVGb3IoaW5k
ZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5LCB2ZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgCisgICAg
ICAgIHZlY3Rvckxlbmd0aCA9IChjZWxsU2l6ZSAtIHRvdGFsU2l6ZUZvcihpbmRleEJpYXMsIHBy
b3BlcnR5Q2FwYWNpdHksIDApKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworCisg
ICAgICAgIHJldHVybiB2ZWN0b3JMZW5ndGg7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1bnNp
Z25lZCBhdmFpbGFibGVWZWN0b3JMZW5ndGgodW5zaWduZWQgaW5kZXhCaWFzLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGF2YWlsYWJsZVZlY3Rvckxlbmd0aChpbmRleEJpYXMsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgdmVjdG9yTGVuZ3RoKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXZhaWxh
YmxlVmVjdG9yTGVuZ3RoKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gYXZhaWxhYmxlVmVjdG9yTGVuZ3RoKG1faW5k
ZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5LCB2ZWN0b3JMZW5ndGgpOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBhdmFpbGFibGVWZWN0b3JMZW5ndGgoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdmFpbGFibGVWZWN0
b3JMZW5ndGgoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB2ZWN0b3JMZW5ndGgpOwor
ICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBvcHRpbWFsVmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGluZGV4Qmlhcywgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCkKKyAgICB7CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KEJBU0VfQVJSQVlfU1RP
UkFHRV9WRUNUT1JfTEVOLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gYXZhaWxhYmxl
VmVjdG9yTGVuZ3RoKGluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVuZ3RoKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIG9wdGltYWxWZWN0b3JMZW5ndGgodW5z
aWduZWQgaW5kZXhCaWFzLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgdmVjdG9yTGVu
Z3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wdGltYWxWZWN0b3JMZW5ndGgoaW5kZXhCaWFz
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHZlY3Rvckxlbmd0aCk7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIG9wdGltYWxWZWN0b3JMZW5ndGgoc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcHRp
bWFsVmVjdG9yTGVuZ3RoKG1faW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5LCB2ZWN0b3JMZW5n
dGgpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBvcHRpbWFsVmVjdG9yTGVuZ3RoKFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICBy
ZXR1cm4gb3B0aW1hbFZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCks
IHZlY3Rvckxlbmd0aCk7CisgICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJh
cnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsK
KworLy8gQW4gQXV4aWxpYXJ5IGJhcnJpZXIgaXMgYSBiYXJyaWVyIHRoYXQgZG9lcyBub3QgdHJ5
IHRvIHJlYXNvbiBhYm91dCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGludG8KKy8vIGl0LCBvdGhl
ciB0aGFuIGludGVycHJldGluZyBhIGZhbHNpc2ggdmFsdWUgYXMgbm90IG5lZWQgYSBiYXJyaWVy
LiBJdCdzIE9LIHRvIHVzZSB0aGlzIGZvciBlaXRoZXIKKy8vIEpTQ2VsbHMgb3IgYW55IG90aGVy
IGtpbmQgb2YgZGF0YSwgc28gbG9uZyBhcyBpdCByZXNwb25kcyB0byBvcGVyYXRvciEoKS4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKK3B1YmxpYzoKKyAg
ICBBdXhpbGlhcnlCYXJyaWVyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBBdXhpbGlhcnlCYXJyaWVyKFZNJiwgSlNDZWxsKiwgVSYmKTsKKyAgICAKKyAgICB2b2lk
IGNsZWFyKCkgeyBtX3ZhbHVlID0gVCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICB2b2lkIHNldChWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgY29uc3QgVCYg
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIFQqIHNsb3QoKSB7IHJl
dHVybiAmbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
ICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVSYmIHZhbHVlKSB7IG1fdmFsdWUgPSBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpOyB9CisgICAgCitwcml2YXRlOgorICAgIFQgbV92YWx1ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQXV4aWxp
YXJ5QmFycmllcjxUPjo6QXV4aWxpYXJ5QmFycmllcihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFUm
JiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsKKyAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgordm9pZCBBdXhpbGlhcnlCYXJyaWVyPFQ+OjpzZXQoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBVJiYgdmFsdWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw2ICs5MCwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAx
KTsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdW5zaWduZWQgYXZhaWxh
YmxlQ29udGlndW91c1ZlY3Rvckxlbmd0aChzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgYXZhaWxhYmxlQ29udGlndW91
c1ZlY3Rvckxlbmd0aChTdHJ1Y3R1cmUqLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgIAor
ICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIHVuc2lnbmVkIG9wdGltYWxDb250aWd1b3VzVmVjdG9y
TGVuZ3RoKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgIAogICAgIC8vIFRoaXMgbWV0aG9kIGlz
IGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdzIGhhbmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0
CiAgICAgLy8gdGhlIHdob2xlIHBvaW50IG9mIGJ1dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9p
bnRlciBhcml0aG1ldGljLgogICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIq
IHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHlJbmxpbmVzLmgJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTIgKzM1LDM1IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6
YXZhaWxhYmxlQ29udGlndW91c1ZlY3Rvckxlbmd0aChzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIHNpemVfdCBjZWxsU2l6ZSA9IHRvdGFsU2l6
ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogdmVj
dG9yTGVuZ3RoKTsKKyAgICBjZWxsU2l6ZSA9IE1hcmtlZFNwYWNlOjpvcHRpbWFsU2l6ZUZvcihj
ZWxsU2l6ZSk7CisgICAgdmVjdG9yTGVuZ3RoID0gKGNlbGxTaXplIC0gdG90YWxTaXplKDAsIHBy
b3BlcnR5Q2FwYWNpdHksIHRydWUsIDApKSAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
cmV0dXJuIHZlY3Rvckxlbmd0aDsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJm
bHk6OmF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICByZXR1cm4gYXZhaWxhYmxlQ29udGlndW91
c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
OiAwLCB2ZWN0b3JMZW5ndGgpOworfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZs
eTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChC
QVNFX0NPTlRJR1VPVVNfVkVDVE9SX0xFTiwgdmVjdG9yTGVuZ3RoKTsKKyAgICByZXR1cm4gYXZh
aWxhYmxlQ29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCB2ZWN0b3JMZW5n
dGgpOworfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1hbENvbnRp
Z3VvdXNWZWN0b3JMZW5ndGgoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCkKK3sKKyAgICByZXR1cm4gb3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0
dXJlID8gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpIDogMCwgdmVjdG9yTGVuZ3RoKTsK
K30KKwogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZN
JiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCiB7Ci0gICAgdm9pZCogdGVtcDsKICAgICBzaXplX3Qgc2l6ZSA9
IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFk
ZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5o
ZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCBzaXplLCAmdGVtcCkpOwotICAg
IEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHkpOworICAgIHZvaWQqIGJhc2UgPSB2bS5oZWFwLmFsbG9jYXRlQXV4aWxpYXJ5KGlu
dGVuZGVkT3duZXIsIHNpemUpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFz
ZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTExOSw3ICsxNDIsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dB
cnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CiAg
ICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5k
ZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXplX3Qg
bmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9y
YWdlKGludGVuZGVkT3duZXIsICZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICB0aGVC
YXNlID0gdm0uaGVhcC50cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIHRoZUJh
c2UsIG9sZFNpemUsIG5ld1NpemUpOworICAgIGlmICghdGhlQmFzZSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1
bWVudHMuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNiArNDQsMTkg
QEAgQ2xvbmVkQXJndW1lbnRzOjpDbG9uZWRBcmd1bWVudHMoVk0mIHZtLAogQ2xvbmVkQXJndW1l
bnRzKiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KAogICAgIFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbGVuZ3Ro
KTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBsZW5ndGg7CiAgICAgaWYgKHZlY3Rvckxl
bmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgdm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1
ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKKyAgICB2
b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICBpZiAoIXRlbXApCiAg
ICAgICAgIHJldHVybiAwOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpm
cm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIGJ1
dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgYnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5n
dGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uY2xlYXIoKTsKIAogICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0KICAgICAgICAg
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8Q2xvbmVkQXJndW1lbnRzPih2bS5oZWFwKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3
LDggQEAKICNpbmNsdWRlICJHZW5lcmF0b3JQcm90b3R5cGUuaCIKIAogI2luY2x1ZGUgIkpTQ0J1
aWx0aW5zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0Nl
bGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiAjaW5jbHVkZSAiR2Vu
ZXJhdG9yUHJvdG90eXBlLmx1dC5oIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAo
dGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29sc2Fr
IFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMzLDggKzM0LDcgQEAKICNpbmNsdWRlICJJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24u
aCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDggKzM0LDcgQEAKICNpbmNsdWRlICJJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rp
b24uaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMyw4IEBA
CiAjaW5jbHVkZSAiSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSW50
bE9iamVjdC5oIgogI2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9y
SW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA0MDU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDggQEAKICNpbmNsdWRlICJJbnRs
RGF0ZVRpbWVGb3JtYXQuaCIKICNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNC
b3VuZEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSAr
MzQsOCBAQAogI2luY2x1ZGUgIkludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKLSNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDEyIEBAIHVz
aW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogCisjaWYgMAorI2RlZmluZSBM
T0dJVCgpIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogIiwgV1RGX1BSRVRUWV9GVU5DVElP
TiwgIlxuIik7CisjZWxzZQorI2RlZmluZSBMT0dJVCgpIGRvIHsgfSB3aGlsZShmYWxzZSkKKyNl
bmRpZgorCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNBcnJheSk7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmlu
YWxPYmplY3Q6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CkBAIC02
MSw2ICs2Nyw4IEBAIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb24KIAog
dm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3Jp
dGFibGUpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJs
ZSgpIHx8ICF3cml0YWJsZSk7CiAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkgfHwgd3JpdGFi
bGUpCiAgICAgICAgIHJldHVybjsKQEAgLTIzOCwxMSArMjQ2LDEzIEBAIHZvaWQgSlNBcnJheTo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWUKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4g
dGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIGZvciBjb3VudCBzbG90cyB1bmNs
ZWFyZWQuCiBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2bSwgYm9vbCBh
ZGRUb0Zyb250LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZSh2bSk7CiAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKICAgICB1bnNpZ25lZCBwcm9w
ZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICB1
bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVTaXplKCk7Ci0K
KyAgICAKICAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUg
ZmFzdCBwYXRoLgogICAgIEFTU0VSVCghYWRkVG9Gcm9udCB8fCBjb3VudCA+IHN0b3JhZ2UtPm1f
aW5kZXhCaWFzKTsKIApAQCAtMjU0LDcgKzI2NCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50U2xvd0Nhc2UoVk0mIHYKICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ug
c2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWly
ZWRWZWN0b3JMZW5ndGguCiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgo
KTsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4ob2xk
VmVjdG9yTGVuZ3RoLCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVjdG9yTGVuZ3RoIDw9IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRoYXQgcmVxdWlyZWQgdmVj
dG9yIGxlbmd0aCBpcyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBmYXNoaW9uLgogICAg
IGlmIChjb3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2VkVmVjdG9yTGVuZ3Ro
KQpAQCAtMjY1LDcgKzI3NiwxMCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNl
KFZNJiB2CiAgICAgQVNTRVJUKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDw9IE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSkgPj0gc3RvcmFnZS0+bV9pbmRleEJpYXMpOwogICAgIHVuc2lnbmVkIGN1
cnJlbnRDYXBhY2l0eSA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpICsgc3RvcmFnZS0+bV9pbmRl
eEJpYXM7CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9uIG9mIGRlc2lyZWRDYXBhY2l0eSB3b24ndCBv
dmVyZmxvdywgZHVlIHRvIHRoZSByYW5nZSBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgot
ICAgIHVuc2lnbmVkIGRlc2lyZWRDYXBhY2l0eSA9IG1pbihNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RILCBtYXgoQkFTRV9WRUNUT1JfTEVOLCByZXF1aXJlZFZlY3Rvckxlbmd0aCkgPDwgMSk7Cisg
ICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQgYmUgZml4ZWQgdG8gYXZvaWQgaW50ZXJuYWwg
ZnJhZ21lbnRhdGlvbi4gSXQncyBub3Qgc3VwZXIgaGlnaAorICAgIC8vIHByaW9yaXR5IHNpbmNl
IGluY3JlYXNlVmVjdG9yTGVuZ3RoKCkgd2lsbCAiZml4IiBhbnkgbWlzdGFrZXMgd2UgbWFrZSwg
YnV0IGl0IHdvdWxkIGJlIGNvb2wKKyAgICAvLyB0byBnZXQgdGhpcyByaWdodCBldmVudHVhbGx5
LgorICAgIHVuc2lnbmVkIGRlc2lyZWRDYXBhY2l0eSA9IG1pbihNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RILCBtYXgoQkFTRV9BUlJBWV9TVE9SQUdFX1ZFQ1RPUl9MRU4sIHJlcXVpcmVkVmVjdG9y
TGVuZ3RoKSA8PCAxKTsKIAogICAgIC8vIFN0ZXAgMjoKICAgICAvLyBXZSdyZSBlaXRoZXIgZ29p
bmcgdG8gY2hvb3NlIHRvIGFsbG9jYXRlIGEgbmV3IEFycmF5U3RvcmFnZSwgb3Igd2UncmUgZ29p
bmcgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIG9uZS4KQEAgLTI3MywxNSArMjg3LDE5IEBAIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKICAgICB1bnNpZ25lZCBuZXdT
dG9yYWdlQ2FwYWNpdHk7CisgICAgYm9vbCBhbGxvY2F0ZWROZXdTdG9yYWdlOwogICAgIC8vIElm
IHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90
IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgogICAgIGlmIChjdXJyZW50Q2Fw
YWNpdHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50
Q2FwYWNpdHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgewogICAgICAgICBuZXdBbGxvY0Jhc2Ug
PSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0dXJlKHZtKSk7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBh
Y2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKKyAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFnZSA9IGZh
bHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KGRlc2lyZWRDYXBhY2l0eSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKHRoaXMsIG5ld1NpemUsICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICBuZXdBbGxvY0Jhc2Ug
PSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KHRoaXMsIG5ld1NpemUpOworICAgICAgICBp
ZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3
U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OworICAgICAgICBhbGxvY2F0ZWROZXdT
dG9yYWdlID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBTdGVwIDM6CkBAIC0zMTEsMTMgKzMyOSwx
OSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgICAgIEFT
U0VSVChjb3VudCArIHVzZWRWZWN0b3JMZW5ndGggPD0gbmV3VmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciArIGNvdW50
LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7
CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6
ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYWxsb2NhdGVk
TmV3U3RvcmFnZSkgeworICAgICAgICAgICAgLy8gV2Ugd2lsbCBzZXQgdGhlIHZlY3Rvckxlbmd0
aCB0byBuZXdWZWN0b3JMZW5ndGguIFdlIHBvcHVsYXRlZCByZXF1aXJlZFZlY3Rvckxlbmd0aAor
ICAgICAgICAgICAgLy8gKHVzZWRWZWN0b3JMZW5ndGggKyBjb3VudCksIHdoaWNoIGlzIGxlc3Mu
IENsZWFyIHRoZSBkaWZmZXJlbmNlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVx
dWlyZWRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAg
ICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwor
ICAgICAgICB9CiAgICAgfSBlbHNlIGlmICgobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFz
ZShzdHJ1Y3R1cmUodm0pKSkgfHwgKG5ld0luZGV4QmlhcyAhPSBzdG9yYWdlLT5tX2luZGV4Qmlh
cykpIHsKICAgICAgICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlTaXplLCBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXpl
LCBzaXplb2YoSlNWYWx1ZSkgKiBwcm9wZXJ0eVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
ICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKICAgICAgICAgbWVtbW92ZShuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvciwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihK
U1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogbmV3VmVjdG9yID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7
CisgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXF1aXJlZFZlY3Rvckxlbmd0
aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgaSsrKQotICAgICAgICAgICAgbmV3VmVjdG9yW2ldLmNs
ZWFyKCk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cltpXS5jbGVhcigpOwogICAgIH0KIAogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwpAQCAtMzI5LDggKzM1MywxMCBAQCBi
b29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAKIGJvb2wgSlNBcnJheTo6
c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xl
bmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQogeworICAg
IExPR0lUKCk7CisgICAgCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7
Ci0KKyAgICAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVy
IHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgogICAgIEFT
U0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgc3RvcmFnZS0+bV9zcGFyc2VNYXApOwogCkBAIC0z
OTMsNiArNDE5LDggQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAog
CiBib29sIEpTQXJyYXk6OmFwcGVuZE1lbWNweShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgdW5z
aWduZWQgc3RhcnRJbmRleCwgSlNDOjpKU0FycmF5KiBvdGhlckFycmF5KQogeworICAgIExPR0lU
KCk7CisgICAgCiAgICAgaWYgKCFjYW5GYXN0Q29weSh2bSwgb3RoZXJBcnJheSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNDMzLDYgKzQ2MSw4IEBAIGJvb2wgSlNBcnJheTo6YXBwZW5k
TWVtY3B5KEV4ZWNTdGF0ZSogZXgKIAogYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CisgICAg
TE9HSVQoKTsKKyAgICAKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpOwogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6
CkBAIC00OTcsNiArNTI3LDggQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBl
eGVjLAogCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgTE9H
SVQoKTsKKyAgICAKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKQEAgLTU5NCw2ICs2MjYsOCBA
QCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAvLyAgLSBwdXNoaW5nIHRv
IGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93
cyBhIHJhbmdlIGVycm9yLgogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUo
KSkgewpAQCAtNzMwLDYgKzc2NCw4IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmEKIAogSlNBcnJheSogSlNBcnJheTo6ZmFzdFNsaWNlKEV4ZWNTdGF0ZSYgZXhlYywg
dW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCiB7CisgICAgTE9HSVQoKTsKKyAg
ICAKICAgICBhdXRvIGFycmF5VHlwZSA9IGluZGV4aW5nVHlwZSgpOwogICAgIHN3aXRjaCAoYXJy
YXlUeXBlKSB7CiAgICAgY2FzZSBBcnJheVdpdGhEb3VibGU6CkBAIC03NjAsNiArNzk2LDggQEAg
SlNBcnJheSogSlNBcnJheTo6ZmFzdFNsaWNlKEV4ZWNTdGF0ZSYgZQogCiBib29sIEpTQXJyYXk6
OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKFZNJiB2bSwgdW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKKyAgICBMT0dJVCgpOwor
ICAgIAogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIFJF
TEVBU0VfQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgCkBAIC04NjUsNiArOTAzLDgg
QEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZQogCiBib29sIEpTQXJy
YXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogeworICAgIExPR0lUKCk7CisgICAgCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA+IDApOwog
CkBAIC05NjMsNiArMTAwMyw4IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRl
eGluZ1QKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdW5zaGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFs
c2UgdG8gZmFsbGJhY2suICAgIAogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291
bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQo
c3RhcnRJbmRleCA8PSBsZW5ndGgpOwpAQCAtMTEwMCw2ICsxMTQyLDggQEAgYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbgogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0
KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7CisgICAgTE9H
SVQoKTsKKyAgICAKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7
CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3I7CkBAIC0xMTY2LDYgKzEyMTAsOCBA
QCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAKIHZvaWQgSlNBcnJh
eTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIExP
R0lUKCk7CisgICAgCiAgICAgdW5zaWduZWQgaSA9IG9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHZlY3RvcjsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNzcsNyArMTc3
LDggQEAgcHJpdmF0ZToKIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1
dHRlcmZseShWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCYgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4aW5nSGVhZGVyIGhlYWRlcjsKLSAg
ICB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAg
dmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aCgK
KyAgICAgICAgaW50ZW5kZWRPd25lciA/IGludGVuZGVkT3duZXItPnN0cnVjdHVyZSh2bSkgOiAw
LCBsZW5ndGgpOwogICAgIGhlYWRlci5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAg
ICBoZWFkZXIuc2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQg
PSBCdXR0ZXJmbHk6OmNyZWF0ZSgKQEAgLTE4OCwxMSArMTg5LDExIEBAIGlubGluZSBCdXR0ZXJm
bHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUIKIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5
QnV0dGVyZmx5KFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKQogewogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUo
Ci0gICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFk
ZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwKLSAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1
ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXlTdG9yYWdlKGluaXRpYWxMZW5ndGgpLAorICAg
ICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IoQkFTRV9BUlJBWV9TVE9SQUdFX1ZFQ1RPUl9MRU4p
KTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwotICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5tX3NwYXJzZU1h
cC5jbGVhcigpOworICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICByZXR1cm4gYnV0dGVyZmx5OwogfQpAQCAtMjE1
LDEyICsyMTYsMTcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShWTSYgdm0sIAog
ICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAg
ICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rv
ckxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoCiAgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UKICAgICAgICAgICAgIHx8IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKTsKICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0
ZXJmbHkodm0sIDAsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgQkFTRV9BUlJBWV9TVE9SQUdFX1ZFQ1RPUl9MRU47ICsraSkKKyAgICAgICAgICAgIGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsK
QEAgLTIyOCw0MCArMjM0LDQ3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0m
IHZtLCAKIAogaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsK
LSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGlu
aXRpYWxMZW5ndGgpOwotICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKQorICAgIGlmIChpbml0aWFsTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICB1bnNpZ25lZCBvdXRPZkxpbmVTdG9yYWdlID0g
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHk7Ci0gICAgaWYgKExJS0VMWSghaGFzQW55QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKSkgeworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpOworICAgIGlmIChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFnZShpbmRl
eGluZ1R5cGUpKSkgewogICAgICAgICBBU1NFUlQoCi0gICAgICAgICAgICBoYXNVbmRlY2lkZWQo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpOwotCi0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICgh
dm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0
T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaGFzVW5kZWNp
ZGVkKGluZGV4aW5nVHlwZSkKKyAgICAgICAgICAgIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSkK
KyAgICAgICAgICAgIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBo
YXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOworCisgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJl
LCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2Nh
dGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3Rv
cmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
ICAgICBpZiAoIXRlbXApCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0
dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsK
ICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIGlm
IChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgaWYgKGhh
c0RvdWJsZShpbmRleGluZ1R5cGUpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBp
bml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxl
bmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNs
ZWFyKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICB2b2lkKiB0ZW1wOwotICAg
ICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0
b3JMZW5ndGgpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0aCgwLCBz
dHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50
cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRP
ZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSkp
OworICAgICAgICBpZiAoIXRlbXApCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9y
YWdlKTsKLSAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVh
ZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgKmJ1dHRl
cmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXlTdG9yYWdlKGlu
aXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhC
aWFzID0gMDsKICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICAgICAg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9uIDIw
NDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNw
cAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
YWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMyArMjcsOSBAQAogI2luY2x1ZGUgIkpTQ2Fs
bGVlLmgiCiAKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
LSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3Iu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMCwyNSArNTEwLDE1IEBAIEFycmF5QnVmZmVyKiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGEKICAgICAvLyB1cC4gQnV0IGlmIHlvdSBkbyAqYW55dGhp
bmcqIHRvIHRyaWdnZXIgYSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25vdwogICAgIC8v
IHRoYXQgeW91ICpoYWQqIGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdpbGwgR0MgYXBw
cm9wcmlhdGVseS4KICAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KTsKKyAg
ICBWTSYgdm0gPSAqaGVhcC0+dm0oKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhl
YXApOwogICAgIAogICAgIEFTU0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7
CiAKLSAgICBzaXplX3Qgc2l6ZSA9IHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7Ci0gICAgCi0gICAg
aWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQotICAgICAgICAmJiAhdGhp
c09iamVjdC0+YnV0dGVyZmx5KCkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7
Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Ci0gICAgICAgIC8vIFJldXNl
IGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9zc2libGUuCi0gICAgICAgIHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKAotICAgICAgICAgICAgYml0
d2lzZV9jYXN0PEluZGV4aW5nSGVhZGVyKj4odGhpc09iamVjdC0+dmVjdG9yKCkpLT5idXR0ZXJm
bHkoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3Qt
Pmhhc0luZGV4aW5nSGVhZGVyKCkpOwotICAgICAgICBWTSYgdm0gPSAqaGVhcC0+dm0oKTsKLSAg
ICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzT2JqZWN0LCBCdXR0ZXJm
bHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5idXR0
ZXJmbHkoKSwgdm0sIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLAotICAgICAg
ICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNl
LCAwLCAwKSk7Ci0gICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRl
eGluZ0hlYWRlcigpKTsKKyAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXQodm0sIHRoaXNP
YmplY3QsIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKKyAgICAgICAgdGhpc09i
amVjdC0+YnV0dGVyZmx5KCksIHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KSwKKyAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCks
IGZhbHNlLCAwLCAwKSk7CiAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMiArMjYsOSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNw
cAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE0ICsyNywxMCBAQAog
I2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCiAKICNpbmNsdWRlICJFcnJvci5o
IgotI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVs
ZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKLSNpbmNsdWRl
ICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
MTQgKzI4LDEwIEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUu
aCIKLSNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQu
aCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgotI2luY2x1ZGUgIlNsb3RW
aXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTIgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKKyNpZiAwCisjZGVmaW5lIExPR0lUKCkgZGF0YUxvZyhSYXdQb2ludGVyKHRo
aXMpLCAiOiAiLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiXG4iKTsKKyNlbHNlCisjZGVmaW5lIExP
R0lUKCkgZG8geyB9IHdoaWxlKGZhbHNlKQorI2VuZGlmCisKIC8vIFdlIGtlZXAgdHJhY2sgb2Yg
dGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiBXZSB1c2UgdGhp
cwogLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUg
bmV4dCBhcnJheSBmcm9tIHNpemUgMC4KIC8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBj
b25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGluCkBAIC04OCw3NyArOTQsNiBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZpc2l0
b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCi17Ci0gICAgQVNT
RVJUKGJ1dHRlcmZseSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5z
dHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBzaXplX3QgcHJlQ2FwYWNpdHk7Ci0gICAgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOwotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIgPSB0aGlzLT5oYXNJbmRleGluZ0hlYWRlcigpOwotICAgIGlmIChVTkxJS0VMWShoYXNJbmRl
eGluZ0hlYWRlcikpIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByZUNhcGFj
aXR5ID0gMDsKLSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwotICAgIH0K
LSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkoYnV0dGVy
Zmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSkpIHsKLSAgICAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJp
bmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJ
bmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotCi0gICAgICAgIC8v
IENvcHkgdGhlIHByb3BlcnRpZXMuCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFy
Z2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgUHJvcGVydHlT
dG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykKLSAgICAgICAg
ICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKCgtLWN1cnJlbnRT
b3VyY2UpLT5nZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhp
bmdIZWFkZXIpKSB7Ci0gICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigp
ID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gQ29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCi0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldDsKLSAgICAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZTsKLSAgICAgICAgICAgIHNpemVf
dCBjb3VudDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoICh0aGlzLT5pbmRleGlu
Z1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBB
TExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdl
dCA9IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBj
dXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gbmV3
QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgY291bnQgPSBuZXdC
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCkpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0g
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY291
bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IDA7Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IDA7Ci0gICAgICAgICAgICAgICAgY291bnQgPSAw
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBt
ZW1jcHkoY3VycmVudFRhcmdldCwgY3VycmVudFNvdXJjZSwgY291bnQgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0
V2l0aG91dEJhcnJpZXIobmV3QnV0dGVyZmx5KTsKLSAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1
dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5C
eXRlcyk7Ci0gICAgfSAKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1
dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChidXR0ZXJmbHkpOwpAQCAtMTc1LDEzICsx
MTAsMTYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAg
ICBwcmVDYXBhY2l0eSA9IDA7CiAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0g
MDsKICAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxT
aXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIAorICAgIEhlYXBDZWxsKiBiYXNlID0gYml0
d2lzZV9jYXN0PEhlYXBDZWxsKj4oYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5KSk7CisgICAgCisgICAgQVNTRVJUKEhlYXA6OmhlYXAoYmFzZSkgPT0gdmlzaXRv
ci5oZWFwKCkpOwogCisgICAgLy8gS2VlcCB0aGUgYnV0dGVyZmx5IGFsaXZlLgorICAgIHZpc2l0
b3IubWFya0F1eGlsaWFyeShiYXNlKTsKKyAgICAKICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVz
LgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9y
YWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIHZpc2l0b3IuY29weUxhdGVy
KAotICAgICAgICB0aGlzLCBCdXR0ZXJmbHlDb3B5VG9rZW4sCi0gICAgICAgIGJ1dHRlcmZseS0+
YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAg
ICAgCiAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgc3dpdGNoICh0
aGlzLT5pbmRleGluZ1R5cGUoKSkgewpAQCAtMjI1LDE5ICsxNjMsNiBAQCB2b2lkIEpTT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYKIH0KIAotdm9pZCBKU09iamVjdDo6
Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5
VG9rZW4gdG9rZW4pCi17Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7Ci0KLSAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0LT5j
b3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZVNpemUoKSk7Ci19Ci0KIHZvaWQgSlNPYmplY3Q6OmhlYXBTbmFwc2hvdChKU0Nl
bGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxkZXIpCiB7CiAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTc3OCwxNyArNzAzLDIw
IEBAIHZvaWQgSlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWMKICAgICBnbG9iYWxP
YmplY3QoKS0+aGF2ZUFCYWRUaW1lKHZtKTsKIH0KIAotQnV0dGVyZmx5KiBKU09iamVjdDo6Y3Jl
YXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoLCBzaXplX3Qg
ZWxlbWVudFNpemUpCitCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlZFN0
b3JhZ2UoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgTE9HSVQoKTsKICAgICBBU1NF
UlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9
IGluZGV4aW5nVHlwZSgpOwogICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQ
cm9wZXJ0aWVzKG9sZFR5cGUpKTsKICAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQ
dXRJbmRleGluZygpKTsKICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7Ci0g
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9M
RU4pOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAg
ICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRp
Z3VvdXNWZWN0b3JMZW5ndGgocHJvcGVydHlDYXBhY2l0eSwgbGVuZ3RoKTsKICAgICBCdXR0ZXJm
bHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKLSAg
ICAgICAgbV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAotICAgICAgICBlbGVtZW50U2l6ZSAq
IHZlY3Rvckxlbmd0aCk7CisgICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLCB2bSwgdGhpcywgc3Ry
dWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5LCBmYWxzZSwgMCwKKyAgICAgICAgc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNM
ZW5ndGgobGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JM
ZW5ndGgpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHk7CkBAIC03OTcsNyArNzI1LDcgQEAgQnV0
dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZQogQnV0dGVyZmx5KiBKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbFVuZGVjaWRlZChWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5k
ZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZCk7CiAgICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5l
d0J1dHRlcmZseTsKQEAgLTgwNiw3ICs3MzQsOSBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVh
dGVJbml0aWFsVW5kZWNpCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRp
YWxJbnQzMihWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5k
ZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxl
bmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsgaS0tOykKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKTsKICAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4g
bmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKQEAgLTgxNSw3ICs3NDUsNyBAQCBDb250
aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiBDb250aWd1b3VzRG91YmxlcyBK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbERvdWJsZShWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKGRvdWJs
ZSkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRT
dG9yYWdlKHZtLCBsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldID0gUE5hTjsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb246OkFsbG9jYXRlRG91YmxlKTsKQEAgLTgyNiw3ICs3NTYsOSBAQCBDb250aWd1b3Vz
RG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmpl
Y3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3VzKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJ
bmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMp
OwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTgzNCw2
ICs3NjYsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAKIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShWTSYgdm0sIHVuc2lnbmVk
IGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogeworICAgIExPR0lUKCk7CiAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+
c3RydWN0dXJlKHZtKTsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGluZGV4aW5nVHlwZSgp
OwpAQCAtODQ5LDYgKzc4Miw4IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5
U3RvcmEKICAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgcmVzdWx0LT5tX251
bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICByZXN1bHQtPm1faW5kZXhCaWFzID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gdmVjdG9yTGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIHN0cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAg
ICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5
KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODU2LDEyICs3OTEsMTggQEAgQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
cmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKFZNJiB2bSkKIHsKLSAgICByZXR1cm4gY3JlYXRlQXJy
YXlTdG9yYWdlKHZtLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHJldHVybiBjcmVhdGVBcnJh
eVN0b3JhZ2UoCisgICAgICAgIHZtLCAwLCBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5n
dGgoMCwgc3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgMCkpOwogfQogCiBDb250
aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKFZNJiB2bSkK
IHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CisKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwor
CiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKSk7
CiAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzSW50MzIoKTsKIH0KQEAg
LTg4MSw2ICs4MjIsMTEgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRl
YwogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1
b3VzKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7
CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1
ZSgpKTsKKwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVD
b250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7
CiB9CkBAIC05MTcsNyArODYzLDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVu
ZGVjaWRlZAogCiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCkt
PnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENv
bnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0
aCk7Ci0gICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgorICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIAogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2
bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CkBAIC05MzgsMTEgKzg4Niwx
MiBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyCiAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogY3VycmVudCA9ICZidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQz
MigpW2ldOwogICAgICAgICBkb3VibGUqIGN1cnJlbnRBc0RvdWJsZSA9IGJpdHdpc2VfY2FzdDxk
b3VibGUqPihjdXJyZW50KTsKICAgICAgICAgSlNWYWx1ZSB2ID0gY3VycmVudC0+Z2V0KCk7Ci0g
ICAgICAgIGlmICghdikgeworICAgICAgICAvLyBOT1RFOiBTaW5jZSB0aGlzIG1heSBiZSB1c2Vk
IGR1cmluZyBpbml0aWFsaXphdGlvbiwgdiBjb3VsZCBiZSBnYXJiYWdlLiBJZiBpdCdzIGdhcmJh
Z2UsCisgICAgICAgIC8vIHRoYXQgbWVhbnMgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4K
KyAgICAgICAgaWYgKCF2LmlzSW50MzIoKSkgewogICAgICAgICAgICAgKmN1cnJlbnRBc0RvdWJs
ZSA9IFBOYU47CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBBU1NF
UlQodi5pc0ludDMyKCkpOwogICAgICAgICAqY3VycmVudEFzRG91YmxlID0gdi5hc0ludDMyKCk7
CiAgICAgfQogICAgIApAQCAtOTY2LDEzICs5MTUsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydEludDMyVG9BcgogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVy
Zmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2Ug
PSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZt
LCB2ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7
IGkrKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIGlmICh2KQogICAgICAg
ICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5
KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsK
QEAgLTEwMTQsMTMgKzk2MSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91
YmxlVG9BCiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZl
Y3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENv
bnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0
aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAg
ICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAg
ICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgdmFsdWUpKTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91
dFdyaXRlQmFycmllcihKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOwor
ICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5l
d1N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwpAQCAtMTA0MSwxMyArOTg2LDExIEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJy
YXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0
aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAg
ICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAg
ICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwor
ICAgICAgICBpZiAodikKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0yMzgxLDcgKzIzMjQsNyBAQCBib29sIEpTT2JqZWN0
OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgICAgIH0KICAgICAgICAgaWYgKHN0cnVj
dHVyZSh2bSktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKICAgICAgICAgICAgIC8vIENvbnZl
cnQgdGhlIGluZGV4aW5nIHR5cGUgdG8gdGhlIFNsb3dQdXRBcnJheVN0b3JhZ2UgYW5kIHJldHJ5
LgotICAgICAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBpICsgMSwgZ2V0TmV3VmVjdG9y
TGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBjcmVhdGVBcnJheVN0b3JhZ2Uodm0s
IGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgMCwgaSArIDEpKTsKICAgICAgICAgICAg
IHJldHVybiBwdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC0yNTIyLDcgKzI0NjUsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgMCwgMCkpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUodm0pLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7
Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2Uo
dm0sIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgaSArIDEsIGdl
dE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCAwLCBpICsgMSkpOwogICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgICAgICBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKys7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2NDEs
NyArMjU4NCw4IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2kKICAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBmdW5jdGlvbiwg
YXR0cmlidXRlcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5l
d1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJy
ZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQorLy8gTk9URTogVGhpcyBtZXRob2Qg
aXMgZm9yIEFycmF5U3RvcmFnZSB2ZWN0b3JzLgorQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09i
amVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGluZGV4QmlhcywgdW5zaWduZWQgY3Vy
cmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJl
ZExlbmd0aCkKIHsKICAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKTsKIApAQCAtMjY1OCwyNSArMjYwMiwyNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIEpTT2JqZWN0OjpnZXROZXdWCiAKICAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRl
c2lyZWRMZW5ndGgpOwogCi0gICAgbGFzdEFycmF5U2l6ZSA9IHN0ZDo6bWluKGluY3JlYXNlZExl
bmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOworICAgIGxhc3RBcnJheVNpemUgPSBzdGQ6Om1pbihp
bmNyZWFzZWRMZW5ndGgsIEZJUlNUX0FSUkFZX1NUT1JBR0VfVkVDVE9SX0dST1cpOwogCi0gICAg
cmV0dXJuIHN0ZDo6bWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7CisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0aCgKKyAgICAg
ICAgaW5kZXhCaWFzLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKKyAgICAgICAg
c3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1
bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQogewotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aDsKLSAg
ICB1bnNpZ25lZCBsZW5ndGg7CisgICAgdW5zaWduZWQgaW5kZXhCaWFzID0gMDsKKyAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSAwOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgCiAg
ICAgaWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBp
ZiAoQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JOdWxsKCkpCisgICAgICAg
ICAgICBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAgICAgICAgdmVjdG9yTGVu
Z3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICBsZW5ndGgg
PSBtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgdmVjdG9yTGVuZ3RoID0gMDsKLSAgICAgICAgbGVuZ3RoID0gMDsKICAgICB9CiAKLSAgICBy
ZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVuZ3RoLCBkZXNpcmVkTGVu
Z3RoKTsKKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKGluZGV4QmlhcywgdmVjdG9yTGVu
Z3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgpOwogfQogCiB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUg
aW5kZXhpbmdTaGFwZT4KQEAgLTI3MjksMTkgKzI2NzUsMjkgQEAgdW5zaWduZWQgSlNPYmplY3Q6
OmNvdW50RWxlbWVudHMoKQogCiBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChW
TSYgdm0sIHVuc2lnbmVkIG5ld0xlbmd0aCkKIHsKKyAgICBMT0dJVCgpOworICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIAorICAgIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIGF2YWlsYWJs
ZVZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPmF2YWlsYWJsZVZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUo
dm0pLCB2ZWN0b3JMZW5ndGgpOyAKKyAgICBpZiAoYXZhaWxhYmxlVmVjdG9yTGVuZ3RoID49IG5l
d0xlbmd0aCkgeworICAgICAgICAvLyBUaGUgY2VsbCB3YXMgYWxyZWFkeSBiaWcgZW5vdWdoIGZv
ciB0aGUgZGVzaXJlZCBsZW5ndGghCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxl
bmd0aDsgaSA8IGF2YWlsYWJsZVZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3Ro
KGF2YWlsYWJsZVZlY3Rvckxlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxs
eSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVz
IGZyb20gc3BhcnNlIHZhbHVlIG1hcAogICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2
ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNp
ZW50bHkuCiAgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5
U3RvcmFnZSgpOwotICAgIAogICAgIGlmIChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWAogICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5ndGgsIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1
bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKLSAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBU1NFUlQobmV3TGVu
Z3RoID4gdmVjdG9yTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXRO
ZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKIApAQCAtMjc1NCw2ICsyNzEwLDggQEAgYm9vbCBK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICAgICAgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0
b3JMZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5l
d1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIHNldEJ1
dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yNzY4LDYgKzI3MjYsOCBAQCBib29sIEpTT2JqZWN0OjppbmNy
ZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3QnV0dGVyZmx5
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVu
Z3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAg
c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwpA
QCAtMjc3NiwzMSArMjczNiw0OSBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0
aChWTSYgCiAKIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CisgICAgTE9HSVQoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5E
RVgpOwogICAgIEFTU0VSVChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQz
MihpbmRleGluZ1R5cGUoKSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRl
Y2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKICAgICBBU1NFUlQobGVuZ3RoID4gYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CiAgICAgCi0gICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gc3Rk
OjptaW4oCi0gICAgICAgIGxlbmd0aCA8PCAxLAotICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKTsKICAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBidXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOwotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBidXR0ZXJmbHkg
PSBidXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAotICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJl
KCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAotICAgICAgICBvbGRW
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAotICAgICAgICBuZXdWZWN0b3JM
ZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBpZiAoIWJ1dHRlcmZseSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVy
Zmx5KTsKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGg7CisgICAgCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgIHVuc2lnbmVkIHByb3BlcnR5
Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgCisgICAgdW5z
aWduZWQgYXZhaWxhYmxlT2xkTGVuZ3RoID0KKyAgICAgICAgQnV0dGVyZmx5OjphdmFpbGFibGVD
b250aWd1b3VzVmVjdG9yTGVuZ3RoKHByb3BlcnR5Q2FwYWNpdHksIG9sZFZlY3Rvckxlbmd0aCk7
CisgICAgaWYgKGF2YWlsYWJsZU9sZExlbmd0aCA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gVGhp
cyBpcyB0aGUgY2FzZSB3aGVyZSBzb21lb25lIGVsc2Ugc2VsZWN0ZWQgYSB2ZWN0b3IgbGVuZ3Ro
IHRoYXQgY2F1c2VkIGludGVybmFsCisgICAgICAgIC8vIGZyYWdtZW50YXRpb24uIElmIHdlIGRp
ZCBvdXIgam9icyByaWdodCwgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4uIEJ1dCBJIGJldCB3ZSB3
aWxsIG1lc3MKKyAgICAgICAgLy8gdGhpcyB1cCwgc28gdGhpcyBkZWZlbnNlIHNob3VsZCBzdGF5
LgorICAgICAgICBuZXdWZWN0b3JMZW5ndGggPSBhdmFpbGFibGVPbGRMZW5ndGg7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbmV3VmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGln
dW91c1ZlY3Rvckxlbmd0aCgKKyAgICAgICAgICAgIHByb3BlcnR5Q2FwYWNpdHksIHN0ZDo6bWlu
KGxlbmd0aCA8PCAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSk7CisgICAgICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgYnV0dGVyZmx5ID0gYnV0dGVyZmx5LT5ncm93
QXJyYXlSaWdodCgKKyAgICAgICAgICAgIHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIHByb3BlcnR5Q2Fw
YWNpdHksIHRydWUsCisgICAgICAgICAgICBvbGRWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpLAorICAgICAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7CisgICAgICAgIGlmICghYnV0dGVyZmx5KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CisgICAg
fQogCiAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKIAog
ICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpW2ldID0gUE5hTjsKKyAg
ICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICB9
IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBu
ZXdWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmNsZWFyKCk7CiAgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI4MjEsNiAr
Mjc5OSw3IEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKIAogQnV0
dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpCiB7CisgICAgTE9HSVQoKTsKICAgICBBU1NFUlQobmV3U2l6
ZSA+IG9sZFNpemUpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9u
IG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJBcnJheUNv
bnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQXV4aWxp
YXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCi0jaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0
ZXIuaCIKICNpbmNsdWRlICJEZWZlckdDLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtMTAzLDcg
KzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3Qg
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYs
IENvcHlUb2tlbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBz
aG90KEpTQ2VsbCosIEhlYXBTbmFwc2hvdEJ1aWxkZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CkBAIC00MTQsNiAr
NDEzLDggQEAgcHVibGljOgogICAgICAgICBpbml0aWFsaXplSW5kZXgodm0sIGksIHYsIGluZGV4
aW5nVHlwZSgpKTsKICAgICB9CiAKKyAgICAvLyBOT1RFOiBDbGllbnRzIG9mIHRoaXMgbWV0aG9k
IG1heSBjYWxsIGl0IG1vcmUgdGhhbiBvbmNlIGZvciBhbnkgaW5kZXgsIGFuZCB0aGlzIGlzIHN1
cHBvc2VkCisgICAgLy8gdG8gd29yay4KICAgICB2b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0s
IHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7
CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CkBAIC02
ODYsOCArNjg3LDYgQEAgcHVibGljOgogICAgICAgICAKICAgICB2b2lkIHNldFN0cnVjdHVyZShW
TSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiwg
U3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9j
YXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVy
ZSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2Fy
eShWTSYsIFN0cnVjdHVyZSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0
VG9EaWN0aW9uYXJ5KFZNJik7CiAKQEAgLTc5Nyw3ICs3OTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
SlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAg
IHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUq
KTsKLSAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXpl
X3Qgc3RvcmFnZVNpemUpOwogCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhl
IG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgLy8gc3RvcmFnZS4g
VGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCkBAIC05MDgsNyArOTA2LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGlzT2JqZWN0KCk7CiAgICAgdm9pZCBpc1N0cmluZygpOwogICAgICAgICAKLSAg
ICBCdXR0ZXJmbHkqIGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZShWTSYsIHVuc2lnbmVkIGxl
bmd0aCwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICBCdXR0ZXJmbHkqIGNyZWF0ZUluaXRpYWxJ
bmRleGVkU3RvcmFnZShWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIAogICAgIEFycmF5
U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVh
ZHlFeGlzdHMoVk0mLCBBcnJheVN0b3JhZ2UqKTsKICAgICAgICAgCkBAIC05MzIsNyArOTMwLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSwgQXJyYXlTdG9yYWdlKik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSk7CiAgICAgICAgIAotICAgIHVuc2lnbmVk
IGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25l
ZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBn
ZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgaW5kZXhCaWFzLCB1bnNpZ25lZCBjdXJyZW50VmVj
dG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3Ro
KTsKICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0
aCk7CiAKICAgICBBcnJheVN0b3JhZ2UqIGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdp
dGhvdXRDb3B5aW5nRWxlbWVudHMoVk0mLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOwpAQCAtOTQ5
LDcgKzk0Nyw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXJyYXlTdG9yYWdl
KiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KFZNJik7CiAKIHByb3RlY3RlZDoKLSAgICBDb3B5QmFy
cmllcjxCdXR0ZXJmbHk+IG1fYnV0dGVyZmx5OworICAgIEF1eGlsaWFyeUJhcnJpZXI8QnV0dGVy
Zmx5Kj4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAg
dWludDMyX3QgbV9wYWRkaW5nOwpAQCAtMTQ4Nyw4ICsxNDg1LDE2IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZz
ZXQpOwogICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0g
ICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgbmV3U3Ry
dWN0dXJlKTsKLQorICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBzaXplX3Qgb2xk
Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IG5l
d0NhcGFjaXR5ID0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIEFTU0VS
VChvbGRDYXBhY2l0eSA8PSBuZXdDYXBhY2l0eSk7CisgICAgaWYgKG9sZENhcGFjaXR5ID09IG5l
d0NhcGFjaXR5KQorICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CisgICAg
ZWxzZSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0
b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7CisgICAgICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIH0KICAg
ICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIHNsb3Quc2V0TmV3UHJvcGVydHko
dGhpcywgb2Zmc2V0KTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQpAQCAtMTQ5Niwy
NyArMTUwMiw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFu
ZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mIHZtLCB1bnNpZ25lZCBvbGRDYXBhY2l0
eSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCi17Ci0gICAgQVNTRVJUKG9sZENhcGFjaXR5IDw9
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgCi0gICAgaWYgKG9sZENh
cGFjaXR5ID09IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBz
ZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IAotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCi0gICAgICAgIHZtLCBvbGRDYXBhY2l0eSwgbmV3
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKLX0KLQotaW5saW5lIHZvaWQg
SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0m
IHZtLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKLXsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFs
bG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KAotICAgICAgICB2bSwgc3RydWN0dXJlKHZtKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U3RydWN0dXJlKTsKLX0KLQogaW5saW5lIGJvb2wgSlNPYmpl
Y3Q6OnB1dE93bkRhdGFQcm9wZXJ0eShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFs
dWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJ
bmxpbmVzLmgJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LCAyMDA5LCAyMDEyLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4
LCAyMDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIEpTT2JqZWN0SW5saW5lc19oCiAjZGVmaW5l
IEpTT2JqZWN0SW5saW5lc19oCiAKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5o
IgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJM
b29rdXAuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
LmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDkgQEAKIAogI2luY2x1
ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
TWljcm90YXNrLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21p
c2VQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTEgQEAKICNpbmNs
dWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTQ0J1
aWx0aW5zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0Nl
bGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZS5o
IgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDQw
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEzICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogCi0jaW5jbHVkZSAiSWRl
bnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDEyICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNTZXRJdGVyYXRvci5oIgogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNs
dWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTU2V0LmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDkgKzI4LDcgQEAKICNpbmNsdWRlICJKU1N0cmluZ0l0ZXJhdG9yLmgiCiAKICNpbmNsdWRlICJC
dWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQ2VsbElubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3Bw
CShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Rl
bXBsYXRlUmVnaXN0cnlLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+LgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOSArMjcsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIgogCi0j
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5o
IgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEyICsyOSwxMCBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNNYXAuaCIKICNpbmNsdWRlICJNYXBQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJ
bmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDEzICszMSwxMSBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb25Jbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5j
bHVkZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk1h
cERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiAjaW5jbHVk
ZSAiTWFwUHJvdG90eXBlLmx1dC5oIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsNyBAQCB0eXBl
ZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIHRlc3RUaGVGVEwsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNr
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxH
QywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCByZXNldEZyZWVDZWxsc0Jh
ZGx5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBlYWdlcmx5VXBkYXRl
VG9wQ2FsbEZyYW1lLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9v
bCwgdXNlT1NSRW50cnlUb0RGRywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDcgQEAKIAogI2luY2x1
ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJQcm94eU9iamVjdC5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24g
MjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlz
aW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNyArMzQsMjAgQEAgc3RhdGljIGNvbnN0
IFByb3BlcnR5T2Zmc2V0IFJlZ0V4cE1hdGNoZQogCiBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKLSAgICB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGluaXRpYWxMZW5ndGgpOworICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IGluaXRpYWxMZW5ndGg7CiAgICAgaWYgKHZlY3Rvckxl
bmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgdm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1
ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlh
cnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
CisgICAgaWYgKCF0ZW1wKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JM
ZW5ndGgpOwogICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOwot
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxl
bmd0aDsgKytpKQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwor
ICAgIAogICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSk7CiB9CiAKQEAgLTY3LDQwICs3MCw1NCBAQCBBTFdBWVNfSU5MSU5FIEpT
QXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGhhbmRs
ZSBhcnJheSBhbGxvY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5LgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxNDQKICAgICAKKyAgICBhdXRvIHNldFBy
b3BlcnRpZXMgPSBbJl0gKCkgeworICAgICAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBN
YXRjaGVzQXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0LCBqc051bWJlcihyZXN1bHQuc3RhcnQpKTsK
KyAgICAgICAgYXJyYXktPnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5SW5wdXRQcm9w
ZXJ0eU9mZnNldCwgaW5wdXQpOworICAgIH07CisgICAgCisgICAgdW5zaWduZWQgbnVtU3VicGF0
dGVybnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCk7CisgICAgCiAgICAgaWYgKFVOTElLRUxZ
KGdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpKSkgewotICAgICAgICBhcnJheSA9IEpT
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0
Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOworICAg
ICAgICBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9i
amVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIG51bVN1YnBhdHRlcm5zICsgMSk7
CisgICAgICAgIAorICAgICAgICBzZXRQcm9wZXJ0aWVzKCk7CisgICAgICAgIAorICAgICAgICBh
cnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKKyAg
ICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gTm93IHRoZSBvYmplY3QgaXMgc2FmZSB0byBzY2FuIGJ5IEdD
LgogICAgICAgICAKICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJz
dHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVz
dWx0LnN0YXJ0KSk7CiAgICAgICAgIAotICAgICAgICBpZiAodW5zaWduZWQgbnVtU3VicGF0dGVy
bnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkgewotICAgICAgICAgICAgICAgIGlu
dCBzdGFydCA9IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKLSAgICAgICAgICAgICAgICBpZiAo
c3RhcnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2
bSwgaSwgSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwg
c3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCkpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2
bSwgaSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkgeworICAgICAgICAgICAgaW50IHN0
YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOworICAgICAgICAgICAgaWYgKHN0YXJ0ID49
IDApCisgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwgSlNSb3Bl
U3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgc3RhcnQsIHN1YnBh
dHRlcm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCkpOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0Fy
cmF5KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdF
eHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmlu
aXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNo
ZXNBcnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyArIDEpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVChhcnJheSk7CiAgICAgICAgIAorICAgICAgICBzZXRQcm9wZXJ0aWVzKCk7CisgICAg
ICAgIAorICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1VuZGVmaW5lZCgp
LCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKKyAgICAgICAgICAgIGFycmF5LT5pbml0
aWFsaXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwor
ICAgICAgICAKKyAgICAgICAgLy8gTm93IHRoZSBvYmplY3QgaXMgc2FmZSB0byBzY2FuIGJ5IEdD
LgorCiAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzU3Vic3RyaW5nT2ZS
ZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFy
dCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICAKLSAgICAgICAgaWYgKHVuc2lnbmVk
IG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpKSB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgc3RhcnQgPSBzdWJwYXR0ZXJuUmVzdWx0c1syICogaV07Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0
aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZl
ZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQp
LCBBcnJheVdpdGhDb250aWd1b3VzKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCksIEFy
cmF5V2l0aENvbnRpZ3VvdXMpOwotICAgICAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKKyAgICAgICAgICAgIGludCBzdGFy
dCA9IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgIGlmIChzdGFydCA+PSAw
KQorICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0
cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0
ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNB
cnJheUluZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKHJlc3VsdC5zdGFydCkpOwotICAgIGFy
cmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQs
IGlucHV0KTsKLQogICAgIHJldHVybiBhcnJheTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDIw
NDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZS5oIgogI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNj
b3BlLmgiCisjaW5jbHVkZSAiSGVhcFV0aWwuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUu
aCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCkBAIC0zOTIsNyArMzkzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52
ZXJpZmllZAogICAgICAgICAgICAgSlNWYWx1ZSBjYWxsZWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZENhbGxlZSk7CiAgICAgICAgICAgICBTdGFja0ZyYW1lJiBzdGFja0ZyYW1lID0gc3RhY2tU
cmFjZS5mcmFtZXMubGFzdCgpOwogICAgICAgICAgICAgYm9vbCBhbHJlYWR5SGFzRXhlY3V0YWJs
ZSA9ICEhc3RhY2tGcmFtZS5leGVjdXRhYmxlOwotICAgICAgICAgICAgaWYgKCFIZWFwOjppc1Zh
bHVlR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgY2FsbGVlKSkgeworICAgICAgICAg
ICAgaWYgKCFIZWFwVXRpbDo6aXNWYWx1ZUdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQs
IGNhbGxlZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIYXNFeGVjdXRhYmxlKQog
ICAgICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VW5r
bm93bjsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MzcsNyArNDM4LDcgQEAgdm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcDo6aXNQ
b2ludGVyR0NPYmplY3QoZmlsdGVyLCBtYXJrZWRCbG9ja1NldCwgZXhlY3V0YWJsZSkpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSGVhcFV0aWw6OmlzUG9pbnRlckdDT2JqZWN0SlNDZWxs
KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGV4ZWN1dGFibGUpKTsKICAgICAgICAgICAgIHN0YWNr
RnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpFeGVjdXRhYmxlOwogICAgICAgICAgICAgc3Rh
Y2tGcmFtZS5leGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICAgICAgICAgIG1fbGl2ZUNlbGxQ
b2ludGVycy5hZGQoZXhlY3V0YWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEzICsyOSwxMSBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNTZXQuaCIKICNpbmNsdWRlICJNYXBEYXRhLmgiCiAjaW5jbHVkZSAiU2V0UHJvdG90eXBlLmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTEgQEAKICNpbmNsdWRlICJF
eGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAi
SXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNp
bmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJM
b29rdXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIlNldFByb3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJ
KHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBs
YXRlUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsOSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnkuaCIKIAotI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtNYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCwxMSArMjgsOSBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRl
ICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtNYXAuaCIKLSNpbmNsdWRl
ICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcFByb3RvdHlwZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtT
ZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDExICsyOCw5IEBACiAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkl0
ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha1NldC5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWFrU2V0UHJvdG90eXBlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDctMjkgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUg
YWxsb2NhdGVkIGluIEF1eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IFRoZSBKU0MgR0MgbmVlZHMgYSB0cnlGYXN0QWxpZ25lZE1hbGxvYygpLCBhbmQgdGhpcyBleHBv
c2VzIHN1Y2ggYSBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAg
ICAgICAgKFdURjo6ZmFzdEFsaWduZWRNYWxsb2MpOgorICAgICAgICAoV1RGOjp0cnlGYXN0QWxp
Z25lZE1hbGxvYyk6CisgICAgICAgIChXVEY6OmZhc3RBbGlnbmVkRnJlZSk6CisgICAgICAgICog
d3RmL0Zhc3RNYWxsb2MuaDoKKwogMjAxNi0wOC0wMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3Vs
YWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXVtBUk02NF0gRml4IGJyYW5jaFRlc3QzMi82
NCB0YWtpbmcgYW4gaW1tZWRpYXRlIGFzIG1hc2sKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RN
YWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShy
ZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDYgQEAKLS8vIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NS0yMDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBt
ZXQ6CkBAIC05Nyw2ICs5NiwxMSBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxp
Z25tZW50CiAgICAgcmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOwogfQog
Cit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkgCit7CisgICAgcmV0dXJuIF9hbGlnbmVkX21hbGxvYyhzaXplLCBhbGlnbm1lbnQpOworfQor
CiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBfYWxpZ25lZF9mcmVlKHAp
OwpAQCAtMTExLDYgKzExNSwxMyBAQCB2b2lkKiBmYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxp
Z25tZW50CiAgICAgcmV0dXJuIHA7CiB9CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSAKK3sKKyAgICB2b2lkKiBwID0gbnVsbHB0cjsK
KyAgICBwb3NpeF9tZW1hbGlnbigmcCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gcDsK
K30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgZnJlZShwKTsKQEAg
LTIzMSw2ICsyNDIsMTEgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVu
dAogICAgIHJldHVybiBibWFsbG9jOjphcGk6Om1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CiB9
CiAKK3ZvaWQqIHRyeUZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplKSAKK3sKKyAgICByZXR1cm4gYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQs
IHNpemUpOworfQorCiB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKiBwKSAKIHsKICAgICBibWFs
bG9jOjphcGk6OmZyZWUocCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMDQwNTUp
CisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC01Myw2ICs1Myw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RGcmVlKHZvaWQq
KTsKIAogLy8gQWxsb2NhdGlvbnMgZnJvbSBmYXN0QWxpZ25lZE1hbGxvYygpIG11c3QgYmUgZnJl
ZWQgdXNpbmcgZmFzdEFsaWduZWRGcmVlKCkuCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogZmFz
dEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJ
VkFURSB2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qp
OwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqKTsKIAogV1RG
X0VYUE9SVF9QUklWQVRFIHNpemVfdCBmYXN0TWFsbG9jU2l6ZShjb25zdCB2b2lkKik7CkBAIC0x
MDcsNiArMTA4LDcgQEAgdXNpbmcgV1RGOjpmYXN0TWFsbG9jU2l6ZTsKIHVzaW5nIFdURjo6ZmFz
dFJlYWxsb2M7CiB1c2luZyBXVEY6OmZhc3RTdHJEdXA7CiB1c2luZyBXVEY6OmZhc3RaZXJvZWRN
YWxsb2M7Cit1c2luZyBXVEY6OnRyeUZhc3RBbGlnbmVkTWFsbG9jOwogdXNpbmcgV1RGOjp0cnlG
YXN0Q2FsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0TWFsbG9jOwogdXNpbmcgV1RGOjp0cnlGYXN0
WmVyb2VkTWFsbG9jOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmgJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KICNpbmNs
dWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlCYXJy
aWVySW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsOSBAQAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25S
dWxlLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgiCiAjaW5jbHVkZSAi
Q29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
ZGVudGlmaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNPTk9iamVjdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cnVjdHVyZUlu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxsb2NhdGVk
IGluIEF1eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE5lZWQgdG8g
I2luY2x1ZGUgbW9yZSB0aGluZ3Mgbm93LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL0pTTlBPYmplY3QuY3BwOgorCiAyMDE2LTA4LTAyICBFbnJpY2EgQ2FzdWNjaSAg
PGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgYnVpbGRpbmcgd2l0aCBjb250ZW50
IGZpbHRlcmluZyBkaXNhYmxlZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDIw
NDA1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk5QSlNP
YmplY3QuaCIKICNpbmNsdWRlICJOUFJ1bnRpbWVPYmplY3RNYXAuaCIKICNpbmNsdWRlICJOUFJ1
bnRpbWVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BdXhpbGlhcnlCYXJy
aWVySW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSWRlbnRpZmllcklubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgpJbmRleDogU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0MDU1
KQorKysgU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjcgQEAKKzIwMTYtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxsb2NhdGVkIGluIEF1eGlsaWFyeSBNYXJrZWRT
cGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoZSBKU0MgR0MgbmVlZHMgdG8gYmUgYWJsZSB0
byB0cnlNZW1hbGlnbiwgYW5kIHRoaXMgcmVmYWN0b3JzIHRoZSBjb2RlIHRvIGV4cG9zZSBzdWNo
IGEKKyAgICAgICAgZnVuY3Rpb24uCisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRvci5jcHA6
CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxs
b2M6OkFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9y
OjphbGxvY2F0ZUltcGwpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpyZWFsbG9jYXRl
KToKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRvci5oOgorICAgICAgICAqIGJtYWxsb2MvQ2Fj
aGUuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjphbGxvY2F0ZSk6CisgICAgICAgIChibWFs
bG9jOjpDYWNoZTo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAqIGJtYWxsb2MvYm1hbGxvYy5oOgor
ICAgICAgICAoYm1hbGxvYzo6YXBpOjptYWxsb2MpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjp0
cnlNZW1hbGlnbik6CisgICAgICAgIChibWFsbG9jOjphcGk6Om1lbWFsaWduKToKKwogMjAxNi0w
Ny0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0
ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGluIHhjY29uZmlnIGZpbGVzIHRvIG1hdGNoIHRoZSBzZGsg
bmFtZXMuCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAy
MDQwNTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjQsNiArNjQsMTggQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShz
aXplX3Qgc2l6ZQogCiB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCBzaXplKQogeworICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0cnVlOworICAgIHJl
dHVybiBhbGxvY2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisK
K3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNp
emUpCit7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOworICAgIHJldHVybiBhbGxv
Y2F0ZUltcGwoYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIEFs
bG9jYXRvcjo6YWxsb2NhdGVJbXBsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBib29s
IGNyYXNoT25GYWlsdXJlKQorewogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkp
OwogCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJsZWQpIHsKQEAgLTgwLDcgKzkyLDEwIEBAIHZv
aWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICAgICAgcmV0dXJuIGFs
bG9jYXRlKHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplKSk7CiAKICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7
Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlTGFy
Z2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxI
ZWFwPjo6Z2V0RmFzdENhc2UoKTsKKyAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisgICAgICAgIHJl
dHVybiBoZWFwLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0
dXJuIGhlYXAtPnRyeUFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKIH0KIAog
dm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUp
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwNDA1NSkKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDEy
ICs0MywxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwogICAg
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90IGFs
aWdubWVudCwgc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBz
aXplX3QpOwogICAgIHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNpemVfdCk7CiAKICAgICB2b2lk
IHNjYXZlbmdlKCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCogYWxsb2NhdGVJbXBsKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgCiAgICAgYm9vbCBh
bGxvY2F0ZUZhc3RDYXNlKHNpemVfdCwgdm9pZComKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3dD
YXNlKHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCShyZXZpc2lvbiAy
MDQwNTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQxLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHNp
emVfdCk7CiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgc3RhdGljIHZv
aWQqIHRyeUFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3RhdGljIHZv
aWQqIGFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgc3RhdGljIHZvaWQg
ZGVhbGxvY2F0ZSh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCosIHNp
emVfdCk7CkBAIC03OSw2ICs4MCwxNCBAQCBpbmxpbmUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlKHNp
emVfdCBzaXplCiAgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsK
IH0KIAoraW5saW5lIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBz
aXplX3Qgc2l6ZSkKK3sKKyAgICBDYWNoZSogY2FjaGUgPSBQZXJUaHJlYWQ8Q2FjaGU+OjpnZXRG
YXN0Q2FzZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dD
YXNlTnVsbENhY2hlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIGNhY2hlLT5hbGxvY2F0
b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiBpbmxpbmUgdm9pZCogQ2Fj
aGU6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIENhY2hl
KiBjYWNoZSA9IFBlclRocmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL2JtYWxsb2MuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9ibWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMsMTIgQEAgaW5saW5l
IHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkKICAgICByZXR1cm4gQ2FjaGU6OmFsbG9jYXRlKHNp
emUpOwogfQogCisvLyBSZXR1cm5zIG51bGwgb24gZmFpbHVyZS4KK2lubGluZSB2b2lkKiB0cnlN
ZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gQ2Fj
aGU6OnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Cit9CisKIC8vIENyYXNoZXMgb24gZmFp
bHVyZS4KIGlubGluZSB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkKIHsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIwNDA1NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDE2LTA3LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQnV0dGVyZmxpZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBpbiBBdXhpbGlh
cnkgTWFya2VkU3BhY2UgaW5zdGVhZCBvZiBDb3BpZWRTcGFjZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTI1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgbmV3IHZhbGlkYXRpb24g
ZmxhZyB0byB0aGUgVk0sIHdoaWNoIGlzIHZlcnkgY2hlYXAgYW5kIHNob3VsZG4ndCBldmVyIGJy
ZWFrCisgICAgICAgIGFueXRoaW5nLiBUaGlzIGVuYWJsZXMgdGhlIGZsYWcgZm9yIGFsbCBuby1j
aml0IHRlc3RzLCBzaW5jZSB0aG9zZSBhcmUgdGhlIG9uZXMgd2hlcmUgd2UgYXJlCisgICAgICAg
IGFscmVhZHkgaGFwcHkgdG8gcGF5IHNvbWUgcHJpY2UgZm9yIGFsdGVyZXJlZCBjb3ZlcmFnZS4K
KworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTYtMDgtMDIg
IEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBidWls
ZGluZyB3aXRoIGNvbnRlbnQgZmlsdGVyaW5nIGRpc2FibGVkLgpJbmRleDogVG9vbHMvU2NyaXB0
cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyMDQwNTUpCisrKyBUb29scy9TY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgJG51bVBh
c3NlcyA9IDAKICMgV2UgZm9yY2UgYWxsIHRlc3RzIHRvIHVzZSBhIHNtYWxsZXIgKDEuNU0pIHN0
YWNrIHNvIHRoYXQgc3RhY2sgb3ZlcmZsb3cgdGVzdHMgY2FuIHJ1biBmYXN0ZXIuCiBCQVNFX09Q
VElPTlMgPSBbIi0tdXNlRlRMSklUPWZhbHNlIiwgIi0tdXNlRnVuY3Rpb25Eb3RBcmd1bWVudHM9
dHJ1ZSIsICItLW1heFBlclRocmVhZFN0YWNrVXNhZ2U9MTU3Mjg2NCJdCiBFQUdFUl9PUFRJT05T
ID0gWyItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9ySklU
U29vbj0xMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA9MjAiLCAiLS10aHJl
c2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcD0yMCIsICItLXRocmVzaG9sZEZvck9wdGlt
aXplU29vbj0yMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MjAiLCAi
LS10aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb249MjAiLCAiLS1tYXhpbXVtRXZhbENhY2hlYWJs
ZVNvdXJjZUxlbmd0aD0xNTAwMDAiXQotTk9fQ0pJVF9PUFRJT05TID0gWyItLXVzZUNvbmN1cnJl
bnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMDAiXQorTk9fQ0pJ
VF9PUFRJT05TID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JK
SVRBZnRlcldhcm1VcD0xMDAiLCAiLS1yZXNldEZyZWVDZWxsc0JhZGx5PXRydWUiXQogRlRMX09Q
VElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUiXQogCiAkcnVubGlzdCA9IFtdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285254</attachid>
            <date>2016-08-03 11:29:19 -0700</date>
            <delta_ts>2016-08-04 20:08:01 -0700</delta_ts>
            <desc>latest</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>203325</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2FycmF5LXN0b3JhZ2UtYXJyYXktdW5zaGlmdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9hcnJheS1zdG9yYWdlLWFycmF5LXVuc2hpZnQuanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvYXJyYXktc3RvcmFnZS1hcnJheS11bnNo
aWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorLy9AIHJ1bkRlZmF1bHQKK3Zh
ciB4ID0gWzIuNSwgMS41XTsKK3gubGVuZ3RoID0gMTAwMDAwMDAwMDsKK3gubGVuZ3RoID0gMjsK
K0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoeCwgMy41KTsKK2lmICh4LnRvU3RyaW5nKCkg
IT0gIjMuNSwyLjUsMS41IikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBkZXNj
cmliZSh4KTsKKwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY29udGlndW91cy1hcnJheS11bnNoaWZ0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2NvbnRpZ3VvdXMtYXJyYXktdW5zaGlm
dC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jb250aWd1b3VzLWFycmF5LXVu
c2hpZnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisvL0AgcnVuRGVmYXVsdAor
dmFyIHggPSBbJ2InLCAnYSddOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAnYycp
OworaWYgKHgudG9TdHJpbmcoKSAhPSAiYyxiLGEiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdDogIiArIGRlc2NyaWJlKHgpOworCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9kb3VibGUtYXJy
YXktdW5zaGlmdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXkt
dW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9kb3VibGUtYXJyYXkt
dW5zaGlmdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKy8vQCBydW5EZWZhdWx0
Cit2YXIgeCA9IFsyLjUsIDEuNV07CitBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKHgsIDMu
NSk7CitpZiAoeC50b1N0cmluZygpICE9ICIzLjUsMi41LDEuNSIpCisgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgZGVzY3JpYmUoeCk7CisKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2lu
dDMyLWFycmF5LXVuc2hpZnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvaW50MzIt
YXJyYXktdW5zaGlmdC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9pbnQzMi1h
cnJheS11bnNoaWZ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorLy9AIHJ1bkRl
ZmF1bHQKK3ZhciB4ID0gWzIsIDFdOworQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh4LCAz
KTsKK2lmICh4LnRvU3RyaW5nKCkgIT0gIjMsMiwxIikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyBkZXNjcmliZSh4KTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEzIEBACisyMDE2LTA3LTI5ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQnV0dGVyZmxpZXMgc2hvdWxkIGJlIGFsbG9jYXRl
ZCBpbiBBdXhpbGlhcnkgTWFya2VkU3BhY2UgaW5zdGVhZCBvZiBDb3BpZWRTcGFjZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTI1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbiBvcmRl
ciB0byBtYWtlIHRoZSBHQyBjb25jdXJyZW50IChidWcgMTQ5NDMyKSwgd2Ugd291bGQgZWl0aGVy
IG5lZWQgdG8gZW5hYmxlIGNvbmN1cnJlbnQKKyAgICAgICAgY29weWluZyBvciB3ZSB3b3VsZCBu
ZWVkIHRvIG5vdCBjb3B5LiBDb25jdXJyZW50IGNvcHlpbmcgY2FycmllcyBhIDEtMiUgdGhyb3Vn
aHB1dCBvdmVyaGVhZAorICAgICAgICBmcm9tIHRoZSBiYXJyaWVycyBhbG9uZS4gQ29uc2lkZXJp
bmcgdGhhdCBNYXJrZWRTcGFjZSBkb2VzIGEgZGVjZW50IGpvYiBvZiBhdm9pZGluZworICAgICAg
ICBmcmFnbWVudGF0aW9uLCBpdCdzIHVubGlrZWx5IHRoYXQgaXQncyB3b3J0aCBwYXlpbmcgMS0y
JSB0aHJvdWdocHV0IGZvciBjb3B5aW5nLiBTbywgd2Ugd2FudAorICAgICAgICB0byBnZXQgcmlk
IG9mIGNvcGllZCBzcGFjZS4gVGhpcyBjaGFuZ2UgbW92ZXMgY29waWVkIHNwYWNlJ3MgYmlnZ2Vz
dCBjbGllbnQgb3ZlciB0byBtYXJrZWQKKyAgICAgICAgc3BhY2UuCisgICAgICAgIAorICAgICAg
ICBNb3ZpbmcgYnV0dGVyZmxpZXMgdG8gbWFya2VkIHNwYWNlIG1lYW5zIGhhdmluZyB0aGVtIHVz
ZSB0aGUgbmV3IEF1eGlsaWFyeSBIZWFwQ2VsbAorICAgICAgICBhbGxvY2F0aW9uIHBhdGguIFRo
aXMgaXMgYSBmYWlybHkgbWVjaGFuaWNhbCBjaGFuZ2UuIEF0IGEgaGlnaCBsZXZlbCB0aGlzIGRv
ZXMgdGhlc2UgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBXZSB1c2UgQXV4aWxpYXJ5QmFy
cmllciBpbnN0ZWFkIG9mIENvcHlCYXJyaWVyLgorICAgICAgICAKKyAgICAgICAgLSBXZSB1c2Ug
dHJ5QWxsb2NhdGVBdXhpbGlhcnkgaW5zdGVhZCBvZiB0cnlBbGxvY2F0ZVN0b3JhZ2UuIEkgZ290
IHJpZCBvZiB0aGUgc2lsbHkKKyAgICAgICAgICBDaGVja2VkQm9vbGVhbiBzdHVmZiwgc2luY2Ug
aXQncyBzbyBtdWNoIG1vcmUgdHJvdWJsZSB0aGFuIGl0J3Mgd29ydGguCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBKSVRzIGhhdmUgdG8gZW1pdCBpbmxpbmVkIG1hcmtlZCBzcGFjZSBhbGxvY2F0
aW9ucyBpbnN0ZWFkIG9mIGlubGluZSBjb3B5IHNwYWNlCisgICAgICAgICAgYWxsb2NhdGlvbnMu
CisgICAgICAgIAorICAgICAgICAtIEV2ZXJ5b25lIGhhcyB0byBnZXQgdXNlZCB0byB6ZXJvaW5n
IHRoZWlyIGJ1dHRlcmZsaWVzIGFmdGVyIGFsbG9jYXRpb24gaW5zdGVhZCBvZiByZWx5aW5nCisg
ICAgICAgICAgb24gdGhlbSBiZWluZyBwcmUtemVyb2VkIGJ5IHRoZSBHQy4gQ29waWVkIHNwYWNl
IHdvdWxkIHplcm8gdGhpbmdzIGZvciB5b3UsIHdoaWxlIG1hcmtlZAorICAgICAgICAgIHNwYWNl
IGRvZXNuJ3QuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHN0aWxsIGEgd29yayBpbiBwcm9n
cmVzcy4gSXQgc3RpbGwgZmFpbHMgc29tZSBpbnRlcm5hbCBmdXp6aW5nIHRlc3RzIGFuZCBJIGhh
dmVuJ3QKKyAgICAgICAgbWVhc3VyZWQgcGVyZm9ybWFuY2UgeWV0LgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZURp
cmVjdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVOZXdBcnJheVdpdGhTaXplKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6aW5pdGlhbGl6ZUFycmF5RWxlbWVudHMpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXpl
SW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmVtaXRSaWdodFNo
aWZ0U25pcHBldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9j
YXRlSGVhcENlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxv
Y2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0
ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRv
ckZvclNpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0
ZVZhcmlhYmxlU2l6ZWRPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjphbGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3Rz
KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6Omdyb3cpOgorICAgICAgICAoSlND
OjpDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIpOgorICAgICAgICAqIGhlYXAv
Q29uc2VydmF0aXZlUm9vdHMuaDoKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OnNp
emUpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6cm9vdHMpOgorICAgICAgICAq
IGhlYXAvQ29weVRva2VuLmg6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpT
Qzo6SGVhcDo6Y29weUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAg
ICAgICAoSlNDOjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3Rvcik6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdFdpdGhEZXN0cnVjdG9yKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YSk6CisgICAgICAgIChK
U0M6OkhlYXA6OnN0b3JhZ2VBbGxvY2F0b3IpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6aGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ip
OgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZSk6CisgICAgICAgIChK
U0M6OkhlYXA6OnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVB
dXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeSk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnRyeVJlYWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlND
OjpIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRGcmVl
QmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmaW5kR0NPYmplY3RQb2ludGVyKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6aXNQb2ludGVyR0NPYmplY3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpI
ZWFwOjppc1ZhbHVlR0NPYmplY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjppc1BvaW50ZXJHQ09i
amVjdCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJldGlyZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwpOgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeVBvcEZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
SGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVC
bG9jayk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAg
ICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpkZXN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6Y2VsbEtpbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6
OmhlYXApOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRha2VMYXN0QWN0aXZlQmxv
Y2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmluaXQpOgorICAgICAgICAoSlND
OjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp0cnlDcmVhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmNlbGxBbGlnbik6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpibG9j
a0Zvcik6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpNYXJr
ZWRTcGFjZTo6c3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IpOgorICAgICAgICAoSlND
OjpNYXJrZWRTcGFjZTo6c3Vic3BhY2VGb3JPYmplY3RzV2l0aG91dERlc3RydWN0b3IpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlND
OjpNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjphcHBlbmRUb01hcmtTdGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptYXJr
QXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om5vdGVMaXZlQXV4aWxpYXJ5
Q2VsbCk6CisgICAgICAgIChKU0M6OlNldEN1cnJlbnRDZWxsU2NvcGU6OlNldEN1cnJlbnRDZWxs
U2NvcGUpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAqIGluc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5j
cHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBwYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6QXV4aWxpYXJ5QmFycmllcik6CisgICAgICAgIChKU0M6
OkF1eGlsaWFyeUJhcnJpZXI6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmll
cjo6Z2V0KToKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6c2xvdCk6CisgICAgICAg
IChKU0M6OkF1eGlsaWFyeUJhcnJpZXI6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpB
dXhpbGlhcnlCYXJyaWVyOjpzZXRXaXRob3V0QmFycmllcik6CisgICAgICAgICogcnVudGltZS9B
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5
QmFycmllcjxUPjo6QXV4aWxpYXJ5QmFycmllcik6CisgICAgICAgIChKU0M6OkF1eGlsaWFyeUJh
cnJpZXI8VD46OnNldCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xvbmVk
QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0
eSk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuaDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKToKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FsbGVlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgICogcnVudGltZS9KU01h
cEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0Q2xhc3NQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aGVh
cFNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91cyk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29udmVydEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVy
dEludDMyVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERv
dWJsZVRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pT
UHJvbWlzZVByb3RvdHlwZS5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Rl
bXBsYXRlUmVnaXN0cnlLZXkuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5jcHA6CisgICAgICAgICogcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvUHJv
eHlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6Cisg
ICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAgICogcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6
cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAgICogcnVudGltZS9TZXRDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dl
YWtTZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2FycmF5LXN0b3Jh
Z2UtYXJyYXktdW5zaGlmdC5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2NvbnRp
Z3VvdXMtYXJyYXktdW5zaGlmdC5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2Rv
dWJsZS1hcnJheS11bnNoaWZ0LmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvaW50
MzItYXJyYXktdW5zaGlmdC5qczogQWRkZWQuCisKIDIwMTYtMDgtMDIgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBidWlsZGluZyB3aXRoIGNvbnRl
bnQgZmlsdGVyaW5nIGRpc2FibGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNiArMzIy
LDggQEAKIAkJMEYzOEIwMTgxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNDE3
Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCAqLzsgfTsKIAkJMEYzOEIwMTkx
N0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNTE3Q0ZFNzU1MDBCMTQ0RDMg
LyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCAqLzsgfTsKIAkJMEYzOEIwMUExN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0
aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4RDJBMDFENDQxOTY2
MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMzhEMkEzMUQ0NDE5NkQwMDY4MDQ5OSAvKiBBdXhp
bGlhcnlCYXJyaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzOTJDODkxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzkyQzg3MUI0NjE4ODQw
MDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgKi87IH07CiAJCTBGMzkyQzhBMUI0NjE4ODQw
MDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRG
dXp6LmggKi87IH07CiAJCTBGM0ExQkY5MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNBMUJGNzFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2Uu
Y3BwICovOyB9OwpAQCAtNTcyLDYgKzU3NCw3IEBACiAJCTBGQTdBOEVCMThCNDEzQzgwMDUyMzcx
RCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi87IH07CiAJCTBGQTdBOEVD
MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkE3QThFRTE4Q0U0
RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVEMThDRTRGRDgwMDUyMzcx
RCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovOyB9OworCQkwRkFERTY3MzFENEQy
M0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oICov
OyB9OwogCQkwRkFGN0VGRDE2NUJBOTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZBMTY1
QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFGN0VGRTE2
NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklU
RGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZCMTA1ODUxNjc1NDgwRjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTgyMTY3NTQ4MEMw
MEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgKi87IH07CkBAIC0yNTE5LDYgKzI1MjIsOCBAQAogCQkw
RjM4QjAxNDE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29tcGlsYXRpb25LZXkuaDsgcGF0aCA9IGRmZy9E
RkdDb21waWxhdGlvbktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAx
NTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5jcHA7IHBhdGggPSBk
ZmcvREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbk1vZGUuaDsgcGF0aCA9IGRm
Zy9ERkdDb21waWxhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYz
OEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXV4aWxpYXJ5QmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmll
cklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV4aWxpYXJ5QmFy
cmllcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOTJDODcxQjQ2
MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRGdXp6LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0
RnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzkyQzg4MUI0NjE4ODQw
MDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdPU1JFeGl0RnV6ei5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRGdXp6Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHUHV0U3RhY2tT
aW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc2Niw2ICsy
NzcxLDcgQEAKIAkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQURFNjcyMUQ0RDIz
QkMwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIZWFwVXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2NUJB
OTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0
S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGl0S2luZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjQ4LDYgKzUyNTQsNyBAQAogCQkJ
CUMyNEQzMUUxMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5oICovLAogCQkJCUMy
RTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovLAogCQkJCUMyRTUyNkJD
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLywKKwkJCQkwRkFERTY3MjFENEQyM0JD
MDA3Njg0NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJCQlGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQg
LyogSGVhcFZlcmlmaWVyLmNwcCAqLywKIAkJCQlGRTdCQTYwRTFBMUE3Q0VDMDBGMUY3QjQgLyog
SGVhcFZlcmlmaWVyLmggKi8sCiAJCQkJQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3Jl
bWVudGFsU3dlZXBlci5jcHAgKi8sCkBAIC01NjEwLDYgKzU2MTcsOCBAQAogCQkJCUY2OTJBODRE
MDI1NTU5N0QwMUZGNjBGNyAvKiBBcnJheVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NEUw
MjU1NTk3RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmggKi8sCiAJCQkJMEZCN0YzOEExNUVE
OEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oICovLAorCQkJCTBGMzhEMkEwMUQ0NDE5NjYw
MDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi8sCisJCQkJMEYzOEQyQTExRDQ0MTk2NjAw
NjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggKi8sCiAJCQkJNTI2NzhGOEMxQTAz
MTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5jcHAgKi8sCiAJCQkJNTI2NzhGOEQx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovLAogCQkJCTE0N0I4M0FB
MEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oICovLApAQCAt
NTc3NSw3ICs1Nzg0LDYgQEAKIAkJCQk3MERDM0UwODFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0
b3JQcm90b3R5cGUuaCAqLywKIAkJCQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJh
eS5jcHAgKi8sCiAJCQkJOTM4NzcyRTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAqLywK
LQkJCQk1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLywKIAkJ
CQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJ
MEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRjJC
NjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywK
QEAgLTU3ODUsNiArNTc5Myw3IEBACiAJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKIAkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCisJCQkJNTM5RkI4QjkxQzk5REE3QzAwOTQw
RkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3
IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3
IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAv
KiBKU0NhbGxlZS5jcHAgKi8sCkBAIC03MjY0LDYgKzcyNzMsNyBAQAogCQkJCTBGMzM4RTFDMUJG
Mjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk0OTU4ODFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM0RjRCNkYzMUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSBpbiBIZWFkZXJzICovLAorCQkJCTBGMzhEMkEyMUQ0NDE5NjgwMDY4MDQ5OSAvKiBBdXhp
bGlhcnlCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0
MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFCRDE3
RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJG
Q0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03
Njk2LDYgKzc3MDYsNyBAQAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0
ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTg3QTBGMUMwMzBENkMwMDM4QkJD
QSAvKiBTbmlwcGV0T3BlcmFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzAxQjREQzE0
MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkFERTY3MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUExNTg3RDc1MUI0REMxQzYwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRD
b25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1Mzk4RkFCMUM3NTBEQTQwMDYw
QTk2MyAvKiBIZWFwUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDcyMUI0REMx
NDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNzgxOCw2ICs3ODI5LDcgQEAKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyog
SlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThBNDExNzkwMDhB
MEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAw
ODc0MjE3Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzhE
MkEzMUQ0NDE5NkQwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBp
biBIZWFkZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVu
dmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA0MDU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIwNiwzNCArMTIwNiwyMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5l
d1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAg
ICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLmhlYXAuc3RvcmFn
ZUFsbG9jYXRvcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFp
bmluZyk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXls
b2FkRW5kKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvciA9IHZtLmhlYXAuYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0YShuZXdTaXplKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJmFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAg
ICBqaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywg
c2xvd1BhdGgpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVhbGxvY2F0aW5nKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxv
Y2F0aW5nIChpLmUuIHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQogICAgICAgICAgICAgICAg
ICAgICAvLyBhbHJlYWR5IGhhZCBvdXQtb2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlKS4KICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5l
d1NpemUgPiBvbGRTaXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNo
R1BSMyA9IG9sZCBzdG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9
IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBv
ZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDQwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NTIsNyArODUyLDYgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheVdpdAogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJBcnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpKSkp
OwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1
Y3R1cmUsIHNpemUpOwotICAgIHJlc3VsdC0+YnV0dGVyZmx5KCk7IC8vIEVuc3VyZSB0aGF0IHRo
ZSBiYWNraW5nIHN0b3JlIGlzIGluIHRvLXNwYWNlLgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzkwNywyNyArMzkwNywzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHJl
c3VsdEdQUiwgc3RvcmFnZUdQUikpOwotICAgICAgICAgICAgbV9qaXQuc3ViUHRyKHNjcmF0Y2hH
UFIsIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVT
aXplZCgKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSLCBtX2ppdC52bSgpLT5oZWFwLnN1YnNw
YWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsCisgICAgICAgICAg
ICAgICAgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgICAgICBtX2ppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlR1BSKTsKICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpOwog
ICAgICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
LCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNp
emVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
VmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJs
ZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIG5hbiA9
IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobmFuLnUuYXNCaXRzLnRhZyksIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobmFuLnUuYXNCaXRzLnBh
eWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwot
ICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgSlNWYWx1ZSBob2xlOworICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRl
eGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgaG9sZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5j
b2RlQXNEb3VibGUsIFBOYU4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhv
bGUgPSBKU1ZhbHVlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsK
KyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihob2xlLnUuYXNCaXRzLnRhZyks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihob2xlLnUuYXNC
aXRzLnBheWxvYWQpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7
CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0
b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg2OSwyNyArMzg2OSwz
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQubHNo
aWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAg
ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHJlc3VsdEdQUiwgc3RvcmFnZUdQUikpOwotICAgICAg
ICAgICAgbV9qaXQuc3ViUHRyKHNjcmF0Y2hHUFIsIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAg
bV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCgKKyAgICAgICAgICAgICAgICBzdG9yYWdl
R1BSLCBtX2ppdC52bSgpLT5oZWFwLnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSgpLCByZXN1bHRH
UFIsIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7
CisgICAgICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBlbWl0
QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSkgeworICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpCiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0
PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92
ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2Ny
YXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0g
bV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3As
ICZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxv
b3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5saW5rVG8obG9vcCwgJm1faml0
KTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9j
YXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCisgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENhbGxB
cnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwg
cmVzdWx0R1BSLAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSks
CiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSksCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOwogCiAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aCA+PSBudW1FbGVtZW50cyk7Ci0g
ICAgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCB2ZWN0b3JMZW5ndGgp
OworICAgIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JM
ZW5ndGgoc3RydWN0dXJlLCB2ZWN0b3JMZW5ndGgpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CiAKQEAgLTEwMywxMiArMTAzLDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICBzaXplICs9IG91dE9mTGluZUNhcGFjaXR5
ICogc2l6ZW9mKEpTVmFsdWUpOwogCiAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZCgKLSAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShUcnVzdGVkSW1t
MzIoc2l6ZSksIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQot
ICAgICAgICAgICAgbV9qaXQuc3ViUHRyKFRydXN0ZWRJbW0zMih2ZWN0b3JMZW5ndGggKiBzaXpl
b2YoSlNWYWx1ZSkpLCBzdG9yYWdlR1BSKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9q
aXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZUdQ
Uik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigmbV9qaXQudm0oKS0+aGVhcC5h
bGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG1f
aml0LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZFB0cigKKyAgICAgICAgICAgIFRy
dXN0ZWRJbW0zMihvdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZihJ
bmRleGluZ0hlYWRlcikpLAorICAgICAgICAgICAgc3RvcmFnZUdQUik7CiAgICAgfSBlbHNlCiAg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAKQEAgLTEy
NywxNCArMTI3LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUK
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdSYXdPYmplY3QsIHJlc3VsdEdQ
Uiwgc3RvcmFnZUdQUiwKICAgICAgICAgc3RydWN0dXJlLCB2ZWN0b3JMZW5ndGgpKTsKIAotICAg
IGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgJiYgbnVtRWxlbWVudHMg
PCB2ZWN0b3JMZW5ndGgpIHsKKyAgICBpZiAobnVtRWxlbWVudHMgPCB2ZWN0b3JMZW5ndGgpIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3
aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGhhc0Rv
dWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NChzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBzaXplb2YoZG91YmxlKSAqIGkpKTsKICNlbHNlCiAgICAgICAgIEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IgdmFsdWU7Ci0gICAgICAgIHZhbHVlLmFzSW50NjQgPSBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTikpOworICAgICAgICBpZiAoaGFzRG91
YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgdmFsdWUuYXNJbnQ2
NCA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFO
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlLmFzSW50NjQgPSBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7
IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVz
dGVkSW1tMzIodmFsdWUuYXNCaXRzLnRhZyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIHNpemVvZihkb3VibGUpICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMih2YWx1
ZS5hc0JpdHMucGF5bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNp
emVvZihkb3VibGUpICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSkpOwpAQCAtNjY5MiwxOCArNjY5OCwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDMo
dGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBH
UFJSZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5n
cHIoKTsKICAgICAgICAgCiAgICAgQVNTRVJUKCFub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3Vz
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGluZUNhcGFj
aXR5ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAg
ICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPQotICAgICAgICBlbWl0QWxsb2Nh
dGVCYXNpY1N0b3JhZ2UoCi0gICAgICAgICAgICBUcnVzdGVkSW1tMzIoaW5pdGlhbE91dE9mTGlu
ZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotCi0gICAgbV9qaXQu
YWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHNjcmF0Y2hHUFIxKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICBtX2ppdC5tb3ZlKAorICAgICAgICBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cigmbV9qaXQudm0oKS0+aGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlE
YXRhKHNpemUpKSwKKyAgICAgICAgc2NyYXRjaEdQUjIpOworICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93UGF0aDsKKyAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOworICAgIG1faml0LmFkZFB0cihKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTMyKHNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRj
aEdQUjEpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIxKSk7CkBAIC02NzM4LDE2ICs2NzUwLDIx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBTdG9yYWdl
T3BlcmFuZCBvbGRTdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBvbGRTdG9yYWdlR1BSID0gb2xkU3RvcmFnZS5n
cHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIoKTsKLSAgICAgICAgCi0gICAgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGggPQotICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1
c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSk7Ci0KLSAgICBtX2ppdC5hZGRQdHIoSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQ
UjEpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOworICAgIAorICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBtX2ppdC5tb3ZlKAorICAgICAg
ICBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cigmbV9qaXQudm0oKS0+aGVhcC5hbGxvY2F0b3JG
b3JBdXhpbGlhcnlEYXRhKG5ld1NpemUpKSwKKyAgICAgICAgc2NyYXRjaEdQUjIpOworICAgIG1f
aml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBz
bG93UGF0aCk7CisgICAgCisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
MzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7CiAgICAg
ICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwoc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BS
MSwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTQsNyArNTE0LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHB1YmxpY0xlbmd0aCA9IHJlc3VsdEFycmF5LnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBwdWJsaWNM
ZW5ndGgpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPQorICAg
ICAgICAgICAgICAgICAgICAgICAgQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxl
bmd0aChzdHJ1Y3R1cmUsIHB1YmxpY0xlbmd0aCk7CiAKICAgICAgICAgICAgICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGluZGV4VUlEID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5pbmRleC5pbXBs
KCk7CiAgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbnB1dFVJRCA9IHZt
KCkucHJvcGVydHlOYW1lcy0+aW5wdXQuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzY5LDcgKzM3NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNpemUsIG1f
b3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6ZShtaW5DYXBhY2l0
eSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZmFzdE9iamVjdCA9IGFsbG9jYXRlVmFy
aWFibGVTaXplZE9iamVjdDxEaXJlY3RBcmd1bWVudHM+KAotICAgICAgICAgICAgICAgIHNpemUs
IHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpOworICAgICAgICAgICAgICAg
IG1fb3V0Lnplcm9FeHRQdHIoc2l6ZSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xv
d1BhdGgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0
aC52YWx1ZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbGVuZ3RoKTsKQEAg
LTQwNjUsOSArNDA2NSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZs
eVNpemUgPSBtX291dC5hZGQoCiAgICAgICAgICAgICAgICAgcGF5bG9hZFNpemUsIG1fb3V0LmNv
bnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5k
KGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSBhbGxvY2F0b3Ig
PSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgICAgIHZtKCkuaGVhcC5zdWJzcGFjZUZv
ckF1eGlsaWFyeURhdGEoKSwgYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAgICAg
TFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChhbGxvY2F0b3IsIGZhaWxD
YXNlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0
LnN1YihlbmRPZlN0b3JhZ2UsIHBheWxvYWRTaXplKTsKKyAgICAgICAgICAgIExWYWx1ZSBidXR0
ZXJmbHkgPSBtX291dC5hZGQoc3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVv
ZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIG9i
amVjdCA9IGFsbG9jYXRlT2JqZWN0PEpTQXJyYXk+KHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBmYWls
Q2FzZSk7CiAgICAgICAgICAgICAKQEAgLTY5MjIsMTEgKzY5MjQsMTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdl
QW5kR2V0RW5kKGJ1dHRlcmZseVNpemUsIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKAorICAgICAgICAgICAgICAgICAg
ICBhbGxvY2F0b3JGb3JTaXplKHZtKCkuaGVhcC5zdWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSwg
YnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpLAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCk7
CiAKICAgICAgICAgICAgICAgICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0gbV9vdXQuYWRk
KAotICAgICAgICAgICAgICAgICAgICBtX291dC5zdWIoZW5kT2ZTdG9yYWdlLCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KHNpemVvZihJbmRleGluZ0hlYWRlcikgLSBpbmRleGluZ0hlYWRlclNpemUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhcnRPZlN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwog
CiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGZhc3RCdXR0ZXJm
bHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAg
ICAKQEAgLTc3MjAsMTAgKzc3MjUsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5pdGlhbGl6
ZUFycmF5RWxlbWVudHMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgTFZhbHVlIHZlY3Rvckxl
bmd0aCwgTFZhbHVlIGJ1dHRlcmZseSkKICAgICB7Ci0gICAgICAgIGlmICghaGFzRG91YmxlKGlu
ZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBhbHJlYWR5IGluaXRpYWxpemVk
IGV2ZXJ5dGhpbmcgdG8gSlNWYWx1ZSgpIGZvciB1cy4KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQorICAgICAgICBMVmFsdWUgaG9sZTsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShpbmRl
eGluZ1R5cGUpKQorICAgICAgICAgICAgaG9sZSA9IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9j
YXN0PGludDY0X3Q+KFBOYU4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaG9sZSA9IG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpOwogCiAgICAgICAgIC8v
IERvdWJsZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byBQTmFOLgogICAgICAgICBMQmFzaWNCbG9j
ayBpbml0TG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC03NzM4LDkgKzc3NDQsNyBAQCBwcml2
YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkoSW50MzIsIG9yaWdpbmFsSW5k
ZXgpOwogICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBv
cmlnaW5hbFBvaW50ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwKLSAg
ICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0
QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICBtX291dC5zdG9yZTY0KGhvbGUsIFR5cGVk
UG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9p
bnRlcikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG5leHRJbmRleCA9IG1fb3V0LnN1Yihp
bmRleCwgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGlu
ZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CkBAIC03ODAxLDEyICs3ODA1LDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZW5k
T2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBt
X291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0
aCk7CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVzICogc2l6ZW9m
KEpTVmFsdWUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVh
cC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVJbkJ5dGVzKTsKKyAgICAgICAgTFZhbHVl
IHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cigmYWxs
b2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFz
dEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5j
b25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CisgICAg
ICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgCiAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC04Mzc2LDcgKzgzODEsNyBAQCBw
cml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0KIAotICAgIExW
YWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
CisgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxv
Y2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gbV9vdXQu
bmV3QmxvY2soKTsKICAgICAKQEAgLTgzOTcsNyArODQwMiw3IEBAIHByaXZhdGU6CiAgICAgICAg
IG1fb3V0LnN0b3JlUHRyKAogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihyZXN1bHQsIG1faGVh
cHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAgICAgICAgICBhbGxvY2F0b3IsIG1faGVhcHMu
TWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7Ci0KKyAgICAgICAgCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtODQxMSw3ICs4NDE2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CiAgICAgICAgIHN0
b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CkBAIC04NDM5LDQ2ICs4NDQ0LDU0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDbGFz
c1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgp
OwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0gICAgTFZh
bHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNpemUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0
aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShMVmFsdWUgc3Vic3BhY2UsIExWYWx1ZSBz
aXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
IShNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIC0g
MSkpLCAiTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAmIChN
YXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXByZWNpc2VT
dGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAKLSAgICAgICAgTFZhbHVlIHN1YnNwYWNl
ID0gbV9vdXQuY29uc3RJbnRQdHIoJnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9mVHlwZTxD
bGFzc1R5cGU+KCkpOwotICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxDYXNlQmxv
Y2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJnZU9yT3ZlcnNp
emVDYXNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsYXJn
ZUNhc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgdXBy
b3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNl
OjpwcmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxv
dyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVjaXNlQ3V0
b2ZmKSk7CisgICAgICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNpemUsIG1f
b3V0LmNvbnN0SW50UHRyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAgICAgICAg
TFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5jb25zdElu
dFB0cihNYXJrZWRTcGFjZTo6cHJlY2lzZUN1dG9mZikpOwogICAgICAgICBtX291dC5icmFuY2go
aXNTbWFsbCwgdW5zdXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVyc2l6ZUNh
c2VCbG9jaykpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhzbWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrKTsKICAg
ICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAg
ICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBzdWJzcGFj
ZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5kZWRTaXpl
LCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXApKSkp
KTsKKyAgICAgICAgICAgIG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQz
MihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9jayk7CiAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91bmRlZFNp
emUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAorICAg
ICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoTWFy
a2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikpLAogICAgICAgICAgICAgdXN1YWxseShsYXJnZUNh
c2VCbG9jayksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGFkZHJlc3MgPSBt
X291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNl
X2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQuemVyb0V4
dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0
KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwKSkpKSk7CisgICAgICAgICAgICBtX291dC5sU2hy
KHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpp
bXByZWNpc2VTdGVwKSkpKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxvY2F0b3Ig
PSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGkocG9pbnRl
clR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKLSAgICAgICAgCisgICAg
ICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgc21hbGxBbGxvY2F0b3IsIGxhcmdl
QWxsb2NhdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoTWFy
a2VkU3BhY2U6OlN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9vdXQuY29u
c3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgIH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVT
aXplZE9iamVjdCgKKyAgICAgICAgTFZhbHVlIHNpemUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBM
VmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExW
YWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgdm0oKS5oZWFw
LnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSwgc2l6ZSwgc2xvd1BhdGgpOwog
ICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIGJ1dHRl
cmZseSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTg1NTcsMzQgKzg1NzAsMzQgQEAgcHJp
dmF0ZToKICAgICBBcnJheVZhbHVlcyBhbGxvY2F0ZUpTQXJyYXkoCiAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1FbGVtZW50cywgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
CiAgICAgewotICAgICAgICBBU1NFUlQoCisgICAgICAgIERGR19BU1NFUlQoCisgICAgICAgICAg
ICBtX2dyYXBoLCBtX25vZGUsCiAgICAgICAgICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpCiAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIXN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIG51bUVsZW1lbnRzKTsKKyAgICAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rv
ckxlbmd0aCgwbHUsIG51bUVsZW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRP
ZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJ
bmRleGluZ0hlYWRlcikpLAotICAgICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICBNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRh
KAorICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRl
SGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoCi0gICAgICAgICAgICBl
bmRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxl
bmd0aCkpOworICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9y
YWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAg
IAotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oCi0gICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUg
b2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIHNs
b3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQz
MihudW1FbGVtZW50cyksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KTsKICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHZlY3Rvckxlbmd0aCks
IGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgICAg
ICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksCi0gICAgICAg
ICAgICAgICAgICAgIGJ1dHRlcmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllc1tp
XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKworICAgICAgICBMVmFsdWUgaG9sZTsKKyAg
ICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAg
ICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhvbGUgPSBtX291dC5jb25zdEludDY0KEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxl
bWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
aG9sZSwgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBBcnJheVZhbHVlcyhvYmplY3QsIGJ1dHRlcmZseSk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2
ZVJvb3RzLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIK
ICNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBVdGlsLmgiCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCkBAIC01MSwxNiArNTIsMTYgQEAgQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJv
b3RzKE1hcgogQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCiB7CiAgICAg
aWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29t
bWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAg
ICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5
ICogc2l6ZW9mKEhlYXBDZWxsKikpOwogfQogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93
KCkKIHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNhcGFj
aXR5ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKLSAgICBKU0NlbGwqKiBu
ZXdSb290cyA9IHN0YXRpY19jYXN0PEpTQ2VsbCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENv
bW1pdChuZXdDYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSkpOwotICAgIG1lbWNweShuZXdSb290
cywgbV9yb290cywgbV9zaXplICogc2l6ZW9mKEpTQ2VsbCopKTsKKyAgICBIZWFwQ2VsbCoqIG5l
d1Jvb3RzID0gc3RhdGljX2Nhc3Q8SGVhcENlbGwqKj4oT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRD
b21taXQobmV3Q2FwYWNpdHkgKiBzaXplb2YoSGVhcENlbGwqKSkpOworICAgIG1lbWNweShuZXdS
b290cywgbV9yb290cywgbV9zaXplICogc2l6ZW9mKEhlYXBDZWxsKikpOwogICAgIGlmIChtX3Jv
b3RzICE9IG1faW5saW5lUm9vdHMpCi0gICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJl
bGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSk7CisgICAgICAgIE9T
QWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVv
ZihIZWFwQ2VsbCopKTsKICAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgbV9yb290
cyA9IG5ld1Jvb3RzOwogfQpAQCAtNzIsMTMgKzczLDE0IEBAIGlubGluZSB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjpnZW5lcmljQWQKIAogICAgIG1fY29waWVkU3BhY2UtPnBpbklmTmVjZXNzYXJ5
KHApOwogCi0gICAgaWYgKCFIZWFwOjppc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsICptX2Jsb2Nr
cywgcCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkK
LSAgICAgICAgZ3JvdygpOwotCi0gICAgbV9yb290c1ttX3NpemUrK10gPSBzdGF0aWNfY2FzdDxK
U0NlbGwqPihwKTsKKyAgICBIZWFwVXRpbDo6ZmluZEdDT2JqZWN0UG9pbnRlcnMoCisgICAgICAg
IGZpbHRlciwgKm1fYmxvY2tzLCBwLAorICAgICAgICBbJl0gKHZvaWQqIHApIHsKKyAgICAgICAg
ICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBncm93KCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fcm9vdHNbbV9zaXplKytdID0gYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4ocCk7CisgICAgICAgIH0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJr
SG9vaz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZl
Um9vdHMuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsOCArMzEsOCBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIEhlYXBDZWxsOwogY2xhc3Mg
SklUU3R1YlJvdXRpbmVTZXQ7Ci1jbGFzcyBKU0NlbGw7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJv
b3RzIHsKIHB1YmxpYzoKQEAgLTQ0LDExICs0NCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQo
dm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQm
KTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpOwotICAgIEpTQ2VsbCoqIHJvb3RzKCk7CisgICAg
SGVhcENlbGwqKiByb290cygpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHkgPSAxMjg7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25JbmxpbmVD
YXBhY2l0eSA9IDgxOTIgLyBzaXplb2YoSlNDZWxsKik7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBub25JbmxpbmVDYXBhY2l0eSA9IDgxOTIgLyBzaXplb2YoSGVhcENlbGwqKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KICAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVy
KHZvaWQqLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29rJik7CkBAIC01OCwxMiArNTgsMTIgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIGdyb3coKTsKIAotICAgIEpTQ2VsbCoqIG1fcm9vdHM7
CisgICAgSGVhcENlbGwqKiBtX3Jvb3RzOwogICAgIHNpemVfdCBtX3NpemU7CiAgICAgc2l6ZV90
IG1fY2FwYWNpdHk7CiAgICAgTWFya2VkQmxvY2tTZXQqIG1fYmxvY2tzOwogICAgIENvcGllZFNw
YWNlKiBtX2NvcGllZFNwYWNlOwotICAgIEpTQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBh
Y2l0eV07CisgICAgSGVhcENlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsK
IAogaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCkBAIC03MSw3ICs3MSw3
IEBAIGlubGluZSBzaXplX3QgQ29uc2VydmF0aXZlUm9vdHM6OnNpemUoKQogICAgIHJldHVybiBt
X3NpemU7CiB9CiAKLWlubGluZSBKU0NlbGwqKiBDb25zZXJ2YXRpdmVSb290czo6cm9vdHMoKQor
aW5saW5lIEhlYXBDZWxsKiogQ29uc2VydmF0aXZlUm9vdHM6OnJvb3RzKCkKIHsKICAgICByZXR1
cm4gbV9yb290czsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tl
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5o
CShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9r
ZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw2IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKICAgICBU
eXBlZEFycmF5VmVjdG9yQ29weVRva2VuLAogICAgIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwK
ICAgICBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDEyICs1OTgsNiBAQCB2
b2lkIEhlYXA6OmNvcHlCYWNraW5nU3RvcmVzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgQ29weVdvcmtMaXN0JiB3b3JrTGlzdCA9IGJsb2NrLT53
b3JrTGlzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDb3B5V29ya2xpc3RJdGVt
IGl0ZW0gOiB3b3JrTGlzdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
LnRva2VuKCkgPT0gQnV0dGVyZmx5Q29weVRva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCksIGNvcHlWaXNpdG9yLCBCdXR0ZXJmbHlDb3B5
VG9rZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCktPm1ldGhvZFRhYmxlKCktPmNv
cHlCYWNraW5nU3RvcmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2Vs
bCgpLCBjb3B5VmlzaXRvciwgaXRlbS50b2tlbigpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTEzNDcsOCArMTM0MSwxNSBAQCB2b2lkIEhlYXA6OnJlc2V0QWxsb2NhdG9ycygpCiAK
IHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiB7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAogICAgIEdDUEhBU0UoVXBkYXRlQWxsb2NhdGlv
bkxpbWl0cyk7CiAgICAgCisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygiXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAiLCBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlLCAiXG4iKTsKKyAgICB9CisgICAgCiAgICAgLy8gQ2FsY3VsYXRl
IG91ciBjdXJyZW50IGhlYXAgc2l6ZSB0aHJlc2hvbGQgZm9yIHRoZSBwdXJwb3NlIG9mIGZpZ3Vy
aW5nIG91dCB3aGVuIHdlIHNob3VsZAogICAgIC8vIHJ1biBhbm90aGVyIGNvbGxlY3Rpb24uIFRo
aXMgaXNuJ3QgdGhlIHNhbWUgYXMgZWl0aGVyIHNpemUoKSBvciBjYXBhY2l0eSgpLCB0aG91Z2gg
aXQgc2hvdWxkCiAgICAgLy8gYmUgc29tZXdoZXJlIGJldHdlZW4gdGhlIHR3by4gVGhlIGtleSBp
cyB0byBtYXRjaCB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgY2FsbHMgdG8KQEAgLTEz
NjQsNiArMTM2NSw4IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAgICAg
Ly8gb2YgZnJhZ21lbnRhdGlvbiwgdGhpcyBtYXkgYmUgc3Vic3RhbnRpYWwuIEZvcnR1bmF0ZWx5
LCBtYXJrZWQgc3BhY2UgcmFyZWx5IGZyYWdtZW50cyBiZWNhdXNlCiAgICAgLy8gY2VsbHMgdXN1
YWxseSBoYXZlIGEgbmFycm93IHJhbmdlIG9mIHNpemVzLiBTbywgdGhlIHVuZGVyZXN0aW1hdGlv
biBpcyBwcm9iYWJseSBPSy4KICAgICBjdXJyZW50SGVhcFNpemUgKz0gbV90b3RhbEJ5dGVzVmlz
aXRlZDsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygidG90YWxCeXRlc1Zpc2l0
ZWQgPSAiLCBtX3RvdGFsQnl0ZXNWaXNpdGVkLCAiLCBjdXJyZW50SGVhcFNpemUgPSAiLCBjdXJy
ZW50SGVhcFNpemUsICJcbiIpOwogCiAgICAgLy8gRm9yIGNvcGllZCBzcGFjZSwgd2UgdXNlIHRo
ZSBjYXBhY2l0eSBvZiBzdG9yYWdlIHNwYWNlLiBUaGlzIGlzIGJlY2F1c2UgY29waWVkIHNwYWNl
IG1heSBnZXQKICAgICAvLyBiYWRseSBmcmFnbWVudGVkIGJldHdlZW4gZnVsbCBjb2xsZWN0aW9u
cy4gVGhpcyBhcmlzZXMgd2hlbiBlYWNoIGVkZW4gY29sbGVjdGlvbiBldmFjdWF0ZXMKQEAgLTEz
NzksMTAgKzEzODIsMTUgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjY4CiAgICAg
QVNTRVJUKG1fdG90YWxCeXRlc0NvcGllZCA8PSBtX3N0b3JhZ2VTcGFjZS5zaXplKCkpOwogICAg
IGN1cnJlbnRIZWFwU2l6ZSArPSBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpOworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJzdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSA9ICIsIG1f
c3RvcmFnZVNwYWNlLmNhcGFjaXR5KCksICIsIGN1cnJlbnRIZWFwU2l6ZSA9ICIsIGN1cnJlbnRI
ZWFwU2l6ZSwgIlxuIik7CiAKICAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIGVuc3VyZSB0
aGF0IGV4dHJhTWVtb3J5U2l6ZSgpIGVuZHMgdXAgY29ycmVzcG9uZGluZyB0byBhbGxvY2F0aW9u
LXRpbWUKICAgICAvLyBleHRyYSBtZW1vcnkgcmVwb3J0aW5nLgogICAgIGN1cnJlbnRIZWFwU2l6
ZSArPSBleHRyYU1lbW9yeVNpemUoKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJleHRyYU1lbW9yeVNpemUoKSA9ICIsIGV4dHJhTWVtb3J5U2l6ZSgpLCAiLCBjdXJyZW50
SGVhcFNpemUgPSAiLCBjdXJyZW50SGVhcFNpemUsICJcbiIpOwogICAgIAogICAgIGlmIChPcHRp
b25zOjpnY01heEhlYXBTaXplKCkgJiYgY3VycmVudEhlYXBTaXplID4gT3B0aW9uczo6Z2NNYXhI
ZWFwU2l6ZSgpKQogICAgICAgICBIZWFwU3RhdGlzdGljczo6ZXhpdFdpdGhGYWlsdXJlKCk7CkBA
IC0xMzkyLDI5ICsxNDAwLDM4IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygp
CiAgICAgICAgIC8vIHRoZSBuZXcgYWxsb2NhdGlvbiBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVu
dCBzaXplIG9mIHRoZSBoZWFwLCB3aXRoIGEKICAgICAgICAgLy8gZml4ZWQgbWluaW11bS4KICAg
ICAgICAgbV9tYXhIZWFwU2l6ZSA9IG1heChtaW5IZWFwU2l6ZShtX2hlYXBUeXBlLCBtX3JhbVNp
emUpLCBwcm9wb3J0aW9uYWxIZWFwU2l6ZShjdXJyZW50SGVhcFNpemUsIG1fcmFtU2l6ZSkpOwor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkZ1bGw6IG1heEhlYXBT
aXplID0gIiwgbV9tYXhIZWFwU2l6ZSwgIlxuIik7CiAgICAgICAgIG1fbWF4RWRlblNpemUgPSBt
X21heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIkZ1bGw6IG1heEVkZW5TaXplID0gIiwgbV9tYXhFZGVuU2l6ZSwg
IlxuIik7CiAgICAgICAgIG1fc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0ID0gY3VycmVudEhlYXBT
aXplOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkZ1bGw6IHNp
emVBZnRlckxhc3RGdWxsQ29sbGVjdCA9ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7CiAgICAg
ICAgIG1fYnl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxsQ29sbGVjdCA9IDA7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRnVsbDogYnl0ZXNBYmFuZG9uZWRTaW5j
ZUxhc3RGdWxsQ29sbGVjdCA9ICIsIDAsICJcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLSAgICAgICAgCiAgICAgICAgIEFTU0VS
VChjdXJyZW50SGVhcFNpemUgPj0gbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCk7Ci0gICAgICAgIG1f
bWF4RWRlblNpemUgPSBtX21heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgICAgICAv
LyBUaGVvcmV0aWNhbGx5LCB3ZSBzaG91bGRuJ3QgZXZlciBzY2FuIG1vcmUgbWVtb3J5IHRoYW4g
dGhlIGhlYXAgc2l6ZSB3ZSBwbGFubmVkIHRvIGhhdmUuCisgICAgICAgIC8vIEJ1dCB3ZSBhcmUg
c2xvcHB5LCBzbyB3ZSBoYXZlIHRvIGRlZmVuZCBhZ2FpbnN0IHRoZSBvdmVyZmxvdy4KKyAgICAg
ICAgbV9tYXhFZGVuU2l6ZSA9IGN1cnJlbnRIZWFwU2l6ZSA+IG1fbWF4SGVhcFNpemUgPyAwIDog
bV9tYXhIZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBkYXRhTG9nKCJFZGVuOiBtYXhFZGVuU2l6ZSA9ICIsIG1fbWF4RWRlblNpemUs
ICJcbiIpOwogICAgICAgICBtX3NpemVBZnRlckxhc3RFZGVuQ29sbGVjdCA9IGN1cnJlbnRIZWFw
U2l6ZTsKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIk1heCBo
ZWFwIHNpemU6ICIsIG1fbWF4SGVhcFNpemUsICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygi
Q3VycmVudCBoZWFwIHNpemU6ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7Ci0gICAgICAgICAg
ICBkYXRhTG9nKCJTaXplIGFmdGVyIGxhc3QgZWRlbiBjb2xsZWN0aW9uOiAiLCBtX3NpemVBZnRl
ckxhc3RFZGVuQ29sbGVjdCwgIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZG91YmxlIGVkZW5U
b09sZEdlbmVyYXRpb25SYXRpbyA9IChkb3VibGUpbV9tYXhFZGVuU2l6ZSAvIChkb3VibGUpbV9t
YXhIZWFwU2l6ZTsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJF
ZGVuIHRvIG9sZCBnZW5lcmF0aW9uIHJhdGlvOiAiLCBlZGVuVG9PbGRHZW5lcmF0aW9uUmF0aW8s
ICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiRWRlbjogc2l6ZUFmdGVyTGFzdEVkZW5Db2xs
ZWN0ID0gIiwgY3VycmVudEhlYXBTaXplLCAiXG4iKTsKKyAgICAgICAgZG91YmxlIGVkZW5Ub09s
ZEdlbmVyYXRpb25SYXRpbyA9IChkb3VibGUpbV9tYXhFZGVuU2l6ZSAvIChkb3VibGUpbV9tYXhI
ZWFwU2l6ZTsKICAgICAgICAgZG91YmxlIG1pbkVkZW5Ub09sZEdlbmVyYXRpb25SYXRpbyA9IDEu
MCAvIDMuMDsKICAgICAgICAgaWYgKGVkZW5Ub09sZEdlbmVyYXRpb25SYXRpbyA8IG1pbkVkZW5U
b09sZEdlbmVyYXRpb25SYXRpbykKICAgICAgICAgICAgIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlv
biA9IHRydWU7CiAgICAgICAgIC8vIFRoaXMgc2VlbXMgc3VzcGVjdCBhdCBmaXJzdCwgYnV0IHdo
YXQgaXQgZG9lcyBpcyBlbnN1cmUgdGhhdCB0aGUgbnVyc2VyeSBzaXplIGlzIGZpeGVkLgogICAg
ICAgICBtX21heEhlYXBTaXplICs9IGN1cnJlbnRIZWFwU2l6ZSAtIG1fc2l6ZUFmdGVyTGFzdENv
bGxlY3Q7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRWRlbjog
bWF4SGVhcFNpemUgPSAiLCBtX21heEhlYXBTaXplLCAiXG4iKTsKICAgICAgICAgbV9tYXhFZGVu
U2l6ZSA9IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRWRlbjogbWF4RWRlblNpemUgPSAiLCBtX21heEVk
ZW5TaXplLCAiXG4iKTsKICAgICAgICAgaWYgKG1fZnVsbEFjdGl2aXR5Q2FsbGJhY2spIHsKICAg
ICAgICAgICAgIEFTU0VSVChjdXJyZW50SGVhcFNpemUgPj0gbV9zaXplQWZ0ZXJMYXN0RnVsbENv
bGxlY3QpOwogICAgICAgICAgICAgbV9mdWxsQWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUo
Y3VycmVudEhlYXBTaXplIC0gbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3QpOwpAQCAtMTQyMiw2
ICsxNDM5LDggQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICB9CiAK
ICAgICBtX3NpemVBZnRlckxhc3RDb2xsZWN0ID0gY3VycmVudEhlYXBTaXplOworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJzaXplQWZ0ZXJMYXN0Q29sbGVjdCA9ICIsIG1fc2l6
ZUFmdGVyTGFzdENvbGxlY3QsICJcbiIpOwogICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUg
PSAwOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEzICs4MywxNSBAQCB0eXBlZGVmIEhhc2hD
b3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlCiAKIGVudW0gSGVhcFR5cGUgeyBTbWFsbEhlYXAs
IExhcmdlSGVhcCB9OwogCitjbGFzcyBIZWFwVXRpbDsKKwogY2xhc3MgSGVhcCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSGVhcCk7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsK
ICAgICBmcmllbmQgY2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKICAgICBzdGF0aWMgSGVhcCog
aGVhcChjb25zdCBKU1ZhbHVlKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZhbHVlcwotICAgIHN0YXRp
YyBIZWFwKiBoZWFwKGNvbnN0IEpTQ2VsbCopOworICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0
IEhlYXBDZWxsKik7CiAKICAgICAvLyBUaGlzIGNvbnN0YW50IGRldGVybWluZXMgaG93IG1hbnkg
YmxvY2tzIHdlIGl0ZXJhdGUgYmV0d2VlbiBjaGVja3Mgb2Ygb3VyIAogICAgIC8vIGRlYWRsaW5l
IHdoZW4gY2FsbGluZyBIZWFwOjppc1BhZ2VkT3V0LiBEZWNyZWFzaW5nIGl0IHdpbGwgY2F1c2Ug
dXMgdG8gZGV0ZWN0IApAQCAtMTAyLDExICsxMDQsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgc2V0TWFy
a2VkKGNvbnN0IHZvaWQqKTsKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBydW4gYWZ0
ZXIgc3RvcEFsbG9jYXRpb24oKSBpcyBjYWxsZWQgYW5kIAotICAgIC8vIGJlZm9yZSBsaXZlbmVz
cyBkYXRhIGlzIGNsZWFyZWQgdG8gYmUgYWNjdXJhdGUuCi0gICAgc3RhdGljIGJvb2wgaXNQb2lu
dGVyR0NPYmplY3QoVGlueUJsb29tRmlsdGVyLCBNYXJrZWRCbG9ja1NldCYsIHZvaWQqIHBvaW50
ZXIpOwotICAgIHN0YXRpYyBib29sIGlzVmFsdWVHQ09iamVjdChUaW55Qmxvb21GaWx0ZXIsIE1h
cmtlZEJsb2NrU2V0JiwgSlNWYWx1ZSk7Ci0KICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBK
U0NlbGwqKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsK
ICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKQEAgLTE1MCw3
ICsxNDcsMTEgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2Jq
ZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNl
LmFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZv
ck9iamVjdFdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFj
ZS5kZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENsYXNzVHlwZT4gTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6
ZV90IGJ5dGVzKTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvckF1eGlsaWFyeURh
dGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmF1eGlsaWFyeUFsbG9jYXRv
ckZvcihieXRlcyk7IH0KICAgICBDb3BpZWRBbGxvY2F0b3ImIHN0b3JhZ2VBbGxvY2F0b3IoKSB7
IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxvY2F0b3IoKTsgfQorICAgIHZvaWQqIGFsbG9jYXRl
QXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlB
bGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9s
ZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgQ2hlY2tlZEJvb2xl
YW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2b2lk
KiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgdm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CiAgICAgdm9pZCBhc2NyaWJlT3du
ZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7CkBAIC0yNjcsNiArMjY4LDcgQEAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgR0NMb2dnaW5nOwogICAgIGZyaWVuZCBjbGFzcyBHQ1Ro
cmVhZDsKICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OworICAgIGZyaWVuZCBjbGFzcyBIZWFw
VXRpbDsKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogICAgIGZyaWVuZCBjbGFzcyBK
SVRTdHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAy
MDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3B5QmFycmllci5oIgog
I2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgogI2luY2x1ZGUg
IkpTQ2VsbC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHR5cGVfdHJhaXRz
PgpAQCAtNTksNyArNjAsNyBAQCBpbmxpbmUgYm9vbCBIZWFwOjppc0NvbGxlY3RpbmcoKQogICAg
IHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24gfHwgbV9vcGVy
YXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uOwogfQogCi1pbmxpbmUgSGVhcCogSGVh
cDo6aGVhcChjb25zdCBKU0NlbGwqIGNlbGwpCitpbmxpbmUgSGVhcCogSGVhcDo6aGVhcChjb25z
dCBIZWFwQ2VsbCogY2VsbCkKIHsKICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNl
bGwpLT5oZWFwKCk7CiB9CkBAIC0xOTksNyArMjAwLDcgQEAgaW5saW5lIHZvaWQqIEhlYXA6OmFs
bG9jYXRlV2l0aG91dERlc3RydQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci12
b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9p
ZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogewogICAgIC8vIEpT
Q2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBk
ZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgogICAgIEFTU0VS
VCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVG
bGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NU
eXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CkBAIC0yMTAsNyArMjExLDcgQEAg
dm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IAogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBDbGFzc1R5cGU+Ci1NYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNl
Rm9yT2JqZWN0T2ZUeXBlKCkKK2lubGluZSBNYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1
YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKCkKIHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4
cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUg
ZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KICAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRz
RGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0lt
bW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVP
YmplY3Q+Ojp2YWx1ZSkpOwpAQCAtMjIxLDcgKzIyMiw3IEBAIE1hcmtlZFNwYWNlOjpTdWJzcGFj
ZSYgSGVhcDo6c3Vic3BhY2VGb3IKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgot
TWFya2VkQWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5
dGVzKQoraW5saW5lIE1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZU
eXBlKHNpemVfdCBieXRlcykKIHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMg
b2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBK
U0Rlc3RydWN0aWJsZU9iamVjdC4KICAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1
Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFs
KSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+
Ojp2YWx1ZSkpOwpAQCAtMjMxLDYgKzIzMiwzNyBAQCBNYXJrZWRBbGxvY2F0b3ImIEhlYXA6OmFs
bG9jYXRvckZvck9iamVjCiAgICAgcmV0dXJuIGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0
cnVjdG9yKGJ5dGVzKTsKIH0KIAoraW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlQXV4aWxpYXJ5
KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3Vs
dCA9IG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVBdXhpbGlhcnkoYnl0ZXMpOworI2lmIEVOQUJMRShB
TExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBi
eXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCBy
ZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5kaWYK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVB
dXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9p
ZCogcmVzdWx0ID0gbV9vYmplY3RTcGFjZS50cnlBbGxvY2F0ZUF1eGlsaWFyeShieXRlcyk7Cisj
aWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9j
YXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGludGVu
ZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVy
KTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBIZWFwOjp0
cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogb2xkQmFz
ZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworICAgIHZvaWQqIG5ld0Jhc2Ug
PSB0cnlBbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCBuZXdTaXplKTsKKyAgICBpZiAo
IW5ld0Jhc2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIG1lbWNweShuZXdCYXNlLCBv
bGRCYXNlLCBvbGRTaXplKTsKKyAgICByZXR1cm4gbmV3QmFzZTsKK30KKwogaW5saW5lIENoZWNr
ZWRCb29sZWFuIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIs
IHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKIHsKICAgICBDaGVja2VkQm9vbGVhbiByZXN1
bHQgPSBtX3N0b3JhZ2VTcGFjZS50cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKTsKQEAgLTM1NCwz
MyArMzg2LDYgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGlkRnJlZUJsb2NrKHNpemVfdCBjYQogI2Vu
ZGlmCiB9CiAKLWlubGluZSBib29sIEhlYXA6OmlzUG9pbnRlckdDT2JqZWN0KFRpbnlCbG9vbUZp
bHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRCbG9ja1NldCwgdm9pZCogcG9pbnRl
cikKLXsKLSAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxvY2s6OmJsb2NrRm9y
KHBvaW50ZXIpOwotICAgIGlmIChmaWx0ZXIucnVsZU91dChiaXR3aXNlX2Nhc3Q8Qml0cz4oY2Fu
ZGlkYXRlKSkpIHsKLSAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1hcmtlZEJsb2NrU2V0
LnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKCFNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwb2ludGVyKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlu
cyhjYW5kaWRhdGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNhbmRpZGF0
ZS0+aXNMaXZlQ2VsbChwb2ludGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIEhlYXA6OmlzVmFsdWVHQ09iamVjdChUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBpc1BvaW50ZXJHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBz
dGF0aWNfY2FzdDx2b2lkKj4odmFsdWUuYXNDZWxsKCkpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBIZWFwSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwVXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBVdGlsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFV0aWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQXJlIHlvdSB0aXJlZCBv
ZiB3YWl0aW5nIGZvciBhbGwgb2YgV2ViS2l0IHRvIGJ1aWxkIGJlY2F1c2UgeW91IGNoYW5nZWQg
dGhlIGltcGxlbWVudGF0aW9uIG9mIGEKKy8vIGZ1bmN0aW9uIGluIEhlYXBJbmxpbmVzLmg/ICBE
b2VzIGl0IGJvdGhlciB5b3UgdGhhdCB5b3UncmUgd2FpdGluZyBvbiByZWJ1aWxkaW5nIHRoZSBK
UyBET00KKy8vIGJpbmRpbmdzIGV2ZW4gdGhvdWdoIHlvdXIgY2hhbmdlIGlzIGluIGEgZnVuY3Rp
b24gY2FsbGVkIGZyb20gb25seSAyIC5jcHAgZmlsZXM/ICBUaGVuIEhlYXBVdGlsLmgKKy8vIGlz
IGZvciB5b3UhICBFdmVyeXRoaW5nIGluIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGEgc3RhdGljIG1l
dGhvZCB0aGF0IHRha2VzIGEgSGVhcCYgaWYgbmVlZGVkLgorLy8gVGhpcyBpcyBhIGZyaWVuZCBv
ZiBIZWFwLCBzbyB5b3UgY2FuIGFjY2VzcyBhbGwgb2YgSGVhcCdzIHByaXZhdGVzLgorLy8KKy8v
IFRoaXMgZW5kcyB1cCBiZWluZyBhbiBpc3N1ZSBiZWNhdXNlIEhlYXAgZXhwb3NlcyBhIGxvdCBv
ZiBtZXRob2RzIHRoYXQgb3VnaHQgdG8gYmUgaW5saW5lIGZvcgorLy8gcGVyZm9ybWFuY2Ugb3Ig
dGhhdCBtdXN0IGJlIGlubGluZSBiZWNhdXNlIHRoZXkgYXJlIHRlbXBsYXRlcy4gIFRoaXMgY2xh
c3Mgb3VnaHQgdG8gY29udGFpbgorLy8gbWV0aG9kcyB0aGF0IGFyZSB1c2VkIGZvciB0aGUgaW1w
bGVtZW50YXRpb24gb2YgdGhlIGNvbGxlY3Rvciwgb3IgZm9yIHVudXN1YWwgY2xpZW50cyB0aGF0
IG5lZWQKKy8vIHRvIHJlYWNoIGRlZXAgaW50byB0aGUgY29sbGVjdG9yIGZvciBzb21lIHJlYXNv
bi4gIERvbid0IHB1dCB0aGluZ3MgaW4gaGVyZSB0aGF0IHdvdWxkIGNhdXNlIHlvdQorLy8gdG8g
aGF2ZSB0byBpbmNsdWRlIGl0IGZyb20gbW9yZSB0aGFuIGEgaGFuZGZ1bCBvZiBwbGFjZXMsIHNp
bmNlIHRoYXQgd291bGQgZGVmZWF0IHRoZSBwdXJwb3NlLgorLy8gVGhpcyBjbGFzcyBpc24ndCBo
ZXJlIHRvIGxvb2sgcHJldHR5LiAgSXQncyB0byBsZXQgdXMgaGFjayB0aGUgR0MgbW9yZSBlYXNp
bHkhCisKK2NsYXNzIEhlYXBVdGlsIHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG11
c3QgYmUgcnVuIGFmdGVyIHN0b3BBbGxvY2F0aW9uKCkgaXMgY2FsbGVkIGFuZCAKKyAgICAvLyBi
ZWZvcmUgbGl2ZW5lc3MgZGF0YSBpcyBjbGVhcmVkIHRvIGJlIGFjY3VyYXRlLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZmluZEdDT2JqZWN0UG9pbnRlcnMo
CisgICAgICAgIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0JiBtYXJrZWRC
bG9ja1NldCwgdm9pZCogcGFzc2VkUG9pbnRlciwKKyAgICAgICAgY29uc3QgRnVuYyYgZnVuYykK
KyAgICB7CisgICAgICAgIGNoYXIqIHBvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocGFzc2Vk
UG9pbnRlcik7CisgICAgCisgICAgICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRC
bG9jazo6YmxvY2tGb3IocG9pbnRlcik7CisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIGEg
YnV0dGVyZmx5IHBvaW50ZXIgdG8gcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGEgYnV0dGVyZmx5LiBD
aGVjayB0aGlzIG5vdy4KKyAgICAgICAgaWYgKHBvaW50ZXIgPD0gYml0d2lzZV9jYXN0PGNoYXIq
PihjYW5kaWRhdGUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAgICAgLy8g
V2UgbWF5IGJlIGludGVyZXN0ZWQgaW4gdGhlIGxhc3QgY2VsbCBvZiB0aGUgcHJldmlvdXMgTWFy
a2VkQmxvY2suCisgICAgICAgICAgICBjaGFyKiBwcmV2aW91c1BvaW50ZXIgPSBwb2ludGVyIC0g
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIDE7CisgICAgICAgICAgICBNYXJrZWRCbG9jayogcHJl
dmlvdXNDYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocHJldmlvdXNQb2ludGVyKTsK
KyAgICAgICAgICAgIGlmICghZmlsdGVyLnJ1bGVPdXQoYml0d2lzZV9jYXN0PEJpdHM+KHByZXZp
b3VzQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAmJiBtYXJrZWRCbG9ja1NldC5zZXQoKS5j
b250YWlucyhwcmV2aW91c0NhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAmJiBwcmV2aW91c0Nh
bmRpZGF0ZS0+Y2VsbEtpbmQoKSA9PSBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSB7CisgICAgICAgICAg
ICAgICAgcHJldmlvdXNQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHByZXZpb3VzQ2FuZGlk
YXRlLT5jZWxsQWxpZ24ocHJldmlvdXNQb2ludGVyKSk7CisgICAgICAgICAgICAgICAgaWYgKHBy
ZXZpb3VzQ2FuZGlkYXRlLT5pc0xpdmVDZWxsKHByZXZpb3VzUG9pbnRlcikpCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmMocHJldmlvdXNQb2ludGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIAorICAgICAgICBpZiAoZmlsdGVyLnJ1bGVPdXQoYml0d2lzZV9jYXN0PEJpdHM+KGNh
bmRpZGF0ZSkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbmRpZGF0ZSB8fCAhbWFya2VkQmxv
Y2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKCFtYXJrZWRCbG9ja1NldC5zZXQoKS5jb250YWlu
cyhjYW5kaWRhdGUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gdHJ5UG9p
bnRlciA9IFsmXSAodm9pZCogcG9pbnRlcikgeworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+
aXNMaXZlQ2VsbChwb2ludGVyKSkKKyAgICAgICAgICAgICAgICBmdW5jKHBvaW50ZXIpOworICAg
ICAgICB9OworICAgIAorICAgICAgICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpID09IEhlYXBD
ZWxsOjpKU0NlbGwpIHsKKyAgICAgICAgICAgIGlmICghTWFya2VkQmxvY2s6OmlzQXRvbUFsaWdu
ZWQocG9pbnRlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
ICAgIHRyeVBvaW50ZXIocG9pbnRlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAKKyAgICAgICAgLy8gQSBidXR0ZXJmbHkgY291bGQgcG9pbnQgaW50byB0aGUgbWlkZGxl
IG9mIGFuIG9iamVjdC4KKyAgICAgICAgY2hhciogYWxpZ25lZFBvaW50ZXIgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oY2FuZGlkYXRlLT5jZWxsQWxpZ24ocG9pbnRlcikpOworICAgICAgICB0cnlQb2lu
dGVyKGFsaWduZWRQb2ludGVyKTsKKyAgICAKKyAgICAgICAgLy8gQWxzbywgYSBidXR0ZXJmbHkg
Y291bGQgcG9pbnQgYXQgdGhlIGVuZCBvZiBhbiBvYmplY3QgcGx1cyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpLiBJbiB0aGF0CisgICAgICAgIC8vIGNhc2UsIHRoaXMgaXMgcG9pbnRpbmcgdG8gdGhl
IG9iamVjdCB0byB0aGUgcmlnaHQgb2YgdGhlIG9uZSB3ZSBzaG91bGQgYmUgbWFya2luZy4KKyAg
ICAgICAgaWYgKGNhbmRpZGF0ZS0+YXRvbU51bWJlcihhbGlnbmVkUG9pbnRlcikgPiBNYXJrZWRC
bG9jazo6Zmlyc3RBdG9tKCkKKyAgICAgICAgICAgICYmIHBvaW50ZXIgPD0gYWxpZ25lZFBvaW50
ZXIgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKQorICAgICAgICAgICAgdHJ5UG9pbnRlcihhbGln
bmVkUG9pbnRlciAtIGNhbmRpZGF0ZS0+Y2VsbFNpemUoKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBib29sIGlzUG9pbnRlckdDT2JqZWN0SlNDZWxsKAorICAgICAgICBUaW55Qmxvb21GaWx0
ZXIgZmlsdGVyLCBNYXJrZWRCbG9ja1NldCYgbWFya2VkQmxvY2tTZXQsIGNvbnN0IHZvaWQqIHBv
aW50ZXIpCisgICAgeworICAgICAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxv
Y2s6OmJsb2NrRm9yKHBvaW50ZXIpOworICAgICAgICBpZiAoZmlsdGVyLnJ1bGVPdXQoYml0d2lz
ZV9jYXN0PEJpdHM+KGNhbmRpZGF0ZSkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbmRpZGF0
ZSB8fCAhbWFya2VkQmxvY2tTZXQuc2V0KCkuY29udGFpbnMoY2FuZGlkYXRlKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghTWFy
a2VkQmxvY2s6OmlzQXRvbUFsaWduZWQocG9pbnRlcikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBpZiAoIW1hcmtlZEJsb2NrU2V0LnNldCgpLmNvbnRhaW5z
KGNhbmRpZGF0ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBpZiAoY2FuZGlkYXRlLT5jZWxsS2luZCgpICE9IEhlYXBDZWxsOjpKU0NlbGwpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoIWNhbmRpZGF0ZS0+aXNM
aXZlQ2VsbChwb2ludGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbHVl
R0NPYmplY3QoCisgICAgICAgIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtlZEJsb2NrU2V0
JiBtYXJrZWRCbG9ja1NldCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFs
dWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBp
c1BvaW50ZXJHQ09iamVjdEpTQ2VsbChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBzdGF0aWNfY2Fz
dDx2b2lkKj4odmFsdWUuYXNDZWxsKCkpKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQg
TWFya2VkQWxsb2NhdG9yOjpyZXRpcmUoTWFya2VkQmxvY2sKICAgICBibG9jay0+ZGlkUmV0aXJl
QmxvY2soZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZUhlbHBlcihzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nSW1wbChzaXplX3QgYnl0ZXMpCiB7CiAgICAg
aWYgKG1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayA9PSBt
X25leHRCbG9ja1RvU3dlZXApOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgaW5saW5lIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5UG9wRnJlZQogICAgIHJldHVybiBoZWFkOwogfQogCi1pbmxpbmUg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCitpbmxpbmUg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVf
dCBieXRlcykKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+aXNCdXN5KCkpOwogICAgIG1faGVhcC0+
bV9vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKLSAgICB2b2lkKiByZXN1bHQgPSB0
cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZ0ltcGwoYnl0ZXMpOwogCiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBBU1NFUlQocmVzdWx0IHx8ICFtX2N1cnJlbnRC
bG9jayk7CkBAIC0xNDgsNiArMTQ4LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OmRvVGUKIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNp
emVfdCBieXRlcykKIHsKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1
cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoYnl0ZXMsIGNyYXNoT25GYWlsdXJlKTsKK30KKwordm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKK3sK
KyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xv
d0Nhc2VJbXBsKGJ5dGVzLCBjcmFzaE9uRmFpbHVyZSk7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90IGJ5dGVzLCBib29sIGNyYXNoT25GYWls
dXJlKQorewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdB
UElMb2NrKCkpOwogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKIApAQCAtMTU1LDM4
ICsxNjcsNTYgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKAogICAg
IEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJl
ZUxpc3QuYnl0ZXMpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVz
KTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVz
KTsKICAgICAKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkp
IHsKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOworICAgICAgICByZXN1bHQg
PSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5dGVzKTsKICAgICAgICAgaWYgKHJlc3Vs
dCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgQVNTRVJUKCFtX2hl
YXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCi0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0gYWxs
b2NhdGVCbG9jayhieXRlcyk7Ci0gICAgQVNTRVJUKGJsb2NrKTsKKyAgICBNYXJrZWRCbG9jayog
YmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKKyAgICBpZiAoIWJsb2NrKSB7CisgICAg
ICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJlc3VsdCA9IHRyeUFsbG9j
YXRlKGJ5dGVzKTsKKyAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKGJ5
dGVzKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1NYXJr
ZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBieXRlcykKK3N0
YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKK3sKKyAgICByZXR1cm4gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSk7
Cit9CisKK3NpemVfdCBNYXJrZWRBbGxvY2F0b3I6OmJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCBi
eXRlcykKIHsKICAgICBzaXplX3QgbWluQmxvY2tTaXplID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6
ZTsKLSAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplb2YoTWFya2VkQmxvY2spKSArIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKKyAgICBzaXpl
X3QgbWluQWxsb2NhdGlvblNpemUgPSBibG9ja0hlYWRlclNpemUoKSArIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKICAgICBtaW5BbGxvY2F0
aW9uU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihXVEY6OnBhZ2VTaXplKCksIG1pbkFs
bG9jYXRpb25TaXplKTsKLSAgICBzaXplX3QgYmxvY2tTaXplID0gc3RkOjptYXgobWluQmxvY2tT
aXplLCBtaW5BbGxvY2F0aW9uU2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6
ZSwgbWluQWxsb2NhdGlvblNpemUpOworfQogCi0gICAgc2l6ZV90IGNlbGxTaXplID0gbV9jZWxs
U2l6ZSA/IG1fY2VsbFNpemUgOiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6
OmF0b21TaXplPihieXRlcyk7CitzaXplX3QgTWFya2VkQWxsb2NhdG9yOjpvcHRpbWFsU2l6ZUZv
ckxhcmdlQWxsb2NhdGlvbihzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGJsb2NrU2l6ZUZv
ckJ5dGVzKGJ5dGVzKSAtIGJsb2NrSGVhZGVyU2l6ZSgpOworfQogCi0gICAgcmV0dXJuIE1hcmtl
ZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tTaXplLCBjZWxsU2l6ZSwgbV9hdHRy
aWJ1dGVzKTsKK01hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2so
c2l6ZV90IGJ5dGVzKQoreworICAgIHNpemVfdCBibG9ja1NpemUgPSBibG9ja1NpemVGb3JCeXRl
cyhieXRlcyk7CisgICAgc2l6ZV90IGNlbGxTaXplID0gbV9jZWxsU2l6ZSA/IG1fY2VsbFNpemUg
OiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7
CisgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUoKm1faGVhcCwgdGhpcywgYmxvY2tT
aXplLCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6
OmFkZEJsb2NrKE1hcmtlZEJsb2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6
OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0K
ICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVf
dCk7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE1hcmtlZEJsb2Nr
KiB0YWtlTGFzdEFjdGl2ZUJsb2NrKCkKICAgICB7CkBAIC02OCwxMyArNjksMTggQEAgcHVibGlj
OgogICAgIHZvaWQgaW5pdChIZWFwKiwgTWFya2VkU3BhY2UqLCBzaXplX3QgY2VsbFNpemUsIGNv
bnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKIAogICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUg
ZGVhZGxpbmUpOworICAgIAorICAgIHN0YXRpYyBzaXplX3QgYmxvY2tTaXplRm9yQnl0ZXMoc2l6
ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IG9wdGltYWxTaXplRm9y
TGFyZ2VBbGxvY2F0aW9uKHNpemVfdCk7CiAgICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9j
YXRlKHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CisgICAg
dm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKHNpemVfdCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZ0ltcGwoc2l6ZV90KTsKICAgICB2b2lkKiB0
cnlQb3BGcmVlTGlzdChzaXplX3QpOwotICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNp
emVfdCk7CisgICAgTWFya2VkQmxvY2sqIHRyeUFsbG9jYXRlQmxvY2soc2l6ZV90KTsKICAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOwogICAgIHZvaWQg
cmV0aXJlKE1hcmtlZEJsb2NrKiwgTWFya2VkQmxvY2s6OkZyZWVMaXN0Jik7CiAgICAgCkBAIC0x
MTMsMjEgKzExOSwzNSBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCog
CiAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtl
ZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIE1hcmtlZEJsb2Nr
OjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBpZiAoVU5MSUtFTFkoIWhl
YWQpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMp
OworICAgICAgICBpZiAocmVzdWx0ICYmICFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBt
ZW1zZXQocmVzdWx0LCAweENELCBieXRlcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgIG1lbXNldChoZWFkLCAweENELCBieXRlcyk7CisgICAgcmV0
dXJuIGhlYWQ7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNp
emVfdCBieXRlcykKIHsKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVM
aXN0LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkgewogICAgICAgICB2b2lkKiByZXN1
bHQgPSBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1l
bXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkKKyAgICAgICAgICAgIG1lbXNldChyZXN1bHQsIDB4Q0QsIGJ5dGVzKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVh
ZC0+bmV4dDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbWVtc2V0KGhlYWQsIDB4Q0QsIGJ5dGVzKTsK
LSNlbmRpZgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICBtZW1zZXQoaGVhZCwg
MHhDRCwgYnl0ZXMpOwogICAgIHJldHVybiBoZWFkOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDIwICsyOSwzOSBAQAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN1cGVy
U2FtcGxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgY29tcHV0
ZUJhbGFuY2UgPSBmYWxzZTsKIHN0YXRpYyBzaXplX3QgYmFsYW5jZTsKIAotTWFya2VkQmxvY2sq
IE1hcmtlZEJsb2NrOjpjcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzKQorc3RhdGljIGJvb2wgcmVzZXRGcmVlQ2VsbHNCYWRseSgpCit7
CisgICAgcmV0dXJuICFBU1NFUlRfRElTQUJMRUQgfHwgT3B0aW9uczo6cmVzZXRGcmVlQ2VsbHNC
YWRseSgpOworfQorCitzdGF0aWMgdm9pZCByZXNldEJhZGx5KHZvaWQqIGJhc2UsIHNpemVfdCBz
aXplKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBzaXplIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsgaS0tOykgeworICAgICAgICBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2UpW2ld
ID0gSlNWYWx1ZTo6ZW5jb2RlKAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PEpTQ2VsbCo+KHN0
YXRpY19jYXN0PGludHB0cl90Pig2NjYgKiA4KSkpOworICAgIH0KK30KKworTWFya2VkQmxvY2sq
IE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUoSGVhcCYgaGVhcCwgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JB
dHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQogewogICAgIGlmIChjb21wdXRlQmFsYW5jZSkgewogICAg
ICAgICBiYWxhbmNlKys7CiAgICAgICAgIGlmICghKGJhbGFuY2UgJSAxMCkpCiAgICAgICAgICAg
ICBkYXRhTG9nKCJNYXJrZWRCbG9jayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsKICAgICB9
Ci0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1hbGxv
YyhibG9ja1NpemUsIGNhcGFjaXR5KSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwg
Y2VsbFNpemUsIGF0dHJpYnV0ZXMpOworICAgIHZvaWQqIGJsb2NrU3BhY2UgPSB0cnlGYXN0QWxp
Z25lZE1hbGxvYyhibG9ja1NpemUsIGNhcGFjaXR5KTsKKyAgICBpZiAoIWJsb2NrU3BhY2UpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChyZXNldEZyZWVDZWxsc0JhZGx5KCkpCisg
ICAgICAgIHJlc2V0QmFkbHkoYmxvY2tTcGFjZSwgY2FwYWNpdHkpOworICAgIE1hcmtlZEJsb2Nr
KiBibG9jayA9IG5ldyAoTm90TnVsbCwgYmxvY2tTcGFjZSkgTWFya2VkQmxvY2soYWxsb2NhdG9y
LCBjYXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMpOwogICAgIGhlYXAuZGlkQWxsb2NhdGVC
bG9jayhjYXBhY2l0eSk7CiAgICAgcmV0dXJuIGJsb2NrOwogfQpAQCAtOTIsMTEgKzExMSwxMSBA
QCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2FsbERlc3RydWN0b3IoCiAgICAgY2VsbC0+emFw
KCk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1h
cmtlZEJsb2NrOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBib29sIGNhbGxEZXN0cnVjdG9ycz4KK3Rl
bXBsYXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtlZEJsb2NrOjpT
d2VlcE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJr
ZWRCbG9jazo6UmVzZXRNb2RlIHJlc2V0TW9kZT4KIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJr
ZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCgpCiB7CiAgICAgQVNTRVJUKGJsb2NrU3RhdGUgIT0g
QWxsb2NhdGVkICYmIGJsb2NrU3RhdGUgIT0gRnJlZUxpc3RlZCk7Ci0gICAgQVNTRVJUKCEoIWNh
bGxEZXN0cnVjdG9ycyAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CisgICAgQVNTRVJUKCEo
ZGVzdHJ1Y3Rpb25Nb2RlID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09
IFN3ZWVwT25seSkpOwogCiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlz
IG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZp
bmUsIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQg
dGhlCkBAIC0xMDksMTEgKzEyOCwxMyBAQCBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxv
Y2s6OnNwZWNpCiAKICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0
cjxIZWFwQ2VsbCo+KCZhdG9tcygpW2ldKTsKIAotICAgICAgICBpZiAoY2FsbERlc3RydWN0b3Jz
ICYmIGJsb2NrU3RhdGUgIT0gTmV3KQorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IE5l
ZWRzRGVzdHJ1Y3Rpb24gJiYgYmxvY2tTdGF0ZSAhPSBOZXcpCiAgICAgICAgICAgICBjYWxsRGVz
dHJ1Y3RvcihjZWxsKTsKIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlz
dCkgewogICAgICAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxG
cmVlQ2VsbCo+KGNlbGwpOworICAgICAgICAgICAgaWYgKHJlc2V0TW9kZSA9PSBSZXNldEJhZGx5
KQorICAgICAgICAgICAgICAgIHJlc2V0QmFkbHkoZnJlZUNlbGwsIGNlbGxTaXplKCkpOwogICAg
ICAgICAgICAgZnJlZUNlbGwtPm5leHQgPSBoZWFkOwogICAgICAgICAgICAgaGVhZCA9IGZyZWVD
ZWxsOwogICAgICAgICAgICAgKytjb3VudDsKQEAgLTEzOSwxNyArMTYwLDI1IEBAIE1hcmtlZEJs
b2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXAKICAgICAgICAgcmV0dXJuIEZyZWVMaXN0
KCk7CiAKICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rp
b24pCi0gICAgICAgIHJldHVybiBzd2VlcEhlbHBlcjx0cnVlPihzd2VlcE1vZGUpOwotICAgIHJl
dHVybiBzd2VlcEhlbHBlcjxmYWxzZT4oc3dlZXBNb2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVw
SGVscGVyU2VsZWN0UmVzZXRNb2RlPE5lZWRzRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7CisgICAg
cmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0UmVzZXRNb2RlPERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24+
KHN3ZWVwTW9kZSk7Cit9CisKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1v
ZGU+CitNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnN3ZWVwSGVscGVyU2VsZWN0
UmVzZXRNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCit7CisgICAgaWYgKHJlc2V0RnJlZUNlbGxz
QmFkbHkoKSkKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U3RhdGVBbmRTd2VlcE1v
ZGU8ZGVzdHJ1Y3Rpb25Nb2RlLCBSZXNldEJhZGx5Pihzd2VlcE1vZGUpOworICAgIHJldHVybiBz
d2VlcEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlPGRlc3RydWN0aW9uTW9kZSwgRG9udFJl
c2V0Pihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxib29sIGNhbGxEZXN0cnVjdG9ycz4KLU1h
cmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXBIZWxwZXIoU3dlZXBNb2RlIHN3
ZWVwTW9kZSkKK3RlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtl
ZEJsb2NrOjpSZXNldE1vZGUgcmVzZXRNb2RlPgorTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpzd2VlcEhlbHBlclNlbGVjdFN0YXRlQW5kU3dlZXBNb2RlKFN3ZWVwTW9kZSBzd2Vl
cE1vZGUpCiB7CiAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgY2FzZSBOZXc6CiAgICAgICAg
IEFTU0VSVChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAgcmV0dXJuIHNw
ZWNpYWxpemVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGNhbGxEZXN0cnVjdG9ycz4oKTsK
KyAgICAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3QsIGRl
c3RydWN0aW9uTW9kZSwgcmVzZXRNb2RlPigpOwogICAgIGNhc2UgRnJlZUxpc3RlZDoKICAgICAg
ICAgLy8gSGFwcGVucyB3aGVuIGEgYmxvY2sgdHJhbnNpdGlvbnMgdG8gZnVsbHkgYWxsb2NhdGVk
LgogICAgICAgICBBU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7CkBAIC0xNjAs
OCArMTg5LDggQEAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJsb2NrOjpzd2VlcAogICAg
ICAgICByZXR1cm4gRnJlZUxpc3QoKTsKICAgICBjYXNlIE1hcmtlZDoKICAgICAgICAgcmV0dXJu
IHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QKLSAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRT
d2VlcDxNYXJrZWQsIFN3ZWVwVG9GcmVlTGlzdCwgY2FsbERlc3RydWN0b3JzPigpCi0gICAgICAg
ICAgICA6IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcE9ubHksIGNhbGxEZXN0cnVjdG9y
cz4oKTsKKyAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwVG9GcmVl
TGlzdCwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+KCkKKyAgICAgICAgICAgIDogc3BlY2lh
bGl6ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwT25seSwgZGVzdHJ1Y3Rpb25Nb2RlLCByZXNldE1vZGU+
KCk7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjA0MDU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNzAsNyArNzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIHN0cnVj
dCBWZXJpZnlNYXJrZWRPclJldGlyZWQ7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGF0b21TaXplID0gMTY7IC8vIGJ5dGVzCi0gICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgYmxvY2tTaXplID0gMTYgKiBLQjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBi
bG9ja1NpemUgPSA2NCAqIEtCOwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJsb2NrTWFz
ayA9IH4oYmxvY2tTaXplIC0gMSk7IC8vIGJsb2NrU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdv
LgogCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbXNQZXJCbG9jayA9IGJsb2NrU2l6
ZSAvIGF0b21TaXplOwpAQCAtMTA5LDEyICsxMDksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBtdXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAgICAg
ICBzdGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6
ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMm
KTsKKyAgICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiB0cnlDcmVhdGUoSGVhcCYsIE1hcmtlZEFs
bG9jYXRvciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0
b3JBdHRyaWJ1dGVzJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIE1hcmtl
ZEJsb2NrKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lk
Kik7CisgICAgICAgIHZvaWQqIGNlbGxBbGlnbih2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJr
ZWRCbG9jayogYmxvY2tGb3IoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGZp
cnN0QXRvbSgpOworICAgICAgICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKQEAgLTE4NCwxNSAr
MTg2LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0
b21BbGlnbm1lbnRNYXNrID0gYXRvbVNpemUgLSAxOwogCiAgICAgICAgIGVudW0gQmxvY2tTdGF0
ZSB7IE5ldywgRnJlZUxpc3RlZCwgQWxsb2NhdGVkLCBNYXJrZWQsIFJldGlyZWQgfTsKLSAgICAg
ICAgdGVtcGxhdGU8Ym9vbCBjYWxsRGVzdHJ1Y3RvcnM+IEZyZWVMaXN0IHN3ZWVwSGVscGVyKFN3
ZWVwTW9kZSA9IFN3ZWVwT25seSk7CisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZT4g
RnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RSZXNldE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5
KTsKKyAgICAgICAgZW51bSBSZXNldE1vZGUgeyBEb250UmVzZXQsIFJlc2V0QmFkbHkgfTsKKyAg
ICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlLCBSZXNldE1vZGU+IEZyZWVMaXN0IHN3ZWVw
SGVscGVyU2VsZWN0U3RhdGVBbmRTd2VlcE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKIAog
ICAgICAgICB0eXBlZGVmIGNoYXIgQXRvbVthdG9tU2l6ZV07CiAKICAgICAgICAgTWFya2VkQmxv
Y2soTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNv
bnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKICAgICAgICAgQXRvbSogYXRvbXMoKTsKLSAgICAg
ICAgc2l6ZV90IGF0b21OdW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIGNhbGxEZXN0
cnVjdG9yKEhlYXBDZWxsKik7Ci0gICAgICAgIHRlbXBsYXRlPEJsb2NrU3RhdGUsIFN3ZWVwTW9k
ZSwgYm9vbCBjYWxsRGVzdHJ1Y3RvcnM+IEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAoKTsKKyAg
ICAgICAgdGVtcGxhdGU8QmxvY2tTdGF0ZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFJl
c2V0TW9kZT4gRnJlZUxpc3Qgc3BlY2lhbGl6ZWRTd2VlcCgpOwogICAgICAgICAKICAgICAgICAg
TWFya2VkQmxvY2sqIG1fcHJldjsKICAgICAgICAgTWFya2VkQmxvY2sqIG1fbmV4dDsKQEAgLTIz
Niw2ICsyMzksMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiAhKHJlaW50ZXJw
cmV0X2Nhc3Q8Qml0cz4ocCkgJiBhdG9tQWxpZ25tZW50TWFzayk7CiAgICAgfQogCisgICAgaW5s
aW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpjZWxsQWxpZ24odm9pZCogcCkKKyAgICB7CisgICAgICAg
IEJpdHMgYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYXRvbXMoKSArIGZpcnN0QXRvbSgp
KTsKKyAgICAgICAgQml0cyBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPihwKTsKKyAgICAg
ICAgYml0cyAtPSBiYXNlOworICAgICAgICBiaXRzIC09IGJpdHMgJSBjZWxsU2l6ZSgpOworICAg
ICAgICBiaXRzICs9IGJhc2U7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihiaXRzKTsKKyAgICB9CisKICAgICBpbmxpbmUgTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpi
bG9ja0Zvcihjb25zdCB2b2lkKiBwKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYmxvY2tNYXNr
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjIsMTIgKzYyLDE1IEBAIHB1YmxpYzoKICAgICB+TWFya2VkU3Bh
Y2UoKTsKICAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKKyAgICBzdGF0aWMgc2l6
ZV90IG9wdGltYWxTaXplRm9yKHNpemVfdCk7CisgICAgCiAgICAgTWFya2VkQWxsb2NhdG9yJiBh
bGxvY2F0b3JGb3Ioc2l6ZV90KTsKICAgICBNYXJrZWRBbGxvY2F0b3ImIGRlc3RydWN0b3JBbGxv
Y2F0b3JGb3Ioc2l6ZV90KTsKICAgICBNYXJrZWRBbGxvY2F0b3ImIGF1eGlsaWFyeUFsbG9jYXRv
ckZvcihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90KTsK
ICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCog
YWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFy
eShzaXplX3QpOwogCiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhEZXN0cnVj
dG9yKCkgeyByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2U7IH0KICAgICBTdWJzcGFjZSYgc3Vic3Bh
Y2VGb3JPYmplY3RzV2l0aG91dERlc3RydWN0b3IoKSB7IHJldHVybiBtX25vcm1hbFNwYWNlOyB9
CkBAIC0xODIsNiArMTg1LDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVB
dXhpbGkKICAgICByZXR1cm4gYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZShi
eXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXhpbGlh
cnkoc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0
ZXMpLnRyeUFsbG9jYXRlKGJ5dGVzKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+
IGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKIHsKICAgICBmb3JFYWNoU3Vic3BhY2UoCkBAIC0yNTEsNiArMjU5LDE1IEBAIGlubGlu
ZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoU3Vic3BhY2UKICAgICBmdW5jKG1fYXV4aWxpYXJ5
U3BhY2UsIGF0dHJpYnV0ZXMpOwogfQogCitBTFdBWVNfSU5MSU5FIHNpemVfdCBNYXJrZWRTcGFj
ZTo6b3B0aW1hbFNpemVGb3Ioc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChieXRlcyA8PSBwcmVj
aXNlQ3V0b2ZmKQorICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHByZWNp
c2VTdGVwLCBieXRlcyk7CisgICAgaWYgKGJ5dGVzIDw9IGltcHJlY2lzZUN1dG9mZikKKyAgICAg
ICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihpbXByZWNpc2VTdGVwLCBieXRlcyk7
CisgICAgcmV0dXJuIE1hcmtlZEFsbG9jYXRvcjo6b3B0aW1hbFNpemVGb3JMYXJnZUFsbG9jYXRp
b24oYnl0ZXMpOworfQorCiBpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxs
b2NhdG9yRm9yKFN1YnNwYWNlJiBzcGFjZSwgc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChi
eXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3Bw
CShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsNiArOTYsOCBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogewogICAgIGlmIChoZWFwKCktPm9wZXJhdGlv
bkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgQVNTRVJUKG1fb3BhcXVl
Um9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KKyAgICBlbHNl
CisgICAgICAgIHJlc2V0KCk7CiAKICAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIg
PSB2bSgpLmhlYXBQcm9maWxlcigpKQogICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBo
ZWFwUHJvZmlsZXItPmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpOwpAQCAtMTE4LDEwICsxMjAsNDIg
QEAgdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2soKQogCiB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewotICAgIEpT
Q2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBIZWFwQ2VsbCoq
IHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKICAgICBzaXplX3Qgc2l6ZSA9IGNv
bnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgYXBwZW5kKHJvb3RzW2ldKTsKKyAgICAgICAgYXBwZW5kSlNDZWxsT3JB
dXhpbGlhcnkocm9vdHNbaV0pOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxP
ckF1eGlsaWFyeShIZWFwQ2VsbCogaGVhcENlbGwpCit7CisgICAgaWYgKCFoZWFwQ2VsbCkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVCghbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb24pOworICAgIAorICAgIGlmIChIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGhlYXBD
ZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IE1h
cmtlZEJsb2NrOjpibG9ja0ZvcihoZWFwQ2VsbCk7CisgICAgc3dpdGNoIChibG9jay0+Y2VsbEtp
bmQoKSkgeworICAgIGNhc2UgSGVhcENlbGw6OkpTQ2VsbDogeworICAgICAgICBKU0NlbGwqIGpz
Q2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghanNDZWxsLT5zdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisKKyAgICAgICAgYXBw
ZW5kVG9NYXJrU3RhY2soYmxvY2ssIGpzQ2VsbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgSGVhcENlbGw6OkF1eGlsaWFyeTogeworICAgICAgICBub3RlTGl2
ZUF1eGlsaWFyeUNlbGwoYmxvY2ssIGhlYXBDZWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0g
fQogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNWYWx1ZSB2YWx1ZSkKQEAgLTE2OCwx
NyArMjAyLDQ1IEBAIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWEKIAog
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQogeworICAg
IGFwcGVuZFRvTWFya1N0YWNrKE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKSwgY2VsbCk7Cit9
CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKE1hcmtlZEJsb2NrKiBibG9j
aywgSlNDZWxsKiBjZWxsKQorewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAg
ICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKLQorICAgIAorICAgIC8vIEZJWE1FOiBUaGVz
ZSAianVzdCB3b3JrIiBiZWNhdXNlIHRoZSBHQyByZXNldHMgdGhlc2UgZmllbGRzIGJlZm9yZSBk
b2luZyBhbnl0aGluZyBlbHNlLiBCdXQKKyAgICAvLyB0aGF0IHdvbid0IGJlIHRoZSBjYXNlIHdo
ZW4gd2UgZG8gY29uY3VycmVudCBHQy4KICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5dGVz
VmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxTaXplKCk7CisgICAg
bV9ieXRlc1Zpc2l0ZWQgKz0gYmxvY2stPmNlbGxTaXplKCk7CisgICAgCiAgICAgbV9zdGFjay5h
cHBlbmQoY2VsbCk7CiAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkK
ICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNlbGwpOwogfQogCit2
b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCit7CisgICAg
aWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoYmFzZSkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGJhc2UpLCBi
aXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihiYXNlKSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6Om5v
dGVMaXZlQXV4aWxpYXJ5Q2VsbChNYXJrZWRCbG9jayogYmxvY2ssIEhlYXBDZWxsKikKK3sKKyAg
ICAvLyBXZSBnZXQgaGVyZSBvbmNlIHBlciBHQyB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzOgor
ICAgIC8vCisgICAgLy8gRWRlbiBjb2xsZWN0aW9uOiBpZiB0aGUgY2VsbCB3YXMgYWxsb2NhdGVk
IHNpbmNlIHRoZSBsYXN0IGNvbGxlY3Rpb24gYW5kIGlzIGxpdmUgc29tZWhvdy4KKyAgICAvLwor
ICAgIC8vIEZ1bGwgY29sbGVjdGlvbjogaWYgdGhlIGNlbGwgaXMgbGl2ZSBzb21laG93LgorICAg
IAorICAgIG1fdmlzaXRDb3VudCsrOworICAgIG1fYnl0ZXNWaXNpdGVkICs9IGJsb2NrLT5jZWxs
U2l6ZSgpOworfQorCiBjbGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlIHsKIHB1YmxpYzoKICAgICBT
ZXRDdXJyZW50Q2VsbFNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBKU0NlbGwqIGNl
bGwpCkBAIC0yMDIsOSArMjY0LDkgQEAgcHJpdmF0ZToKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJU
KEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKLQorICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUg
Y3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7Ci0KKyAgICAKICAgICBtX2N1cnJlbnRPYmpl
Y3RDZWxsU3RhdGVCZWZvcmVWaXNpdGluZyA9IGNlbGwtPmNlbGxTdGF0ZSgpOwogICAgIGNlbGwt
PnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok9sZEJsYWNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsOCArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBD
b25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKIGNsYXNzIEhlYXA7
CitjbGFzcyBIZWFwQ2VsbDsKIGNsYXNzIEhlYXBTbmFwc2hvdEJ1aWxkZXI7CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjbGFzcyBKSVRXcml0ZUJhcnJpZXI7CitjbGFzcyBNYXJrZWRCbG9jazsKIGNs
YXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBX
ZWFrOwogY2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKQEAgLTEwNSw2ICsxMDcsMTAgQEAg
cHVibGljOgogCiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICAKKyAgICAvLyBUaGlzIGluZm9y
bXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGlu
ZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCisgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxs
IGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KKyAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9p
ZCogYmFzZSk7CiAKICAgICB2b2lkIGNvcHlMYXRlcihKU0NlbGwqLCBDb3B5VG9rZW4sIHZvaWQq
LCBzaXplX3QpOwogICAgIApAQCAtMTI0LDEwICsxMzAsMTMgQEAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFwcGVuZChKU1ZhbHVlKTsgLy8gVGhpcyBpcyBwcml2YXRlIHRvIGVuY291cmFnZSBj
bGllbnRzIHRvIHVzZSBXcml0ZUJhcnJpZXI8VD4uCisgICAgdm9pZCBhcHBlbmRKU0NlbGxPckF1
eGlsaWFyeShIZWFwQ2VsbCopOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpTVmFsdWUpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhK
U0NlbGwqKTsKICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOworICAgIHZvaWQg
YXBwZW5kVG9NYXJrU3RhY2soTWFya2VkQmxvY2sqLCBKU0NlbGwqKTsKKyAgICB2b2lkIG5vdGVM
aXZlQXV4aWxpYXJ5Q2VsbChNYXJrZWRCbG9jayosIEhlYXBDZWxsKik7CiAgICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgdm9pZCBtZXJnZU9w
YXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9u
IDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDkgQEAKICNpbmNsdWRl
ICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJZGVudGlm
aWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlw
dENhbGxGcmFtZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MiwxNyArNDcyLDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNl
T2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7CiB9CiAK
LXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKLQotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPiBiYXNl
LT5zdHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBBU1NFUlQoIXZtLmhl
YXAuc3RvcmFnZUFsbG9jYXRvcigpLmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBiYXNlLT5zZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwotICAg
IGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKLX0K
LQogQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc1N0cmluZ09yU3ltYm9sKEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlLmlzU3RyaW5nKCkgfHwgdmFsdWUuaXNTeW1ib2woKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lv
biAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkU3RyaWMKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgU3RydWN0
dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0
aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFM
Owogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbElu
Zm8qKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnREYXRhLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lk
IERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICBTVEFUSUNfQVNTRVJUKEdldFB1
dEluZm86OmluaXRpYWxpemF0aW9uU2hpZnQgPT0gMTApOwogICAgIFNUQVRJQ19BU1NFUlQoR2V0
UHV0SW5mbzo6aW5pdGlhbGl6YXRpb25CaXRzID09IDB4ZmZjMDApOwogCi0gICAgU1RBVElDX0FT
U0VSVChNYXJrZWRCbG9jazo6YmxvY2tNYXNrID09IH5zdGF0aWNfY2FzdDxkZWNsdHlwZShNYXJr
ZWRCbG9jazo6YmxvY2tNYXNrKT4oMHgzZmZmKSk7CisgICAgU1RBVElDX0FTU0VSVChNYXJrZWRC
bG9jazo6YmxvY2tTaXplID09IDY0ICogMTAyNCk7CiAKICAgICBBU1NFUlQoYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpID09IHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMHg3YTExKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwNDA1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw3IEBAIGNvbnN0IEluaXRpYWxpemF0aW9u
TW9kZU1hc2sgPSAweGZmYzAwCiBjb25zdCBJbml0aWFsaXphdGlvbk1vZGVTaGlmdCA9IDEwCiBj
b25zdCBOb3RJbml0aWFsaXphdGlvbiA9IDIKIAotY29uc3QgTWFya2VkQmxvY2tTaXplID0gMTYg
KiAxMDI0Citjb25zdCBNYXJrZWRCbG9ja1NpemUgPSA2NCAqIDEwMjQKIGNvbnN0IE1hcmtlZEJs
b2NrTWFzayA9IH4oTWFya2VkQmxvY2tTaXplIC0gMSkKIAogIyBBbGxvY2F0aW9uIGNvbnN0YW50
cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXpl
ci5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJNb2R1bGVBbmFseXplci5oIgogCi0jaW5jbHVkZSAiSWRl
bnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUg
Ik1vZHVsZVNjb3BlRGF0YS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTcwLDEzICs3MCwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIC8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFu
IGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KICNkZWZpbmUgTUFYX0FS
UkFZX0lOREVYIDB4RkZGRkZGRkVVCiAKLS8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMg
dGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQorLy8g
VGhlIHZhbHVlIEJBU0VfWFhYX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZl
Y3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQogLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNy
ZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQot
I2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAgICAKKyNkZWZpbmUgQkFTRV9DT05USUdVT1VT
X1ZFQ1RPUl9MRU4gM1UKKyNkZWZpbmUgQkFTRV9BUlJBWV9TVE9SQUdFX1ZFQ1RPUl9MRU4gNFUK
KwogLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0
aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50CiAvLyBpcyBhZGRlZC4KLSNkZWZpbmUgRklS
U1RfVkVDVE9SX0dST1cgNFUKKyNkZWZpbmUgRklSU1RfQVJSQVlfU1RPUkFHRV9WRUNUT1JfR1JP
VyA0VQogCiAjZGVmaW5lIE1JTl9CRVlPTkRfTEVOR1RIX1NQQVJTRV9JTkRFWCAxMDAwCiAKQEAg
LTk2LDcgKzk3LDcgQEAgaW5saW5lIGJvb2wgaW5kZXhJc1N1ZmZpY2llbnRseUJleW9uZExlbgog
ICAgIHJldHVybiBpID49IE1JTl9CRVlPTkRfTEVOR1RIX1NQQVJTRV9JTkRFWCAmJiBpID4gbGVu
Z3RoOwogfQogCi1pbmxpbmUgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK2lubGluZSBJbmRleGluZ0hl
YWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5U3RvcmFnZSh1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ0hlYWRlciByZXN1bHQ7CiAgICAgcmVz
dWx0LnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwpAQCAtMTA0LDkgKzEwNSw5IEBAIGlubGluZSBJ
bmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckEKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1pbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWdu
ZWQgbGVuZ3RoKQoraW5saW5lIEluZGV4aW5nSGVhZGVyIGJhc2VJbmRleGluZ0hlYWRlckZvckFy
cmF5U3RvcmFnZSh1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGluZGV4aW5nSGVhZGVy
Rm9yQXJyYXkobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHJldHVybiBpbmRleGluZ0hl
YWRlckZvckFycmF5U3RvcmFnZShsZW5ndGgsIEJBU0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVO
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcg
KzI5LDkgQEAKICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQnV0dGVy
Zmx5LmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJNYXJrZWRTcGFj
ZS5oIgogI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KIApAQCAtNTgsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgLy8gV2Ugc3RlYWwgdHdvIGZp
ZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgog
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1
YmxpY0xlbmd0aCgpOyB9CiAgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGlu
ZGV4aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOyB9Ci0gICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7
IH0KKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hl
YWRlcigpLT52ZWN0b3JMZW5ndGgoKTsgfQogICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2ln
bmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsg
fQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5SGVhZGVyRnJvbUR1cmluZ0dDKGNv
bnN0IEFycmF5U3RvcmFnZSYgb3RoZXIpCkBAIC05OSw2ICsxMDEsNjYgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyB2ZWN0b3JM
ZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAgICB9CisgICAgCisgICAg
c3RhdGljIHNpemVfdCB0b3RhbFNpemVGb3IodW5zaWduZWQgaW5kZXhCaWFzLCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgdHJ1
ZSwgc2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHRvdGFs
U2l6ZShzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0b3RhbFNpemVGb3IobV9pbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIHZlY3Rvckxlbmd0
aCgpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHRvdGFsU2l6ZShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b3RhbFNpemUoc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGF2
YWlsYWJsZVZlY3Rvckxlbmd0aCh1bnNpZ25lZCBpbmRleEJpYXMsIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICBzaXplX3QgY2Vs
bFNpemUgPSBNYXJrZWRTcGFjZTo6b3B0aW1hbFNpemVGb3IodG90YWxTaXplRm9yKGluZGV4Qmlh
cywgcHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIAorICAgICAgICB2
ZWN0b3JMZW5ndGggPSAoY2VsbFNpemUgLSB0b3RhbFNpemVGb3IoaW5kZXhCaWFzLCBwcm9wZXJ0
eUNhcGFjaXR5LCAwKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKworICAgICAg
ICByZXR1cm4gdmVjdG9yTGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQg
YXZhaWxhYmxlVmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGluZGV4QmlhcywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdmFp
bGFibGVWZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCksIHZlY3Rvckxlbmd0aCk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGF2YWlsYWJsZVZl
Y3Rvckxlbmd0aChzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVZlY3Rvckxlbmd0aChtX2luZGV4Qmlh
cywgcHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVuZ3RoKTsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgYXZhaWxhYmxlVmVjdG9yTGVuZ3RoKFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gYXZhaWxhYmxlVmVjdG9yTGVu
Z3RoKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdmVjdG9yTGVuZ3RoKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdW5zaWduZWQgb3B0aW1hbFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBpbmRl
eEJpYXMsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisg
ICAgeworICAgICAgICB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX0FSUkFZX1NUT1JBR0Vf
VkVDVE9SX0xFTiwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVZlY3Rv
ckxlbmd0aChpbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIHZlY3Rvckxlbmd0aCk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBvcHRpbWFsVmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGluZGV4QmlhcywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkK
KyAgICB7CisgICAgICAgIHJldHVybiBvcHRpbWFsVmVjdG9yTGVuZ3RoKGluZGV4Qmlhcywgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB2ZWN0b3JMZW5ndGgpOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBvcHRpbWFsVmVjdG9yTGVuZ3RoKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb3B0aW1hbFZl
Y3Rvckxlbmd0aChtX2luZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVuZ3RoKTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgb3B0aW1hbFZlY3Rvckxlbmd0aChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG9wdGltYWxWZWN0b3JMZW5ndGgoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB2ZWN0
b3JMZW5ndGgpOworICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworY2xhc3MgVk07CisKKy8v
IEFuIEF1eGlsaWFyeSBiYXJyaWVyIGlzIGEgYmFycmllciB0aGF0IGRvZXMgbm90IHRyeSB0byBy
ZWFzb24gYWJvdXQgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBpbnRvCisvLyBpdCwgb3RoZXIgdGhh
biBpbnRlcnByZXRpbmcgYSBmYWxzaXNoIHZhbHVlIGFzIG5vdCBuZWVkIGEgYmFycmllci4gSXQn
cyBPSyB0byB1c2UgdGhpcyBmb3IgZWl0aGVyCisvLyBKU0NlbGxzIG9yIGFueSBvdGhlciBraW5k
IG9mIGRhdGEsIHNvIGxvbmcgYXMgaXQgcmVzcG9uZHMgdG8gb3BlcmF0b3IhKCkuCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CitwdWJsaWM6CisgICAgQXV4
aWxpYXJ5QmFycmllcigpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAg
QXV4aWxpYXJ5QmFycmllcihWTSYsIEpTQ2VsbCosIFUmJik7CisgICAgCisgICAgdm9pZCBjbGVh
cigpIHsgbV92YWx1ZSA9IFQoKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgdm9pZCBzZXQoVk0mLCBKU0NlbGwqLCBVJiYpOworICAgIAorICAgIGNvbnN0IFQmIGdldCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBzbG90KCkgeyByZXR1cm4g
Jm1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2
b2lkIHNldFdpdGhvdXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBtX3ZhbHVlID0gc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUIG1fdmFsdWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4
aWxpYXJ5QmFycmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVT4KK0F1eGlsaWFyeUJh
cnJpZXI8VD46OkF1eGlsaWFyeUJhcnJpZXIoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBVJiYgdmFs
dWUpCit7CisgICAgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7CisgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIob3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxh
dGU8dHlwZW5hbWUgVT4KK3ZvaWQgQXV4aWxpYXJ5QmFycmllcjxUPjo6c2V0KFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgVSYmIHZhbHVlKQoreworICAgIG1fdmFsdWUgPSBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eS5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNiArOTAsMTIgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAg
ICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIHVuc2lnbmVkIGF2YWlsYWJsZUNv
bnRpZ3VvdXNWZWN0b3JMZW5ndGgoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0
b3JMZW5ndGgoU3RydWN0dXJlKiwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICAKKyAgICBB
TFdBWVNfSU5MSU5FIHN0YXRpYyB1bnNpZ25lZCBvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0
aChzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICBz
dGF0aWMgdW5zaWduZWQgb3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoU3RydWN0dXJlKiwg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJl
IG5vdCBqdXN0IGJlY2F1c2UgaXQncyBoYW5keSwgYnV0IHRvIHJlbWluZCB5b3UgdGhhdAogICAg
IC8vIHRoZSB3aG9sZSBwb2ludCBvZiBidXR0ZXJmbGllcyBpcyB0byBkbyBldmlsIHBvaW50ZXIg
YXJpdGhtZXRpYy4KICAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tUG9pbnRlcihjaGFyKiBwdHIp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5s
aW5lcy5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEyICszNSwzNSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6OmF2YWls
YWJsZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICBzaXplX3QgY2VsbFNpemUgPSB0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHZlY3Rvckxl
bmd0aCk7CisgICAgY2VsbFNpemUgPSBNYXJrZWRTcGFjZTo6b3B0aW1hbFNpemVGb3IoY2VsbFNp
emUpOworICAgIHZlY3Rvckxlbmd0aCA9IChjZWxsU2l6ZSAtIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0
eUNhcGFjaXR5LCB0cnVlLCAwKSkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgIHJldHVy
biB2ZWN0b3JMZW5ndGg7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgQnV0dGVyZmx5Ojph
dmFpbGFibGVDb250aWd1b3VzVmVjdG9yTGVuZ3RoKFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgcmV0dXJuIGF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0
b3JMZW5ndGgoc3RydWN0dXJlID8gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpIDogMCwg
dmVjdG9yTGVuZ3RoKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9w
dGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9D
T05USUdVT1VTX1ZFQ1RPUl9MRU4sIHZlY3Rvckxlbmd0aCk7CisgICAgcmV0dXJuIGF2YWlsYWJs
ZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgocHJvcGVydHlDYXBhY2l0eSwgdmVjdG9yTGVuZ3RoKTsK
K30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3Vz
VmVjdG9yTGVuZ3RoKFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgp
Cit7CisgICAgcmV0dXJuIG9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSA/
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA6IDAsIHZlY3Rvckxlbmd0aCk7Cit9CisK
IGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0s
IEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKQogewotICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90IHNpemUgPSB0b3Rh
bFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgc2l6ZSwgJnRlbXApKTsKLSAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uaGVhcC5hbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRl
ZE93bmVyLCBzaXplKTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0xMTksNyArMTQyLDggQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlS
aQogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNp
emVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5n
SGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1Np
emUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICghdm0uaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZShp
bnRlbmRlZE93bmVyLCAmdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgdGhlQmFzZSA9
IHZtLmhlYXAudHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93bmVyLCB0aGVCYXNlLCBv
bGRTaXplLCBuZXdTaXplKTsKKyAgICBpZiAoIXRoZUJhc2UpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBmcm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDE5IEBAIENs
b25lZEFyZ3VtZW50czo6Q2xvbmVkQXJndW1lbnRzKFZNJiB2bSwKIENsb25lZEFyZ3VtZW50cyog
Q2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKICAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGxlbmd0aCk7Cisg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbGVuZ3RoOwogICAgIGlmICh2ZWN0b3JMZW5ndGgg
PiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZv
aWQqIHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgdm9pZCog
dGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JM
ZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgaWYgKCF0ZW1wKQogICAgICAg
ICByZXR1cm4gMDsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJh
c2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBidXR0ZXJm
bHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIGJ1dHRlcmZseS0+c2V0UHVi
bGljTGVuZ3RoKGxlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBp
IDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmNsZWFyKCk7CiAKICAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9CiAgICAgICAgIG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPENsb25lZEFyZ3VtZW50cz4odm0uaGVhcCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNyw4IEBA
CiAjaW5jbHVkZSAiR2VuZXJhdG9yUHJvdG90eXBlLmgiCiAKICNpbmNsdWRlICJKU0NCdWlsdGlu
cy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIkdlbmVyYXRv
clByb3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKHRoZXRh
bGVjcmFmdGVyQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAxNSBTdWtvbHNhayBTYWtz
aHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMyw4ICszNCw3IEBACiAjaW5jbHVkZSAiSW50bENvbGxhdG9yQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0j
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1l
Rm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw4ICszNCw3IEBACiAjaW5jbHVkZSAiSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgi
Ci0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsOCBAQAogI2lu
Y2x1ZGUgIkludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkludGxPYmpl
Y3QuaCIKICNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCw4IEBACiAjaW5jbHVkZSAiSW50bERhdGVU
aW1lRm9ybWF0LmgiCiAjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQm91bmRG
dW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlND
ZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDgg
QEAKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJ
bnRsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwxMiBAQCB1c2luZyBu
YW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIDAKKyNkZWZpbmUgTE9HSVQo
KSBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6ICIsIFdURl9QUkVUVFlfRlVOQ1RJT04sICJc
biIpOworI2Vsc2UKKyNkZWZpbmUgTE9HSVQoKSBkbyB7IH0gd2hpbGUoZmFsc2UpCisjZW5kaWYK
KwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTQXJyYXkpOwogCiBj
b25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU05vbkZpbmFsT2Jq
ZWN0OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheSl9OwpAQCAtNjEsNiAr
NjcsOCBAQCBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uCiAKIHZvaWQg
SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRhYmxl
KQogeworICAgIExPR0lUKCk7CisgICAgCiAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8
fCAhd3JpdGFibGUpOwogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQog
ICAgICAgICByZXR1cm47CkBAIC0yMzgsMTEgKzI0NiwxMyBAQCB2b2lkIEpTQXJyYXk6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2
ZWN0b3IsIGJ1dCBsZWF2ZXMgdGhlIG5ldyBzcGFjZSBmb3IgY291bnQgc2xvdHMgdW5jbGVhcmVk
LgogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdm0sIGJvb2wgYWRkVG9G
cm9udCwgdW5zaWduZWQgY291bnQpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pOwogICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlD
YXBhY2l0eSA9IHN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgdW5zaWdu
ZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lU2l6ZSgpOwotCisgICAg
CiAgICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3Qg
cGF0aC4KICAgICBBU1NFUlQoIWFkZFRvRnJvbnQgfHwgY291bnQgPiBzdG9yYWdlLT5tX2luZGV4
Qmlhcyk7CiAKQEAgLTI1NCw3ICsyNjQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKFZNJiB2CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxhcmdlIHNob3Vs
ZCB3ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJlcXVpcmVkVmVj
dG9yTGVuZ3RoLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7Ci0g
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG9sZFZlY3Rv
ckxlbmd0aCwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBs
ZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAo
Y291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAg
LTI2NSw3ICsyNzYsMTAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYg
dgogICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKICAgICB1bnNpZ25lZCBjdXJyZW50
Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFz
OwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZs
b3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICB1
bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwg
bWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOworICAgIC8v
IEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxkIGJlIGZpeGVkIHRvIGF2b2lkIGludGVybmFsIGZyYWdt
ZW50YXRpb24uIEl0J3Mgbm90IHN1cGVyIGhpZ2gKKyAgICAvLyBwcmlvcml0eSBzaW5jZSBpbmNy
ZWFzZVZlY3Rvckxlbmd0aCgpIHdpbGwgImZpeCIgYW55IG1pc3Rha2VzIHdlIG1ha2UsIGJ1dCBp
dCB3b3VsZCBiZSBjb29sCisgICAgLy8gdG8gZ2V0IHRoaXMgcmlnaHQgZXZlbnR1YWxseS4KKyAg
ICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCwgbWF4KEJBU0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOLCByZXF1aXJlZFZlY3Rvckxlbmd0
aCkgPDwgMSk7CiAKICAgICAvLyBTdGVwIDI6CiAgICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRv
IGNob29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRv
IHJldXNlIHRoZSBleGlzdGluZyBvbmUuCkBAIC0yNzMsMTUgKzI4NywxOSBAQCBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7CiAgICAgdW5zaWduZWQgbmV3U3RvcmFn
ZUNhcGFjaXR5OworICAgIGJvb2wgYWxsb2NhdGVkTmV3U3RvcmFnZTsKICAgICAvLyBJZiB0aGUg
Y3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28g
bGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KICAgICBpZiAoY3VycmVudENhcGFjaXR5
ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFj
aXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKICAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0
dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSh2bSkpOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkg
PSBjdXJyZW50Q2FwYWNpdHk7CisgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsK
ICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNp
cmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0
aGlzLCBuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0u
aGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBuZXdTaXplKTsKKyAgICAgICAgaWYgKCFu
ZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3Jh
Z2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKKyAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFn
ZSA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gU3RlcCAzOgpAQCAtMzExLDEzICszMjksMTkgQEAg
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgICAgICBBU1NFUlQo
Y291bnQgKyB1c2VkVmVjdG9yTGVuZ3RoIDw9IG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIG1l
bW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IgKyBjb3VudCwgc3Rv
cmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOwogICAg
ICAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNp
emUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihK
U1ZhbHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoMCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGFsbG9jYXRlZE5ld1N0
b3JhZ2UpIHsKKyAgICAgICAgICAgIC8vIFdlIHdpbGwgc2V0IHRoZSB2ZWN0b3JMZW5ndGggdG8g
bmV3VmVjdG9yTGVuZ3RoLiBXZSBwb3B1bGF0ZWQgcmVxdWlyZWRWZWN0b3JMZW5ndGgKKyAgICAg
ICAgICAgIC8vICh1c2VkVmVjdG9yTGVuZ3RoICsgY291bnQpLCB3aGljaCBpcyBsZXNzLiBDbGVh
ciB0aGUgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJlcXVpcmVk
VmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAoKG5ld0FsbG9jQmFzZSAhPSBidXR0ZXJmbHktPmJhc2Uoc3Ry
dWN0dXJlKHZtKSkpIHx8IChuZXdJbmRleEJpYXMgIT0gc3RvcmFnZS0+bV9pbmRleEJpYXMpKSB7
CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6
ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoSlNWYWx1
ZSkgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IG5ld1ZlY3RvciA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAg
ICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVxdWlyZWRWZWN0b3JMZW5ndGg7IGkg
PCBuZXdWZWN0b3JMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIG5ld1ZlY3RvcltpXS5jbGVhcigp
OworICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Y2xlYXIoKTsKICAgICB9CiAKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRW
ZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKQEAgLTMyOSw4ICszNTMsMTAgQEAgYm9vbCBK
U0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogCiBib29sIEpTQXJyYXk6OnNldExl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgs
IGJvb2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKKyAgICBMT0dJ
VCgpOworICAgIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwotCisg
ICAgCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBzcGFy
c2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lmJy4KICAgICBBU1NFUlQo
aXNMZW5ndGhXcml0YWJsZSgpIHx8IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKIApAQCAtMzkzLDYg
KzQxOSw4IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKIAogYm9v
bCBKU0FycmF5OjphcHBlbmRNZW1jcHkoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIEpTQzo6SlNBcnJheSogb3RoZXJBcnJheSkKIHsKKyAgICBMT0dJVCgpOwor
ICAgIAogICAgIGlmICghY2FuRmFzdENvcHkodm0sIG90aGVyQXJyYXkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTQzMyw2ICs0NjEsOCBAQCBib29sIEpTQXJyYXk6OmFwcGVuZE1lbWNw
eShFeGVjU3RhdGUqIGV4CiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQogeworICAgIExPR0lU
KCk7CisgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
ICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAt
NDk3LDYgKzUyNyw4IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywK
IAogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogeworICAgIExPR0lUKCk7
CisgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAg
ICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CkBAIC01OTQsNiArNjI2LDggQEAgSlNW
YWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogLy8gIC0gcHVzaGluZyB0byBhbiBh
cnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSBy
YW5nZSBlcnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsK
QEAgLTczMCw2ICs3NjQsOCBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBK
U1ZhCiAKIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGV4ZWMsIHVuc2ln
bmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogeworICAgIExPR0lUKCk7CisgICAgCiAg
ICAgYXV0byBhcnJheVR5cGUgPSBpbmRleGluZ1R5cGUoKTsKICAgICBzd2l0Y2ggKGFycmF5VHlw
ZSkgewogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOgpAQCAtNzYwLDYgKzc5Niw4IEBAIEpTQXJy
YXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGUKIAogYm9vbCBKU0FycmF5OjpzaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZShWTSYgdm0sIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9HSVQoKTsKKyAgICAK
ICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICBSRUxFQVNF
X0FTU0VSVChjb3VudCA8PSBvbGRMZW5ndGgpOwogICAgIApAQCAtODY1LDYgKzkwMyw4IEBAIGJv
b2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKIAogYm9vbCBKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkJiBz
dGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBMT0dJVCgpOworICAgIAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgPiAwKTsKIApAQCAt
OTYzLDYgKzEwMDMsOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdU
CiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRv
IGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFn
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CisgICAgTE9HSVQoKTsKKyAgICAKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0
SW5kZXggPD0gbGVuZ3RoKTsKQEAgLTExMDAsNiArMTE0Miw4IEBAIGJvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50V2l0aEFueUluZGV4aW4KIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVj
U3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogeworICAgIExPR0lUKCk7
CisgICAgCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwogICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOwpAQCAtMTE2Niw2ICsxMjEwLDggQEAgdm9p
ZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogCiB2b2lkIEpTQXJyYXk6OmNv
cHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1l
bnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBMT0dJVCgp
OworICAgIAogICAgIHVuc2lnbmVkIGkgPSBvZmZzZXQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3I7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTc3LDcgKzE3Nyw4IEBA
IHByaXZhdGU6CiBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJm
bHkoVk0mIHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQmIHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7Ci0gICAgdmVj
dG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHZlY3Rv
ckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoCisgICAg
ICAgIGludGVuZGVkT3duZXIgPyBpbnRlbmRlZE93bmVyLT5zdHJ1Y3R1cmUodm0pIDogMCwgbGVu
Z3RoKTsKICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgaGVh
ZGVyLnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gQnV0
dGVyZmx5OjpjcmVhdGUoCkBAIC0xODgsMTEgKzE4OSwxMSBAQCBpbmxpbmUgQnV0dGVyZmx5KiBj
cmVhdGVDb250aWd1b3VzQXJyYXlCCiBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRl
cmZseShWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCkKIHsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAotICAg
ICAgICB2bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9y
QXJyYXkoaW5pdGlhbExlbmd0aCksCi0gICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNF
X1ZFQ1RPUl9MRU4pKTsKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIDAsIDAsIHRydWUsIGJh
c2VJbmRleGluZ0hlYWRlckZvckFycmF5U3RvcmFnZShpbml0aWFsTGVuZ3RoKSwKKyAgICAgICAg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOKSk7CiAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAg
ICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xl
YXIoKTsKKyAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KQEAgLTIxNSwxMiAr
MjE2LDE3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCAKICAgICAg
ICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5n
dGg7ICsraSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVh
cigpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKAogICAgICAgICAg
ICAgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlCiAgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0
aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5
KHZtLCAwLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEJBU0VfQVJSQVlfU1RPUkFHRV9WRUNUT1JfTEVOOyArK2kpCisgICAgICAgICAgICBidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAogICAgIHJl
dHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CkBAIC0y
MjgsNDAgKzIzNCw0NyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwg
CiAKIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7Ci0gICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFs
TGVuZ3RoKTsKLSAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkKKyAgICBpZiAoaW5pdGlhbExlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU3RvcmFnZSA9IHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5Owot
ICAgIGlmIChMSUtFTFkoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkpIHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKTsKKyAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdU
eXBlKSkpIHsKICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpKTsKLQotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZtLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGlu
ZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAm
dGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGhhc1VuZGVjaWRlZChp
bmRleGluZ1R5cGUpCisgICAgICAgICAgICB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUpCisgICAg
ICAgICAgICB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKQorICAgICAgICAgICAgfHwgaGFzQ29u
dGlndW91cyhpbmRleGluZ1R5cGUpKTsKKworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgaW5p
dGlhbExlbmd0aCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4
aWxpYXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2Us
IHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAg
aWYgKCF0ZW1wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CiAgICAg
ICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJ1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOwotICAgICAgICBpZiAoaGFz
RG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIGlmIChoYXNEb3Vi
bGUoaW5kZXhpbmdUeXBlKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlh
bExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgIGJ1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7
ICsraSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAg
aWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgw
LCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVu
Z3RoKSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoMCwgc3RydWN0
dXJlLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxs
b2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5l
U3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAg
ICAgICAgaWYgKCF0ZW1wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7
Ci0gICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZv
ckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgICpidXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5U3RvcmFnZShpbml0aWFs
TGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9
IDA7CiAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpbml0aWFsTGVuZ3RoOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVybiBj
cmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZpc2lvbiAyMDQwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJl
dmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTMgKzI3LDkgQEAKICNpbmNsdWRlICJKU0NhbGxlZS5o
IgogCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5j
bHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MTAsMjUgKzUxMCwxNSBAQCBBcnJheUJ1ZmZlciogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhCiAgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0
byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKICAgICAvLyB0aGF0
IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJp
YXRlbHkuCiAgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAgVk0m
IHZtID0gKmhlYXAtPnZtKCk7CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsK
ICAgICAKICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOwogCi0g
ICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwotICAgIAotICAgIGlmICh0
aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKLSAgICAgICAgJiYgIXRoaXNPYmpl
Y3QtPmJ1dHRlcmZseSgpICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgewotICAg
ICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwotICAgICAgICAvLyBSZXVzZSBhbHJl
YWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgotICAgICAgICB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcigKLSAgICAgICAgICAgIGJpdHdpc2Vf
Y2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPnZlY3RvcigpKS0+YnV0dGVyZmx5KCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJ
bmRleGluZ0hlYWRlcigpKTsKLSAgICAgICAgVk0mIHZtID0gKmhlYXAtPnZtKCk7Ci0gICAgICAg
IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwgdGhpc09iamVjdCwgQnV0dGVyZmx5Ojpj
cmVhdGVPckdyb3dBcnJheVJpZ2h0KAotICAgICAgICAgICAgdGhpc09iamVjdC0+YnV0dGVyZmx5
KCksIHZtLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAg
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwg
MCkpOwotICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdI
ZWFkZXIoKSk7CisgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzT2JqZWN0
LCBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgIHRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpLCB2bSwgdGhpc09iamVjdCwgdGhpc09iamVjdC0+c3RydWN0dXJlKCksCisg
ICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxz
ZSwgMCwgMCkpOwogCiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJ
dGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTIgKzI2LDkgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5o
IgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlu
bGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJl
dmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxNCArMjcsMTAgQEAKICNpbmNs
dWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgogCiAjaW5jbHVkZSAiRXJyb3IuaCIKLSNp
bmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVSZWNv
cmQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDE0ICsy
OCwxMCBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCi0j
aW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAj
aW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRv
cklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEyIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCisjaWYgMAorI2RlZmluZSBMT0dJVCgpIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwg
IjogIiwgV1RGX1BSRVRUWV9GVU5DVElPTiwgIlxuIik7CisjZWxzZQorI2RlZmluZSBMT0dJVCgp
IGRvIHsgfSB3aGlsZShmYWxzZSkKKyNlbmRpZgorCiAvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBz
aXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gV2UgdXNlIHRoaXMKIC8v
IGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQg
YXJyYXkgZnJvbSBzaXplIDAuCiAvLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3Rh
bnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBpbgpAQCAtODgsNzcgKzk0LDYgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQotewotICAgIEFTU0VSVChi
dXR0ZXJmbHkpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0
dXJlKCk7Ci0gICAgCi0gICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0g
dGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdI
ZWFkZXIpKSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMoc3RydWN0dXJlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0eSA9
IDA7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0gICAg
c2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZseS0+
YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSkpKSB7Ci0gICAgICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29s
bGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLQotICAgICAgICAvLyBDb3B5
IHRoZSBwcm9wZXJ0aWVzLgotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9
IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFn
ZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspCi0gICAgICAgICAgICAo
LS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoLS1jdXJyZW50U291cmNl
KS0+Z2V0KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVh
ZGVyKSkgewotICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IENvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7Ci0gICAgICAgICAgICBzaXplX3QgY291
bnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBl
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAg
ICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX0RP
VUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBu
ZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
KTsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGNvdW50ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwotICAgICAgICAg
ICAgICAgIGN1cnJlbnRTb3VyY2UgPSAwOwotICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5
KGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhv
dXRCYXJyaWVyKG5ld0J1dHRlcmZseSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0ZXJm
bHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMp
OwotICAgIH0gCi19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJm
bHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKQEAgLTE3NSwxMyArMTEwLDE2
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJl
Q2FwYWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAg
ICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBIZWFwQ2VsbCogYmFzZSA9IGJpdHdpc2Vf
Y2FzdDxIZWFwQ2VsbCo+KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSkpOworICAgIAorICAgIEFTU0VSVChIZWFwOjpoZWFwKGJhc2UpID09IHZpc2l0b3IuaGVh
cCgpKTsKIAorICAgIC8vIEtlZXAgdGhlIGJ1dHRlcmZseSBhbGl2ZS4KKyAgICB2aXNpdG9yLm1h
cmtBdXhpbGlhcnkoYmFzZSk7CisgICAgCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgp
IC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICB2aXNpdG9yLmNvcHlMYXRlcigKLSAg
ICAgICAgdGhpcywgQnV0dGVyZmx5Q29weVRva2VuLAotICAgICAgICBidXR0ZXJmbHktPmJhc2Uo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwogICAgIAog
ICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgIHN3aXRjaCAodGhpcy0+
aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTIyNSwxOSArMTYzLDYgQEAgdm9pZCBKU09iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbAogI2VuZGlmCiB9CiAKLXZvaWQgSlNPYmplY3Q6OmNvcHlC
YWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2Vu
IHRva2VuKQotewotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
Y2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwotCi0gICAgaWYgKHRva2VuICE9IEJ1dHRlcmZseUNvcHlUb2tlbikKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJm
bHkuZ2V0KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+Y29weUJ1
dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVTaXplKCkpOwotfQotCiB2b2lkIEpTT2JqZWN0OjpoZWFwU25hcHNob3QoSlNDZWxsKiBj
ZWxsLCBIZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVyKQogewogICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC03NzgsMTcgKzcwMywyMCBAQCB2
b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjCiAgICAgZ2xvYmFsT2JqZWN0
KCktPmhhdmVBQmFkVGltZSh2bSk7CiB9CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxJbmRleGVkU3RvcmFnZShWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVsZW1l
bnRTaXplKQorQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdl
KFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIExPR0lUKCk7CiAgICAgQVNTRVJUKGxl
bmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRl
eGluZ1R5cGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVy
dGllcyhvbGRUeXBlKSk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5k
ZXhpbmcoKSk7CiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOwotICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgdW5z
aWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsK
KyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3Vz
VmVjdG9yTGVuZ3RoKHByb3BlcnR5Q2FwYWNpdHksIGxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAg
IG1fYnV0dGVyZmx5LmdldCgpLCB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKLSAgICAgICAgZWxlbWVudFNpemUgKiB2ZWN0
b3JMZW5ndGgpOworICAgICAgICBtX2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVy
ZSwgcHJvcGVydHlDYXBhY2l0eSwgZmFsc2UsIDAsCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3Ro
KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5OwpAQCAtNzk3LDcgKzcyNSw3IEBAIEJ1dHRlcmZs
eSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGUKIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxVbmRlY2lkZWQoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3Jl
YXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRT
dG9yYWdlKHZtLCBsZW5ndGgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5
VHJhbnNpdGlvbjo6QWxsb2NhdGVVbmRlY2lkZWQpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiBuZXdCdXR0
ZXJmbHk7CkBAIC04MDYsNyArNzM0LDkgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbFVuZGVjaQogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50
MzIoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRT
dG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGkt
LTspCisgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91
dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblBy
b3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIG5ld0J1
dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CkBAIC04MTUsNyArNzQ1LDcgQEAgQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogQ29udGlndW91c0RvdWJsZXMgSlNPYmpl
Y3Q6OmNyZWF0ZUluaXRpYWxEb3VibGUoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihkb3VibGUpKTsK
KyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFn
ZSh2bSwgbGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KVtpXSA9IFBOYU47CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0
aW9uOjpBbGxvY2F0ZURvdWJsZSk7CkBAIC04MjYsNyArNzU2LDkgQEAgQ29udGlndW91c0RvdWJs
ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpj
cmVhdGVJbml0aWFsQ29udGlndW91cyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBj
cmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhl
ZFN0b3JhZ2Uodm0sIGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKICAg
ICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5
KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CkBAIC04MzQsNiArNzY2
LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogCiBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoVk0mIHZtLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKKyAgICBMT0dJVCgpOwogICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVj
dHVyZSh2bSk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGluZ1R5cGUoKTsKQEAg
LTg0OSw2ICs3ODIsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3Jh
CiAgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisgICAgZm9yIChz
aXplX3QgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
LCBzdHJ1Y3R1cmUtPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0
U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg1NiwxMiArNzkxLDE4IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKIAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
SW5pdGlhbEFycmF5U3RvcmFnZShWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUFycmF5U3Rv
cmFnZSh2bSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9y
YWdlKAorICAgICAgICB2bSwgMCwgQXJyYXlTdG9yYWdlOjpvcHRpbWFsVmVjdG9yTGVuZ3RoKDAs
IHN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCksIDApKTsKIH0KIAogQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAg
ICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRp
Z3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKwogICAg
IHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwogICAg
IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiB9CkBAIC04ODEs
NiArODIyLDExIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWMKIENv
bnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhW
TSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOworCisg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7
CisKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGln
dW91cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOwogfQpA
QCAtOTE3LDcgKzg2Myw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lk
ZWQKIAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0
b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0
ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwot
ICAgIC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50cy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCB0cmFuc2l0aW9uKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5l
d1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOwpAQCAtOTM4LDExICs4ODYsMTIgQEAg
Q29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtp
XTsKICAgICAgICAgZG91YmxlKiBjdXJyZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91Ymxl
Kj4oY3VycmVudCk7CiAgICAgICAgIEpTVmFsdWUgdiA9IGN1cnJlbnQtPmdldCgpOwotICAgICAg
ICBpZiAoIXYpIHsKKyAgICAgICAgLy8gTk9URTogU2luY2UgdGhpcyBtYXkgYmUgdXNlZCBkdXJp
bmcgaW5pdGlhbGl6YXRpb24sIHYgY291bGQgYmUgZ2FyYmFnZS4gSWYgaXQncyBnYXJiYWdlLAor
ICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAg
ICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICpjdXJyZW50QXNEb3VibGUgPSBQ
TmFOOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHYu
aXNJbnQzMigpKTsKICAgICAgICAgKmN1cnJlbnRBc0RvdWJsZSA9IHYuYXNJbnQzMigpOwogICAg
IH0KICAgICAKQEAgLTk2NiwxMyArOTE1LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnZlcnRJbnQzMlRvQXIKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5n
ZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29u
c3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVj
dG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKysp
IHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBpZiAodikKICAgICAgICAgICAg
IG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBBU1NFUlQobmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkuaXNFbXB0eSgpKTsK
ICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7CkBAIC0x
MDE0LDEzICs5NjEsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRv
QQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JM
ZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0
ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwog
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBk
b3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAg
aWYgKHZhbHVlID09IHZhbHVlKSB7Ci0gICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHZhbHVlKSk7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAg
ICAgaWYgKHZhbHVlID09IHZhbHVlKQogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcisrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKS5pc0VtcHR5KCkpOwogICAgIH0KICAgICAKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKQEAgLTEwNDEsMTMgKzk4NiwxMSBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3Rv
cmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRD
b3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbmV3
U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAg
bmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAg
ICAgaWYgKHYpCiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKG5ld1N0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpLmlzRW1wdHkoKSk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2
bSksIHRyYW5zaXRpb24pOwpAQCAtMjM4MSw3ICsyMzI0LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0
QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUo
dm0pLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CiAgICAgICAgICAgICAvLyBDb252ZXJ0IHRo
ZSBpbmRleGluZyB0eXBlIHRvIHRoZSBTbG93UHV0QXJyYXlTdG9yYWdlIGFuZCByZXRyeS4KLSAg
ICAgICAgICAgIGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0
aCgwLCAwLCBpICsgMSkpOworICAgICAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBpICsg
MSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIDAsIGkgKyAxKSk7CiAgICAgICAgICAgICByZXR1
cm4gcHV0QnlJbmRleCh0aGlzLCBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtMjUyMiw3ICsyNDY1LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRy
aWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIDAsIDApKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoc3RydWN0dXJlKHZtKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgewotICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBp
ICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIGkgKyAxLCBnZXROZXdW
ZWN0b3JMZW5ndGgoMCwgMCwgMCwgaSArIDEpKTsKICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcisrOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjQxLDcgKzI1
ODQsOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpCiAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgZnVuY3Rpb24sIGF0dHJp
YnV0ZXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0
b3JMZW5ndGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExl
bmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCkKKy8vIE5PVEU6IFRoaXMgbWV0aG9kIGlzIGZv
ciBBcnJheVN0b3JhZ2UgdmVjdG9ycy4KK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6
OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBpbmRleEJpYXMsIHVuc2lnbmVkIGN1cnJlbnRW
ZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpCiB7CiAgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCk7CiAKQEAgLTI2NTgsMjUgKzI2MDIsMjcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBK
U09iamVjdDo6Z2V0TmV3VgogCiAgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVk
TGVuZ3RoKTsKIAotICAgIGxhc3RBcnJheVNpemUgPSBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgs
IEZJUlNUX1ZFQ1RPUl9HUk9XKTsKKyAgICBsYXN0QXJyYXlTaXplID0gc3RkOjptaW4oaW5jcmVh
c2VkTGVuZ3RoLCBGSVJTVF9BUlJBWV9TVE9SQUdFX1ZFQ1RPUl9HUk9XKTsKIAotICAgIHJldHVy
biBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwor
ICAgIHJldHVybiBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoCisgICAgICAgIGlu
ZGV4Qmlhcywgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIHN0ZDo6
bWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkpOwogfQogCiBB
TFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWdu
ZWQgZGVzaXJlZExlbmd0aCkKIHsKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoOworICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CisgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIAogICAgIGlm
IChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgaWYgKEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yTnVsbCgpKQorICAgICAgICAgICAg
aW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7CiAgICAgICAgIHZlY3Rvckxlbmd0aCA9
IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgbGVuZ3RoID0gbV9i
dXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZl
Y3Rvckxlbmd0aCA9IDA7Ci0gICAgICAgIGxlbmd0aCA9IDA7CiAgICAgfQogCi0gICAgcmV0dXJu
IGdldE5ld1ZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7
CisgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChpbmRleEJpYXMsIHZlY3Rvckxlbmd0aCwg
bGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKIH0KIAogdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4
aW5nU2hhcGU+CkBAIC0yNzI5LDE5ICsyNjc1LDI5IEBAIHVuc2lnbmVkIEpTT2JqZWN0Ojpjb3Vu
dEVsZW1lbnRzKCkKIAogYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIHZt
LCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CisgICAgTE9HSVQoKTsKKyAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBhdmFpbGFibGVWZWN0
b3JMZW5ndGggPSBzdG9yYWdlLT5hdmFpbGFibGVWZWN0b3JMZW5ndGgoc3RydWN0dXJlKHZtKSwg
dmVjdG9yTGVuZ3RoKTsgCisgICAgaWYgKGF2YWlsYWJsZVZlY3Rvckxlbmd0aCA+PSBuZXdMZW5n
dGgpIHsKKyAgICAgICAgLy8gVGhlIGNlbGwgd2FzIGFscmVhZHkgYmlnIGVub3VnaCBmb3IgdGhl
IGRlc2lyZWQgbGVuZ3RoIQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7
IGkgPCBhdmFpbGFibGVWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmNsZWFyKCk7CisgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChhdmFp
bGFibGVWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5j
b25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9t
IHNwYXJzZSB2YWx1ZSBtYXAKICAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8g
YWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5
LgogICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2UoKTsKLSAgICAKICAgICBpZiAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgK
ICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobmV3TGVuZ3RoLCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWdu
ZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7Ci0gICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQVNTRVJUKG5ld0xlbmd0aCA+
IHZlY3Rvckxlbmd0aCk7CiAgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVj
dG9yTGVuZ3RoKG5ld0xlbmd0aCk7CiAKQEAgLTI3NTQsNiArMjcxMCw4IEBAIGJvb2wgSlNPYmpl
Y3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVu
Z3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0
b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgICAgICBzZXRCdXR0ZXJm
bHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMjc2OCw2ICsyNzI2LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsg
aSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIHNldEJ1
dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKQEAgLTI3
NzYsMzEgKzI3MzYsNDkgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0m
IAogCiBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgdW5zaWduZWQgbGVu
Z3RoKQogeworICAgIExPR0lUKCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQoKTsKICAgICAKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsK
ICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkgfHwgaGFzSW50MzIoaW5k
ZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVk
KGluZGV4aW5nVHlwZSgpKSk7CiAgICAgQVNTRVJUKGxlbmd0aCA+IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOwogICAgIAotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHN0ZDo6bWlu
KAotICAgICAgICBsZW5ndGggPDwgMSwKLSAgICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7CiAgICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKTsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgYnV0dGVyZmx5ID0gYnV0
dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKLSAgICAgICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKLSAgICAgICAgb2xkVmVjdG9y
TGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKLSAgICAgICAgbmV3VmVjdG9yTGVuZ3Ro
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgaWYgKCFidXR0ZXJmbHkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7
CisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoOworICAgIAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFj
aXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIAorICAgIHVuc2lnbmVk
IGF2YWlsYWJsZU9sZExlbmd0aCA9CisgICAgICAgIEJ1dHRlcmZseTo6YXZhaWxhYmxlQ29udGln
dW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBvbGRWZWN0b3JMZW5ndGgpOworICAg
IGlmIChhdmFpbGFibGVPbGRMZW5ndGggPj0gbGVuZ3RoKSB7CisgICAgICAgIC8vIFRoaXMgaXMg
dGhlIGNhc2Ugd2hlcmUgc29tZW9uZSBlbHNlIHNlbGVjdGVkIGEgdmVjdG9yIGxlbmd0aCB0aGF0
IGNhdXNlZCBpbnRlcm5hbAorICAgICAgICAvLyBmcmFnbWVudGF0aW9uLiBJZiB3ZSBkaWQgb3Vy
IGpvYnMgcmlnaHQsIHRoaXMgd291bGQgbmV2ZXIgaGFwcGVuLiBCdXQgSSBiZXQgd2Ugd2lsbCBt
ZXNzCisgICAgICAgIC8vIHRoaXMgdXAsIHNvIHRoaXMgZGVmZW5zZSBzaG91bGQgc3RheS4KKyAg
ICAgICAgbmV3VmVjdG9yTGVuZ3RoID0gYXZhaWxhYmxlT2xkTGVuZ3RoOworICAgIH0gZWxzZSB7
CisgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNW
ZWN0b3JMZW5ndGgoCisgICAgICAgICAgICBwcm9wZXJ0eUNhcGFjaXR5LCBzdGQ6Om1pbihsZW5n
dGggPDwgMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkpOworICAgICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CisgICAgICAgIGJ1dHRlcmZseSA9IGJ1dHRlcmZseS0+Z3Jvd0FycmF5
UmlnaHQoCisgICAgICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5
LCB0cnVlLAorICAgICAgICAgICAgb2xkVmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSwKKyAgICAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpOworICAgICAgICBpZiAoIWJ1dHRlcmZseSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOworICAgIH0KIAog
ICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAKICAgICBp
ZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47CisgICAgICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVj
dG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5j
bGVhcigpOwogICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yODIxLDYgKzI3OTks
NyBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAKIEJ1dHRlcmZs
eSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKQogeworICAgIExPR0lUKCk7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBv
bGRTaXplKTsKIAogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3Qg
cmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MSArMjYsMTEgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQXJyYXlDb252ZW50
aW9ucy5oIgogI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJh
cnJpZXIuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
ICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgot
I2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgi
CiAjaW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTEwMyw3ICsxMDMs
NiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGlt
YXRlZFNpemUoSlNDZWxsKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5
VG9rZW4pOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGhlYXBTbmFwc2hvdChK
U0NlbGwqLCBIZWFwU25hcHNob3RCdWlsZGVyJik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtNDE0LDYgKzQxMyw4
IEBAIHB1YmxpYzoKICAgICAgICAgaW5pdGlhbGl6ZUluZGV4KHZtLCBpLCB2LCBpbmRleGluZ1R5
cGUoKSk7CiAgICAgfQogCisgICAgLy8gTk9URTogQ2xpZW50cyBvZiB0aGlzIG1ldGhvZCBtYXkg
Y2FsbCBpdCBtb3JlIHRoYW4gb25jZSBmb3IgYW55IGluZGV4LCBhbmQgdGhpcyBpcyBzdXBwb3Nl
ZAorICAgIC8vIHRvIHdvcmsuCiAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0mIHZtLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwpAQCAtNjg2LDgg
KzY4Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYsIFN0cnVj
dHVyZSosIEJ1dHRlcmZseSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0
b3JhZ2VJZk5lY2Vzc2FyeShWTSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsK
LSAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0m
LCBTdHJ1Y3R1cmUqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydFRvRGlj
dGlvbmFyeShWTSYpOwogCkBAIC03OTcsNyArNzk2LDYgQEAgcHJvdGVjdGVkOgogICAgIEpTT2Jq
ZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICB2b2lk
IHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7Ci0g
ICAgdm9pZCBjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0
b3JhZ2VTaXplKTsKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmpl
Y3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgIC8vIHN0b3JhZ2UuIFRoaXMg
d2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtOTA4LDcgKzkwNiw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBpc09iamVjdCgpOwogICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAgCi0gICAgQnV0
dGVyZmx5KiBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoVk0mLCB1bnNpZ25lZCBsZW5ndGgs
IHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgQnV0dGVyZmx5KiBjcmVhdGVJbml0aWFsSW5kZXhl
ZFN0b3JhZ2UoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICAKICAgICBBcnJheVN0b3Jh
Z2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhp
c3RzKFZNJiwgQXJyYXlTdG9yYWdlKik7CiAgICAgICAgIApAQCAtOTMyLDcgKzkzMCw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUsIEFycmF5U3RvcmFnZSopOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUpOwogICAgICAgICAKLSAgICB1bnNpZ25lZCBnZXRO
ZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3Vy
cmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgdW5zaWduZWQgZ2V0TmV3
VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGluZGV4QmlhcywgdW5zaWduZWQgY3VycmVudFZlY3Rvckxl
bmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAg
ICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwog
CiAgICAgQXJyYXlTdG9yYWdlKiBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0
Q29weWluZ0VsZW1lbnRzKFZNJiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKQEAgLTk0OSw3ICs5
NDcsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5z
dXJlQXJyYXlTdG9yYWdlU2xvdyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29weUJhcnJpZXI8
QnV0dGVyZmx5PiBtX2J1dHRlcmZseTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPEJ1dHRlcmZseSo+
IG1fYnV0dGVyZmx5OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQz
Ml90IG1fcGFkZGluZzsKQEAgLTE0ODcsOCArMTQ4NSwxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsK
ICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIHNl
dFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIG5ld1N0cnVjdHVy
ZSk7Ci0KKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgc2l6ZV90IG9sZENhcGFj
aXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBuZXdDYXBh
Y2l0eSA9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBBU1NFUlQob2xk
Q2FwYWNpdHkgPD0gbmV3Q2FwYWNpdHkpOworICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdDYXBh
Y2l0eSkKKyAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOworICAgIGVsc2Ug
eworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KHZtLCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkpOworICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICB9CiAgICAgcHV0
RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMs
IG9mZnNldCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKQEAgLTE0OTYsMjcgKzE1
MDIsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFs
bG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlKQotewotICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIAotICAgIGlmIChvbGRDYXBhY2l0
eSA9PSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgc2V0U3Ry
dWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOyAKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAotICAgICAgICB2bSwgb2xkQ2FwYWNpdHksIG5ld1N0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci19Ci0KLWlubGluZSB2b2lkIEpTT2Jq
ZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCi17Ci0gICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0
ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgKLSAgICAgICAgdm0sIHN0cnVjdHVyZSh2bSktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIG5ld1N0cnVjdHVyZSk7Ci19Ci0KIGlubGluZSBib29sIEpTT2JqZWN0Ojpw
dXRPd25EYXRhUHJvcGVydHkoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5l
cy5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOCwgMjAwOSwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOCwgMjAw
OSwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmln
aHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpA
QCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBKU09iamVjdElubGluZXNfaAogI2RlZmluZSBKU09i
amVjdElubGluZXNfaAogCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKICNp
bmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiTG9va3Vw
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAJ
KHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCw5IEBACiAKICNpbmNsdWRlICJC
dWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk1pY3Jv
dGFzay5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDExIEBACiAjaW5jbHVkZSAi
QnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU0NCdWlsdGlu
cy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNp
bmNsdWRlICJNaWNyb3Rhc2suaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA0MDU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiwxMyArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIklkZW50aWZp
ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgot
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiwxMiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU2V0
SXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Nl
dC5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsy
OCw3IEBACiAjaW5jbHVkZSAiSlNTdHJpbmdJdGVyYXRvci5oIgogCiAjaW5jbHVkZSAiQnVpbHRp
bk5hbWVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0Nl
bGxJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAkocmV2
aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0
ZVJlZ2lzdHJ5S2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4K
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI3LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKIAotI2luY2x1
ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlR5
cGVkQXJyYXlBZGFwdG9ycy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMiArMjksMTAgQEAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkdldHRlclNl
dHRlci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTWFw
LmgiCiAjaW5jbHVkZSAiTWFwUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5l
cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxMyArMzEsMTEgQEAKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCi0jaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUg
IkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJNYXBEYXRh
SW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogI2luY2x1ZGUgIk1h
cFByb3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDcgQEAgdHlwZWRlZiBj
b25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB0ZXN0VGhlRlRMLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRy
dWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgcmVzZXRGcmVlQ2VsbHNCYWRseSwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZWFnZXJseVVwZGF0ZVRvcENh
bGxGcmFtZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVz
ZU9TUkVudHJ5VG9ERkcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNsdWRlICJF
cnJvci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiUHJveHlPYmplY3QuaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDIwNDA1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAy
MDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTcgKzM0LDIwIEBAIHN0YXRpYyBjb25zdCBQcm9w
ZXJ0eU9mZnNldCBSZWdFeHBNYXRjaGUKIAogQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVh
dGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7Ci0gICAgdW5zaWduZWQgdmVjdG9yTGVu
Z3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogICAgIGlmICh2ZWN0b3JMZW5ndGgg
PiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZv
aWQqIHRlbXA7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCi0gICAgICAgIHJl
dHVybiAwOworICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51
bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
IGlmICghdGVtcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7CiAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3Ro
KTsKICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKLQorICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7
ICsraSkKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAK
ICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBi
dXR0ZXJmbHkpOwogfQogCkBAIC02Nyw0MCArNzAsNTQgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5
KiBjcmVhdGVSZWdFeHBNYXRjaAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYW5kbGUgYXJy
YXkgYWxsb2NhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ0CiAgICAgCisgICAgYXV0byBzZXRQcm9wZXJ0
aWVzID0gWyZdICgpIHsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hl
c0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1iZXIocmVzdWx0LnN0YXJ0KSk7CisgICAg
ICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlP
ZmZzZXQsIGlucHV0KTsKKyAgICB9OworICAgIAorICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5z
ID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpOworICAgIAogICAgIGlmIChVTkxJS0VMWShnbG9i
YWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSkpIHsKLSAgICAgICAgYXJyYXkgPSBKU0FycmF5
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNB
cnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICAgICAg
YXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3Qt
PnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyArIDEpOworICAg
ICAgICAKKyAgICAgICAgc2V0UHJvcGVydGllcygpOworICAgICAgICAKKyAgICAgICAgYXJyYXkt
PmluaXRpYWxpemVJbmRleCh2bSwgMCwganNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpCisgICAgICAg
ICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBieSBHQy4KICAg
ICAgICAgCiAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzU3Vic3RyaW5n
T2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5z
dGFydCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0g
cmVnRXhwLT5udW1TdWJwYXR0ZXJucygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgc3Rh
cnQgPSBzdWJwYXR0ZXJuUmVzdWx0c1syICogaV07Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0
ID49IDApCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGks
IEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0
LCBzdWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGks
IGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKKyAgICAgICAgICAgIGludCBzdGFydCA9
IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKQor
ICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0cmlu
Zzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJu
UmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSh2
bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5u
dW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFs
aXplZFJlZ0V4cE1hdGNoZXNBcnJheSh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJy
YXlTdHJ1Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMgKyAxKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoYXJyYXkpOwogICAgICAgICAKKyAgICAgICAgc2V0UHJvcGVydGllcygpOworICAgICAgICAK
KyAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNVbmRlZmluZWQoKSwgQXJy
YXlXaXRoQ29udGlndW91cyk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpCisgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6
ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBieSBHQy4KKwog
ICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1N1YnN0cmluZ09mUmVzb2x2
ZWQodm0sIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpLCBB
cnJheVdpdGhDb250aWd1b3VzKTsKICAgICAgICAgCi0gICAgICAgIGlmICh1bnNpZ25lZCBudW1T
dWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOwotICAgICAgICAgICAg
ICAgIGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6
ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0s
IGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSwgQXJy
YXlXaXRoQ29udGlndW91cyk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdp
dGhDb250aWd1b3VzKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7CisgICAgICAgICAgICBpbnQgc3RhcnQgPSBz
dWJwYXR0ZXJuUmVzdWx0c1syICogaV07CisgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkKKyAg
ICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6
OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJl
c3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJ
bmRleFByb3BlcnR5T2Zmc2V0LCBqc051bWJlcihyZXN1bHQuc3RhcnQpKTsKLSAgICBhcnJheS0+
cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5T2Zmc2V0LCBpbnB1
dCk7Ci0KICAgICByZXR1cm4gYXJyYXk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyMDQwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIK
ICNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5o
IgorI2luY2x1ZGUgIkhlYXBVdGlsLmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpA
QCAtMzkyLDcgKzM5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZp
ZWQKICAgICAgICAgICAgIEpTVmFsdWUgY2FsbGVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRD
YWxsZWUpOwogICAgICAgICAgICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2Uu
ZnJhbWVzLmxhc3QoKTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUhhc0V4ZWN1dGFibGUgPSAh
IXN0YWNrRnJhbWUuZXhlY3V0YWJsZTsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNWYWx1ZUdD
T2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGNhbGxlZSkpIHsKKyAgICAgICAgICAgIGlm
ICghSGVhcFV0aWw6OmlzVmFsdWVHQ09iamVjdChmaWx0ZXIsIG1hcmtlZEJsb2NrU2V0LCBjYWxs
ZWUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5SGFzRXhlY3V0YWJsZSkKICAgICAg
ICAgICAgICAgICAgICAgc3RhY2tGcmFtZS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6OlVua25vd247
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDM3LDcgKzQzOCw3IEBAIHZvaWQgU2FtcGxp
bmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEhlYXA6OmlzUG9pbnRl
ckdDT2JqZWN0KGZpbHRlciwgbWFya2VkQmxvY2tTZXQsIGV4ZWN1dGFibGUpKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKEhlYXBVdGlsOjppc1BvaW50ZXJHQ09iamVjdEpTQ2VsbChmaWx0
ZXIsIG1hcmtlZEJsb2NrU2V0LCBleGVjdXRhYmxlKSk7CiAgICAgICAgICAgICBzdGFja0ZyYW1l
LmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6RXhlY3V0YWJsZTsKICAgICAgICAgICAgIHN0YWNrRnJh
bWUuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBtX2xpdmVDZWxsUG9pbnRl
cnMuYWRkKGV4ZWN1dGFibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMyArMjksMTEgQEAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkdldHRlclNl
dHRlci5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTU2V0
LmgiCiAjaW5jbHVkZSAiTWFwRGF0YS5oIgogI2luY2x1ZGUgIlNldFByb3RvdHlwZS5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjA0MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDExIEBACiAjaW5jbHVkZSAiRXhjZXB0
aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkl0ZXJh
dG9yT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiSlNGdW5jdGlvbklubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTG9va3Vw
LmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxp
bmVzLmgiCiAKICNpbmNsdWRlICJTZXRQcm90b3R5cGUubHV0LmgiCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwCShyZXZp
c2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJl
Z2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDkgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5LmgiCiAKLSNpbmNsdWRlICJKU0NK
U1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFw
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjgsMTEgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSXRl
cmF0b3JPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNs
dWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBQcm90b3R5cGUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCwxMSArMjgsOSBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJdGVyYXRv
ck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldFByb3RvdHlwZS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE2LTA3LTI5ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQnV0dGVyZmxpZXMgc2hvdWxkIGJlIGFsbG9j
YXRlZCBpbiBBdXhpbGlhcnkgTWFya2VkU3BhY2UgaW5zdGVhZCBvZiBDb3BpZWRTcGFjZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUg
SlNDIEdDIG5lZWRzIGEgdHJ5RmFzdEFsaWduZWRNYWxsb2MoKSwgYW5kIHRoaXMgZXhwb3NlcyBz
dWNoIGEgZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAgICAg
IChXVEY6OmZhc3RBbGlnbmVkTWFsbG9jKToKKyAgICAgICAgKFdURjo6dHJ5RmFzdEFsaWduZWRN
YWxsb2MpOgorICAgICAgICAoV1RGOjpmYXN0QWxpZ25lZEZyZWUpOgorICAgICAgICAqIHd0Zi9G
YXN0TWFsbG9jLmg6CisKIDIwMTYtMDgtMDEgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0pTQ11bQVJNNjRdIEZpeCBicmFuY2hUZXN0MzIvNjQgdGFr
aW5nIGFuIGltbWVkaWF0ZSBhcyBtYXNrCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9j
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkocmV2aXNp
b24gMjA0MDU1KQorKysgU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw2IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAw
OSwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpA
QCAtOTcsNiArOTYsMTEgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVu
dAogICAgIHJldHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKIH0KIAordm9p
ZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAor
eworICAgIHJldHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKK30KKwogdm9p
ZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgX2FsaWduZWRfZnJlZShwKTsKQEAg
LTExMSw2ICsxMTUsMTMgQEAgdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVu
dAogICAgIHJldHVybiBwOwogfQogCit2b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgCit7CisgICAgdm9pZCogcCA9IG51bGxwdHI7CisgICAg
cG9zaXhfbWVtYWxpZ24oJnAsIGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7Cit9CisK
IHZvaWQgZmFzdEFsaWduZWRGcmVlKHZvaWQqIHApIAogewogICAgIGZyZWUocCk7CkBAIC0yMzEs
NiArMjQyLDExIEBAIHZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQKICAg
ICByZXR1cm4gYm1hbGxvYzo6YXBpOjptZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOwogfQogCit2
b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkg
Cit7CisgICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXpl
KTsKK30KKwogdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCiB7CiAgICAgYm1hbGxvYzo6
YXBpOjpmcmVlKHApOwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjA0MDU1KQorKysg
U291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NTMsNiArNTMsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmYXN0RnJlZSh2b2lkKik7CiAK
IC8vIEFsbG9jYXRpb25zIGZyb20gZmFzdEFsaWduZWRNYWxsb2MoKSBtdXN0IGJlIGZyZWVkIHVz
aW5nIGZhc3RBbGlnbmVkRnJlZSgpLgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIGZhc3RBbGln
bmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RBbGlnbmVkRnJlZSh2b2lkKik7CiAKIFdURl9FWFBP
UlRfUFJJVkFURSBzaXplX3QgZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCopOwpAQCAtMTA3LDYg
KzEwOCw3IEBAIHVzaW5nIFdURjo6ZmFzdE1hbGxvY1NpemU7CiB1c2luZyBXVEY6OmZhc3RSZWFs
bG9jOwogdXNpbmcgV1RGOjpmYXN0U3RyRHVwOwogdXNpbmcgV1RGOjpmYXN0WmVyb2VkTWFsbG9j
OwordXNpbmcgV1RGOjp0cnlGYXN0QWxpZ25lZE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdENh
bGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdE1hbGxvYzsKIHVzaW5nIFdURjo6dHJ5RmFzdFplcm9l
ZE1hbGxvYzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUv
QXV4aWxpYXJ5QmFycmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9BdXhp
bGlhcnlCYXJyaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3By
YWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXV4aWxpYXJ5QmFycmllcklubGlu
ZXMuaD4KKwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcHBsZVBheVNoaXBw
aW5nTWV0aG9kU2VsZWN0ZWRFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNBcHBsZVBheVNoaXBwaW5nTWV0aG9kU2VsZWN0ZWRFdmVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXBwbGVQYXlTaGlwcGluZ01ldGhvZFNlbGVjdGVkRXZlbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwxMCArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKIAotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3Ry
dWN0dXJlSW5saW5lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaWVudFJlY3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpZW50UmVjdEN1c3RvbS5jcHAJKHJldmlz
aW9uIDIwNDA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpZW50UmVjdEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNs
aWVudFJlY3QuaCIKICNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9JZGVu
dGlmaWVySW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KICNpbmNsdWRl
IDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPGhl
YXAvV2Vhay5oPgogI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU0FycmF5Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMjA0
MDU1KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSw5IEBACiAjaW5jbHVkZSAi
Q29udGVudEV4dGVuc2lvblJ1bGUuaCIKICNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQuaCIKICNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3QuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09OT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvU3RydWN0dXJlSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wNy0yOSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEJ1dHRlcmZsaWVzIHNo
b3VsZCBiZSBhbGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29w
aWVkU3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MDEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgTmVlZCB0byAjaW5jbHVkZSBtb3JlIHRoaW5ncyBub3cuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisKIDIwMTYtMDgtMDIg
IEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBidWls
ZGluZyB3aXRoIGNvbnRlbnQgZmlsdGVyaW5nIGRpc2FibGVkLgpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0
LmNwcAkocmV2aXNpb24gMjA0MDU1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiTlBKU09iamVjdC5oIgogI2luY2x1ZGUgIk5QUnVudGltZU9iamVjdE1hcC5o
IgogI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
RXJyb3IuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVySW5saW5lcy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0Lmg+CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDQwNTUpCisrKyBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxNi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4g
QXV4aWxpYXJ5IE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDEyNQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhlIEpTQyBHQyBu
ZWVkcyB0byBiZSBhYmxlIHRvIHRyeU1lbWFsaWduLCBhbmQgdGhpcyByZWZhY3RvcnMgdGhlIGNv
ZGUgdG8gZXhwb3NlIHN1Y2ggYQorICAgICAgICBmdW5jdGlvbi4KKworICAgICAgICAqIGJtYWxs
b2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGUp
OgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChi
bWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbCk6CisgICAgICAgIChibWFsbG9jOjpBbGxv
Y2F0b3I6OnJlYWxsb2NhdGUpOgorICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmg6CisgICAg
ICAgICogYm1hbGxvYy9DYWNoZS5oOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OmFsbG9jYXRl
KToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgICogYm1h
bGxvYy9ibWFsbG9jLmg6CisgICAgICAgIChibWFsbG9jOjphcGk6Om1hbGxvYyk6CisgICAgICAg
IChibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKToKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6bWVt
YWxpZ24pOgorCiAyMDE2LTA3LTEzICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+
CiAKICAgICAgICAgVXBkYXRlIHN1cHBvcnRlZCBwbGF0Zm9ybXMgaW4geGNjb25maWcgZmlsZXMg
dG8gbWF0Y2ggdGhlIHNkayBuYW1lcy4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5jcHAJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw2ICs2NCwxOCBAQCB2b2lkKiBBbGxvY2F0
b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBzaXplCiAKIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CisgICAgYm9vbCBjcmFzaE9uRmFpbHVy
ZSA9IHRydWU7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbChhbGlnbm1lbnQsIHNpemUsIGNyYXNo
T25GYWlsdXJlKTsKK30KKwordm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7
CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbChhbGlnbm1lbnQsIHNpemUsIGNyYXNoT25GYWlsdXJl
KTsKK30KKwordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUltcGwoc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IHNpemUsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit7CiAgICAgQkFTU0VSVChpc1Bvd2Vy
T2ZUd28oYWxpZ25tZW50KSk7CiAKICAgICBpZiAoIW1faXNCbWFsbG9jRW5hYmxlZCkgewpAQCAt
ODAsNyArOTIsMTAgQEAgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZQog
ICAgICAgICByZXR1cm4gYWxsb2NhdGUocm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIHNp
emUpKTsKIAogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNz
PEhlYXA+OjptdXRleCgpKTsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENh
c2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgIEhlYXAqIGhl
YXAgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpOworICAgIGlmIChjcmFzaE9uRmFp
bHVyZSkKKyAgICAgICAgcmV0dXJuIGhlYXAtPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50
LCBzaXplKTsKKyAgICByZXR1cm4gaGVhcC0+dHJ5QWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1l
bnQsIHNpemUpOwogfQogCiB2b2lkKiBBbGxvY2F0b3I6OnJlYWxsb2NhdGUodm9pZCogb2JqZWN0
LCBzaXplX3QgbmV3U2l6ZSkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkocmV2
aXNpb24gMjA0MDU1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDMsMTIgKzQzLDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQqIHRyeUFsbG9j
YXRlKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlB
bGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlKHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiwgc2l6
ZV90KTsKIAogICAgIHZvaWQgc2NhdmVuZ2UoKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkKiBhbGxv
Y2F0ZUltcGwoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsK
KyAgICAKICAgICBib29sIGFsbG9jYXRlRmFzdENhc2Uoc2l6ZV90LCB2b2lkKiYpOwogICAgIHZv
aWQqIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90KTsKICAgICAKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Nh
Y2hlLmgJKHJldmlzaW9uIDIwNDA1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9p
ZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90
KTsKKyAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
KTsKICAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsK
ICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCogcmVh
bGxvY2F0ZSh2b2lkKiwgc2l6ZV90KTsKQEAgLTc5LDYgKzgwLDE0IEBAIGlubGluZSB2b2lkKiBD
YWNoZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUKICAgICByZXR1cm4gY2FjaGUtPmFsbG9jYXRvcigp
LmFsbG9jYXRlKHNpemUpOwogfQogCitpbmxpbmUgdm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlKHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIENhY2hlKiBjYWNoZSA9IFBlclRo
cmVhZDxDYWNoZT46OmdldEZhc3RDYXNlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0
dXJuIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1
cm4gY2FjaGUtPmFsbG9jYXRvcigpLnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Cit9CisK
IGlubGluZSB2b2lkKiBDYWNoZTo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNp
emUpCiB7CiAgICAgQ2FjaGUqIGNhY2hlID0gUGVyVGhyZWFkPENhY2hlPjo6Z2V0RmFzdENhc2Uo
KTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCShyZXZpc2lvbiAyMDQwNTUpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw2
ICs0MywxMiBAQCBpbmxpbmUgdm9pZCogbWFsbG9jKHNpemVfdCBzaXplKQogICAgIHJldHVybiBD
YWNoZTo6YWxsb2NhdGUoc2l6ZSk7CiB9CiAKKy8vIFJldHVybnMgbnVsbCBvbiBmYWlsdXJlLgor
aW5saW5lIHZvaWQqIHRyeU1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQor
eworICAgIHJldHVybiBDYWNoZTo6dHJ5QWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKK30KKwog
Ly8gQ3Jhc2hlcyBvbiBmYWlsdXJlLgogaW5saW5lIHZvaWQqIG1lbWFsaWduKHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCBzaXplKQogewpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0MDU1KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDctMzAgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxs
b2NhdGVkIGluIEF1eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMjUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMg
YSBuZXcgdmFsaWRhdGlvbiBmbGFnIHRvIHRoZSBWTSwgd2hpY2ggaXMgdmVyeSBjaGVhcCBhbmQg
c2hvdWxkbid0IGV2ZXIgYnJlYWsKKyAgICAgICAgYW55dGhpbmcuIFRoaXMgZW5hYmxlcyB0aGUg
ZmxhZyBmb3IgYWxsIG5vLWNqaXQgdGVzdHMsIHNpbmNlIHRob3NlIGFyZSB0aGUgb25lcyB3aGVy
ZSB3ZSBhcmUKKyAgICAgICAgYWxyZWFkeSBoYXBweSB0byBwYXkgc29tZSBwcmljZSBmb3IgYWx0
ZXJlcmVkIGNvdmVyYWdlLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
czoKKwogMjAxNi0wOC0wMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFsbG93IGJ1aWxkaW5nIHdpdGggY29udGVudCBmaWx0ZXJpbmcgZGlzYWJsZWQuCklu
ZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDIwNDA1NSkKKysrIFRv
b2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw3
ICs0MjAsNyBAQCAkbnVtUGFzc2VzID0gMAogIyBXZSBmb3JjZSBhbGwgdGVzdHMgdG8gdXNlIGEg
c21hbGxlciAoMS41TSkgc3RhY2sgc28gdGhhdCBzdGFjayBvdmVyZmxvdyB0ZXN0cyBjYW4gcnVu
IGZhc3Rlci4KIEJBU0VfT1BUSU9OUyA9IFsiLS11c2VGVExKSVQ9ZmFsc2UiLCAiLS11c2VGdW5j
dGlvbkRvdEFyZ3VtZW50cz10cnVlIiwgIi0tbWF4UGVyVGhyZWFkU3RhY2tVc2FnZT0xNTcyODY0
Il0KIEVBR0VSX09QVElPTlMgPSBbIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAiLCAi
LS10aHJlc2hvbGRGb3JKSVRTb29uPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldh
cm1VcD0yMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwPTIwIiwgIi0t
dGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTIwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVB
ZnRlcldhcm1VcD0yMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbj0yMCIsICItLW1h
eGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoPTE1MDAwMCJdCi1OT19DSklUX09QVElPTlMg
PSBbIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2Fy
bVVwPTEwMCJdCitOT19DSklUX09QVElPTlMgPSBbIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIs
ICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwMCIsICItLXJlc2V0RnJlZUNlbGxzQmFk
bHk9dHJ1ZSJdCiBGVExfT1BUSU9OUyA9IFsiLS11c2VGVExKSVQ9dHJ1ZSJdCiAKICRydW5saXN0
ID0gW10K
</data>
<flag name="commit-queue"
          id="308882"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>285260</attachid>
            <date>2016-08-03 12:29:02 -0700</date>
            <delta_ts>2016-08-04 12:57:21 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews114 for mac-yosemite</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>1294452</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
59nlvmg6Hb1uO3c0E/0CYfGnIO5mOP6Upb5Eieh/HSVi/FmUiPknUiL82SgR69koEYKemRLBPSXS
UyI9JdJTIj0l0lMiPSXSUyI9JdJTIj0l0lMiPSXSUyI9JdJTIj8eJUJ6SqSnRHpKpKdEekqkp0R6
SqSnRHpKpKdEekqkp0R6SqSnRHpKpKdEfjxKhPaUSE+J9JRIT4n0lEhPifSUSE+J9JRIT4n0lEhP
ifSUSE+J9JRIT4n8eJQI6ymRnhLpKZGeEukpkZ4S6SmRnhLpKZGeEukpkZ4S6SmRnhLpKZGeEvnx
KBG9p0R6SqSnRHpKpKdEekqkp0R6SqSnRHpKpKdEekqkp0R6SqSnRHpK5MejRP4G//I6Nv8GGPnf
AKM1XF1DoVaE5TX4xqesulY/cGNJgqny38cW6sBgWpRVL4eKqhbh56G6OkYoisIkEiKFgag9gAnT
UxYxMEMRP/REshqQsE1T5zFOuVwkydqP3H1goFwNENbclN9y9Xlblg7rJ2lYP9E5AIuoBd8aiQy5
b4W1jstgnNaLYPQALIy3BggzpCaY3MuKkjRimCZ6/QjdGEAQ5+oBtv2EweWAvvVEFElNIMi1TQ+h
Db4oRMMinWzgwoggGX8L0rUnIEs5yq8yyP2qe3Y5rD0LK35R5IXqQind3Ll/0lAu5L94fLKYRqJY
TmeKojjZLCxu1cNpeCVK6TbLxzASViikzTS1fTPUwdKm+tpbTOfnYpZAhVYIcDz0Uj2gmDPHwFzz
LYdo1NGZZlHP0QzbpIaBddf2nLfq/vt8spiKcv/96dHlsb//an9d1hqGiFrbGOBmjQHO1K8ikknj
QpTV6DqbLg9ajSZArhUE1NUoMRyN2szUuK27mmtKHAAOY96F5iGpG7g6bBOTpAvXYj7Pi6oNDVmO
F3CLaNxxTI1yyjROCdMMpDPPZdTybO8J0NqC19AlIdtEhxFNiET3cOIdGIi+hofgaw/vkdcAVEeu
gxjBmoVcrlELu5rjIq6Z3KGUuYyYlHYBXZe8lxbhVMh4uf9eQGCACmPf3pjTwo8JidIt/BQa9DRd
q6rBFr9kVRduVzcocfVAMyzua9QkumYjcEwWONyxOScuQ124G4ndeJuxNk4mLLSFk5MI7Jxu4HzI
wD4FNNTBGrI8MDAKwMCmQ8FJbZc7JndNZD0A9GHLLgfbUBPL4ltQkwRFaRptm/RIXIXxbRdejh3m
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
bePFrOKNq/dHz4lS+4cQz3ny3ao9k93sRqjBH33rA6mv+oOMOMZRA8zKm6NHJlmvp7H1WdXX+Q1L
Ir6szztd+LqlxIxvfWj1DMNjRnFt+HM5vnrUNuFW9SHWC7Wr+su1q+xlqTYHqg3hUIHqwOYSE/Un
MZl3VLuj2i9CteX3RUTC/wqq3b4LHmrmhp7ffst/MzP/h7rfQuS/6sarHz1g/+3tQJU1YnP04y1j
1T3s/dUxjuI4/lr38BKB+sZmg6ORiPB34nvb9p3DPEpnQZ5Nh7dRLpLe7h31gCfvO80SseTFz9kS
LzZb83tCbN9uCkKXMPoiYGB+jq29v27HxzoT3/x9zKf6PKC5+/ZUgAZDT1XTpso/+ZlUIBsR6ImW
3Ont96F9VzXBvboL2LdJikhMKFpTmopS14zanaRitmywAXPdwl+K8UWZH23580AC6/xp7t9AkdgS
cRuMC0ipg8Ft9b7m+A70KbW3xv79FEnimD8+T5Imp9EnIftS+y5KJ5K1P4gXIn84cjITrL8u8RV1
YPPbhc8CaSXb3w15SiGoFuCdvEeqBEd/inuvlirOi9t9VXc6rOo69wwT/Ype8acgbhc4/pSpvqaI
sL9OETH+LEXE/BMVEf5iioj1YooIQS+riFidItIpIp0i0ikinSLSKSKdItIpIp0i0ikinSLSKSKd
ItIpIp0i0ikiP5wiglEniXSSSCeJdJJIJ4l0kkgniXSSSCeJdJJIJ4l0kkgniXSSSCeJdJLIjyeJ
4E4S6SSRThLpJJFOEukkkU4S6SSRThLpJJFOEukkkU4S6SSRThLpJJEfTxIhnSTSSSKdJNJJIp0k
0kkinSTSSSKdJNJJIp0k0kkinSTSSSKdJNJJIj+eJEI7SaSTRDpJpJNEOkmkk0Q6SaSTRDpJpJNE
Okmkk0Q6SaSTRDpJpJNEfjxJRB+s30PxzqPiFu7/nJa36kduLIURVf7FZKH2DF0bpeXBQFHVPPoy
UNehRaNRlIyEGMPAqDmAiT4e6yMdUOfxY08k6wEJ2jQZj/GYy0mStPnI6gcGivUAieuL8lXOPm/a
Ysg0+DiqnmgdgEnUnO+MjAwpBeXWJi5D57SaBKNHYGG8M0B0Q3qCyYMtgcxIx2OzfoRuDjCCx6Qa
0HefkFsyx2zniSiWnsDGb4YeI6iKiMIJyceTLVxALpA8kzlpWxOwpZxkNynUA9W9uB5U+wopfp5n
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
ItIpIp0i0ikinSLSKSI/nCKCUSeJdJJIJ4l0kkgniXSSSCeJdJJIJ4l0kkgniXSSSCeJdJJIJ4l0
ksiPJ4ngThLpJJFOEukkkU4S6SSRThLpJJFOEukkkU4S6SSRThLpJJFOEukkkR9PEiGdJNJJIp0k
0kkinSTSSSKdJNJJIp0k0kkinSTSSSKdJNJJIp0k0kkiP54kQjtJpJNEOkmkk0Q6SaSTRDpJpJNE
Okmkk0Q6SaSTRDpJpJNEOkmkk0R+OEkECnYRzq9hzudsca19EHwlhmjqX0mWWp8bepQtXg56mlaE
XwbaOpwoisIkkjKFgag+gHGUpkZkANIifuiJZD2ggJomEzFOhVokyeqP3L1gYL4eIHH1ofqtVp/V
bTGLI5SG5ROtA7CIVoitkYgr+aewNnFxQ9ByEYwegIXx1gAxuPIEk3tbSSJZhHhIy0foxgDlCJYp
B4ztJwyhBtjWE8xUnsBhr4cejriRIgq3okjHDVwYEaTuYUHa9gRs9Y7yqwxqgOaeXQ7Ks4R5zy+K
vNBc4FTVR/eP8t6F+odvT5aTSBar+Uav13OyaVjcaoeT8ErO1blpvJCmg5G08dJee8vJ7FxOEyjV
hYST99NPP73UDigWhsOx0H3LITp1mKFb1HN0bpuUc8xc23Peavvv8/FyIuf770+PLo/9/Vf7m9bu
UKAvGHFTMLV1utb4EPZbew0X6VcZqfxxIeeL4XU2Wd2uPgI0AXKtIKCuTgl3dGobpi5s5uquqXAA
OIxFG5qHrDZwRdu4hBm24VrOZnmxqENDluMFwiK6cBxTp4IauqDE0Dlihuca1PJs7wnQ6oY30Fkp
3UInEMEK3cM5uM8RfQ0Pwa89vEdeA1CGXAcZBOsWcoVOLezqjouEbgqHUsM1iElpG9BNy3tpEU6k
+leC999LyA1QbPbtxpw6fitF6Rb+UBoyTTcIFsTil2zRhttlnBKXBTq3hK9TkzDdRnAwjcARji0E
cQ3Uhruy2I63GqvjjMMk3sKZSvgP7sgmzocC7FNAQx2sI8uDAKMAAmw6FA6p7QrHFK6JrAeAPhzZ
1WANKmZM8iZUzCxmpWm0HdIjeRXGt214BXYMHyKrOxZmOuUCrnhAfN1npuO5Ftw0zh8ObGX3sfBW
M3oVQpXWucAc3yNff2iZFoEgw9kHPkMZ3SN7BuAzkfCpYL4OJ5fDzbepbgnIAQbxLdPxfYMaCt9y
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
6kZ3Nji7IjQmvat2SKk4UtFm2d5geIZNCuICcqiaHa0JFZmg1NSbeQda6U73th1ZdCkHIwJm/zHW
iNVXWZOeFQaRPtRK4wz3PP0IeW7h44kuTd+q8RdQSwMEFAACAAgAQl8DSXHSthBiPQAAxi8BAEEA
HABhY2Nlc3NpYmlsaXR5L21hYy9hcmlhLWxhYmVsLW92ZXJyaWRlcy12aXNpYmxlLXRleHQtY3Jh
c2gtbG9nLnR4dFVUCQADvD6iV1s+old1eAsAAQT1AQAABBQAAADsXWtz28aS/bz8Ffhwy5d+QJo3
BiytU3j6KtFrRclx3ZSLBQJDCWWSYEBStvbXbw9AUSAIyaKtZHNjsFIWwxn0nO6Z6T59qCqd5Vms
5vOesfnyl5PZuZomKr/IlTJ+kxal5GPnLFpc16fCa/99Nl5O1Hz//enR5XGw/2p/8/nOYaKmi3SU
qrz38Cqd9yqfp9m0vsBPP/3U8bJEGRe3M7U5+EEKUzCjexIt0hv1EvDlsJBxVnPq7HZxnU21F8QS
Hzvnaj7LpvN0ON4wN782fiOMfexczlVuHPp1HBzhTsePFmr/Ip3UgBCEhYmkiaiBcY+LHsJ7SCLD
RBZCndO+0eTbcRQbMPTBwGgP/uNGF7MQSyRfAsRZli+2nsK440yz6e0kW86Ny8sKRuFJGTihb9ok
4KYVcN90bEzMwAtDjBAhARWdTkcjN5zP0Sdl9NNprAw3yxY9g0qEkDFXcTZN5p2Ol0fza5UYF9e5
ipL1Ggh2LJ3PokV8bfy+VEuIQZxN9qLZbKz2JlE6NRfFA51O8CVWswUg39yz4IM3cB1/4Hhe0O8b
3f7hu37w7v3Lyny90euN+yU4Pxkcnrx3jg7hId8/109FCwN9QavXcBglQ6VGnc77Y+NcXYGJuXGi
ohzm3I31Oqb51uhog4PBRfDhYuv8roxhNLKQgDdm5YOhfmP8BhGW6JePRm5+2c8/fzH6x//tnf7a
cPQhxkUQIFqrMPZ6TwwbxLcy8nN0E/XjPJ0tvCxXJdD/WnuOMYoFQ9Qyfr0Ii4WM1wa1O3g3G5Ek
I4sYP/e9Xq8/zhbv03m6yPJeL1dztei+BKPYkh2ys1Ulm6wmadJfRPniOMo/pdOr0j5FHbqbfY6I
GK7s/0tFs15vAgbP4SjPu0m2hHv9xrjJ0uTV+kcKWaH74qXxG7U+6kWZJB2266KcylF10Tgbj1W8
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
lflYnwfHdteeCtBg6Kkq2lT6p742C1QjAj3Riju9+T60b8smuF91ATs2SUAXGaFoTWlKSl0xaneS
ytmqwQbMVQt/Lsdni/yg4c89Cazyp7l7A8WZJeM2GGeQUgeD6/J9xfEd6FMqb43d+ynO41g8vE6S
JsfhJ6n6UvsmTCeKtd+LFzK/v3IqE6x/o+Mr6sDm7xg+CaSVNH995TGFoNyAt2qOUgkO/hD3XqxU
nGe3+6LqdHjZde4YJvoVveIPQdwucPwhS31NEeF/niJi/FGKiPkHKiLi2RQR69kUEYKeVxHBqJNE
Okmkk0Q6SaSTRDpJpJNEOkmkk0Q6SaSTRDpJpJNEOkmkk0Q6SeTHk0RwJ4l0kkgniXSSSCeJdJJI
J4l0kkgniXSSSCeJdJJIJ4l0kkgniXSSyI8niZBOEukkkU4S6SSRThLpJJFOEukkkU4S6SSRThLp
JJFOEukkkU4S6SSRH08SoZ0k0kkinSTSSSKdJNJJIp0k0kkinSTSSSKdJNJJIp0k0kkinSTSSSI/
niTCOkmkk0Q6SaSTRDpJpJNEOkmkk0Q6SaSTRDpJpJNEOkmkk0Q6SaSTRH44SQQKdh4W1zDnc7q4
1j4KYyWGaOovOUutbzA9ShcvBz1Ny8MvA20dThRFYRJJOYaBqD6ACUrGLGKANI8feiJZDyigpslF
jMdCLZKk9UfuXjBQrAdIXH2ofqrV53VbnAlGx2H5ROsALKLlYmskMpT8k1ubuAwmaLkIRg/Awnhr
gDBDeYLJvS04zzRCEbXKR+jGADGQlVS22PYToVADvPlEiKjyBA57PfRwxDFDFG5FPp40cGFEkLqH
OWnbE7DVO8quUqgBmnt2OSjPEun5eZ7lmguUqvrk/kmjd6H+Nu/JchrJvBrErNfrOekszG+1w2l4
JQt1bBovpOlgZNx4aa+95XR+LmcJVOpcwsF79+7dS+2AYsEcAwvdtxyiU4cz3aKeoxs2dE0G5q7t
OW+1/Q/ZZDmVxf6H06PLY3//1f6mtTsU6AskMs5MtXO61vgQtlt7DffoFxmp9HEhi8XwOp2uLlcf
AZoAuVYQUFenxHB0ajNTFzZ3dddUOAAcxqINzUNWN3FxtI3LoOM2XMv5PMsXdWjIcrxAWEQXjmPq
VFCmC0qYbiDOPJdRy7O9J0CrG95AZ0ZiC12cSEOhezgF9w1EX8ND8GMP75HXAJQj10GMYN1CrtCp
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
qsQ0OfDDbcu1/+nC8f3HAPV6afm9Vpp1oaepbqrikMa+HalaE2jD4N9n/YLCDhExGCTTu/STHKiQ
Diq2MvgM1B4WPL7z+WAQQQ4//vny32cUoGJcQ+di/86ngM/3/Ttvdn6l+CGwQ2t/UEa01leO5tOS
2j68P3pKlOoHr2wEVcCe9OTbhw5SNdxroVZfBGx8LfX1MxpaEQ5rYB68OdqxyHI/+cY3Vl/nN1YY
ikV93hIKll0vZmLjq6snGI4YxZXhz8Xoaqdtor5loc/WURvP11Gz5+0GLKDaEA4NqA4cLjnW/iXH
s5Zqt1T7eai2xYxhLP4Mqt18ClY1c+0rh+Yp/8nM/G/qfgOR/6obL370gP3HtwMqa0Tm8MfbxrJ7
2PcXyCBaVhR9rXt4jkB9Y7PBDCFD/J343jT95mEWJtMgSyf92zCTcXd7RjXgqXmnaSwXvPgpR+LZ
Vqt9Tc3Zvt0UhC5m9FnAwPoCW3v/0h2cLCa/+bcyH+vzgObu2VMpNBh6qoo2lf6pr80C1YhAT7Tg
Tm++D+3bsgnuVl3Ank0S0EWLULSkNCWlrhi1O07kdNFgA+aqhb+Uo4siO9rwZ0UCq/xp7t9AccuS
UROMC0ipvd5t+b7i+A70KZW3fP9+iodRJHavEyfxafhJqr7UvguTsWLtK/FCZqsrpzLB8jc6vqIO
rP+O4ZNAWvHmr688phCUG/BWzVEqwdEf4t6LhYrz7HZfVJ0OK7vOPcNEv6JX/CGImwWOP2Spryki
7M9TRPgfpYiYf6AiIp5NEbGeTREh6HkVEYxaSaSVRFpJpJVEWkmklURaSaSVRFpJpJVEWkmklURa
SaSVRFpJpJVEfjxJBLeSSCuJtJJIK4m0kkgribSSSCuJtJJIK4m0kkgribSSSCuJtJJIK4n8eJII
aSWRVhJpJZFWEmklkVYSaSWRVhJpJZFWEmklkVYSaSWRVhJpJZFWEvnxJBHaSiKtJNJKIq0k0koi
rSTSSiKtJNJKIq0k0koirSTSSiKtJNJKIq0k8uNJIkYribSSSCuJtJJIK4m0kkgribSSSCuJtJJI
K4m0kkgribSSSCuJtJLIDyeJQMHOwvwW5nxOilvtg+ALMURTf8lZal1u6MOkeNnraFoWfulpy3Ci
4TCMh1KOYGBYH8A4Ho6MoQFIs2jXE/FyQAE1TSYiPBJqkTipP/LwgoF8OUCi6kP1U60+q9tiZkji
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
59ntvqg6HV52nTuGiX5Fr/hDEDcLHH/IUl9TRPifp4iIP0oRsf5ARUQ+myJiP5siQtDzKiIYtZJI
K4m0kkgribSSSCuJtJJIK4m0kkgribSSSCuJtJJIK4m0kkgrifx4kghuJZFWEmklkVYSaSWRVhJp
JZFWEmklkVYSaSWRVhJpJZFWEmklkVYS+fEkEdJKIq0k0koirSTSSiKtJNJKIq0k0koirSTSSiKt
JNJKIq0k0koirSTy40kitJVEWkmklURaSaSVRFpJpJVEWkmklURaSaSVRFpJpJVEWkmklURaSeTH
k0RYK4m0kkgribSSSCuJtJJIK4m0kkgribSSSCuJtJJIK4m0kkgribSSyA8niUDBzqPiGuZ8TufX
xgcplmKIof8nZ2V0BTOH6fxlr2MYefSlZ6zCiYbDKBkqNYKBYX0A4xEfsSEDpHn80BPJakADtSwu
YzySepEkrT9y94KBYjVA4upD/VOvPqvb4gJROorKJxoHYBEjl1sjQ6Hln9xexyWYpOUiGD0AC+Ot
AcKE9gSTe1uJRIRiW+LyEbo+IBCKaDnAtp8gUg/wrScU1Z7AYa+HHo44wYjCrchH4w1cGBGk72FO
mvYEbHWOsqsUaoDhnV32yrMEByXI8yw3POBU1Uf3j4rOhf7PeU8Wk6HKl/NZp9Nx02mU3xqHk+hK
FfrcbLyQYYKR0cbLeO0vJrNzNU2gVOcKTt5PP/300jigWDJXYGkGtktM6nJm2tR3TeFYVAjMPcd3
3xr777PxYqKK/fenR5fHwf6r/XVrdyjQF4zshEu9daax8SHst/EaLtKvaqjzx4Uq5v3rdLK8XV0E
aELk2WFIPZMS4ZrUYZYpHe6ZnqVxADiMZROah6xu4Bpu41IsasK1mM2yfF6HhmzXD6VNTOm6lkkl
ZaakhJkCceZ7jNq+4z8BWt3wGrpRzLfQDfmIanQP5+AuXK3X8BD82MN75DUA5chzESPYtJEnTWpj
z3Q9JE1LupQyjxGL0iag65b3Rnk0Ufq/wN1/ryA3QLHZdzbm1PEnLIm28CuG7dFojWBBLH5J5024
PS4o8XhoClsGJrUINx0EB5OFrnQdKYnHUBPuymIz3mqshhOa5MjexIkpi4f6jqzjfCjAAQU01MUm
sn0IMAohwJZL4ZA6nnQt6VnIfgDow5FdDtahyuGQbkGVIyJGo+F2SI/UVRTfNuGV2GUBRNZ0bcxN
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
iNfqzxO7H1BLAwQUAAIACAArXwNJTG+txF8CAACoBAAANgAcAGNvbXBvc2l0aW5nL2JhY2tpbmcv
aW5saW5lLWJsb2NrLW5vLWJhY2tpbmctc3RkZXJyLnR4dFVUCQADkT6iV5E+old1eAsAAQT1AQAA
BBQAAAB9U1tvmzAUfudX+GkiVVUghKumShlJurRpMgXaPEyTZezDahUwMk60/vuZZCRMivpk2ee7
+NymaTrfZsvNGi2my9V8FqMKt4rQ9zvezqtGfZgjw3oV5b6C1poRRaz5LrV2kD9xZaViLylYj+RA
Uip5oxIhwXoD0lhpKdQrb7kS8o42jek47gjF6CA4Q49pEscDQBxLaEFpJwchZP9xbAqM2K6Ndtki
kaR9M8Z9gBZhEYw/kXAHSAivIRlnqSJSPRP5zuvfmjPpOUEQ+vk/znedRhxXGrQVQrUmE/u8hNtj
Cjfng9cKmV9G6Kcb/BoZ3kUod8NiKERFWQJVy6opzfPzpgFJFBf157L+RZZAyK7IXpEcGUFP8yfg
+d6JNmdQPyRTqviBq4+ElGWuu62rIpKTlKbqkoRnSz93mH3iXufthHzXjOjMiDw/hMsnM16BLrvq
jhlnCy7BxDhZbPf1SohTuM9cj4DdyQRFUUReELAxTNAR/LJebTY/8DLFyXS1Wq4f8OYlw9kGT3G2
fJ5vj8/fpskTXrysk26iMTYcZyhGi8BFA+eZOHobzniAKmzPZVdQreG4A5gb+nY4hOnDcCZDRJCz
EA3jaQOUF5wajncqVR7pKfcpkvs6g1aZrWJxjLETxzlpOdWLKPWAfqVvRN6iS7C7YyUJV+0xdj8M
6sYISvSgn0LoHlFRt+qLrqzfu0ZAJqx31Q4pyAPI7pfdDgZnGCvYGLF91WyhZiAzCWDqybxFnfRJ
96ZrWXhJhxKGZv8xngmvr7KinlWQUC9qpXHG+Nz9kLjjwqORTk3vqvEXUEsDBAoAAAAAAABfA0kA
AAAAAAAAAAAAAAAUABwAY29tcG9zaXRpbmcvY29sdW1ucy9VVAkAA0A+ole/PqJXdXgLAAEE9QEA
AAQUAAAAUEsDBBQAAgAIAEJfA0lgX6Tt8UEAAJI/AQA2ABwAY29tcG9zaXRpbmcvY29sdW1ucy9j
bGlwcGVkLWluLXBhZ2luYXRlZC1jcmFzaC1sb2cudHh0VVQJAAO8PqJXQD6iV3V4CwABBPUBAAAE
FAAAAOxda3PbxpL9vPwV+HDLl35AmicwYGmdwtNXiV4rSo7rplwsEBhKKJMEA4Cytb9+ewCSAklQ
Fm0lmxuDlbIYzqDndM9M9+lDVekiSyOZ5z1t/eXNJ7NLOY1ldpVJqf0mTCLox85FWNxuToXX4ft0
PJ/I/PD9+cn1qX/46nD9+c5xLKdFMkpk1tu9Sue9zPIknW4u8NNPP3XcNJba1f1Mrg9+EIZuMK17
FhbJnXwJ+DJYSLvYcOrivrhNp5UX5GPnUuazdJonw/GaufxW+40w9rFznctMO/Y2cXCEOx0vLOTh
VTLZAEIQNnQkdEQ1jHuc9yg/ICbWdGQi1Dnva02+nYaRBkMfNIwO4D+udTELsEDiJUCcpVmx9RTG
HXuaTu8n6TzXrq9rGA1XCN8OPN0iPtdNn3u6bWGi+24QYIQI8anR6XQUcs3+HH6SWj+ZRlJz0rTo
aVQghLRcRuk0zjsdNwvzWxlrV7eZDOPVGgh2LMlnYRHdar/P5RxiEKWTg3A2G8uDSZhM9aJ8oNPx
v0RyVgDy9T3zP7gDx/YGtuv6/b7W7R+/6/vv3r+szVcbvdq4X/zLs8Hx2Xv75Bge8rxL9VRYaOgL
WryGwzAeSjnqdN6fapfyBkzk2pkMM5izHOt1dP2t1lEGB4Mr/8PV1vldGMNIIGrAG732gVRvtN8g
wgL98lHL9C+H2ecvWv/0v93zXxuOPsS4DAJEaxHGXu+JYYP41kZ+Du/CfpQls8JNM1kB/a+V5xhZ
3KKImtqvV0G5kPZao1YH72eDDvHIJNrPfbfX64/T4n2SJ0Wa9XqZzGXRfQlGsSk6ZG+rUjRZjZO4
X4RZcRpmn5LpTWWfog7dy76QFBvDhf1/yXDW603A4CUc5bwbp3O412+0uzSJX61+JJAVui9ear9R
86NalAnSYfsuyqgY1ReN0vFYRsXxZDburj4+n8ksVEf5axAwwbzD98VApYgbMDSsX67BcMfYb4kY
mdzg1RI+pO13rh1Bck2Kezccj4dh9Am2MXWrZWGZcg+p2TH39IQwHKNqmeYlfk2zT9UBIaIj9rTO
pCHkQ5xU2oPjV6gfXhIHSSa7g4EbXM6nJ2laDS93qjweFutYa0uqhYJ0Po3L2K4taY5GI4ubZkwk
00qr12cn5+cXg+P+wLVPTo7P3g3Or68GV+cDe3B1fOpflh87tvvLILg+c6+Oz88GA1iVoA5Gey4a
jUyq1Vzx0tIZFTbEIR3g/eyNEKdxg71cbTLUP0z2s0eFgUTdHvwoPSWsg+metsxhLLS6pf5MRsAq
ImXRMjqYlWRB2/1aOyQITBoR5GnYb0YszgjhpIP5nkZ4yOIHI5QLAmEy9jTCRjGpGaGYig4293Un
CmtIGDMUErGfkSEW4gEJMAgMVwHDXRgnw/h+HB/AP8lwlxG1UyKkZMQjS8tVplcHcVUS8aOlUK2w
GNQn4TS8kVlZEuHz/D4v5GTwSWZTOV6HsL4yDgkl2id5BzQQiKG6BWVJrNlu8GDNhqCUGFIbLOcP
JjfZoKrQYA9OyNIb0tsfnmWxEK7DZ8htv5fzM1nMs+ka0IW1WbXmmrm6Nbj4hMZxFebB599XEDFd
QaR/fYjsrw+RfwtEJhTEXE4+h0kxyJObaTheAxi9fn2Am69T3ZYAlhcTAQCBSA4GcIWK2yRfHMhe
Lx9LORuM0qz7MCG6zdJpCjV0XjGBo3E6vdHUP29qZsqxIzx+A5iWr/Fb7S3cyGlevFBl0OT7Mj8D
xyYzykL6VcRPgaUAfadnGz4BnSV78k3wKuQh1YYToCdptHChBms+TSCbDWDs09FqEhDdIolO54X8
8vZFHd63OlGit/ievFWBJ1H8AF6dx2voxsdBOM7ln+7FG22YpuNyKwy8J/8tfaHWgy8VB86jEPL9
jfx/2RGT7smwwQlLUrHpBJzQaJ4p+aK/dKfccMT2pNZgf4QofrBv5/fT6CrMa5FQS1Z0V+tu4Hj1
svvyrbqy6rYuqNaChht8Tx4OUCQi/Fmg+NMiu79IoYvqfo+5kt4DL7L2dIQgxEjVINSOxGCR1Qaz
LP1yf1TLeHMwe1TBgHW/D/Gb7wrgK5VCHzobLMomY68KyRGHYraYOBim8X1ZIHHZXuxlCXiu+WBp
xRBNo+ws9izbMtY2DT0UbaNX55Zn/evLEzedTqum9SQN429hl4zFUpuEihTmN4MiC2dNnOMJhqjB
RitDilZuVtqntFZyyOqtVV9md0kkT8HqRVqGg+DNUvcUs9BnbXdsmJp4o/I8Q8e2nv7d4EwWitTt
oEImMeASQm/y28Z2dqv9fKkNMpmn8yyS6gO1ZO+jOvOUbeToTdhbOxSaprQIhOGsX52nwUApdWWb
jinjZU5+njsktGe7Q5b2vHfIhDv08/GVpqSYcZIX5RuZLXThbyDFcO4hpjOVxG4H0Z2iIt/EicUI
RxavV/B0GidqPwd3YZaEStkvic4OSvDw6aRiA2VqNPdluzw2iBgqBbbXu6gkzZO06PVm8N5dIoKM
fF9KhGWKLonoqzfVM/0oncn4JJwM4/BI0SIN8vWCqzZNqZJ8bco2hVES12CmyuTR9iDsUxjfDyIV
g+/lP7WGoWKmGPN9ddyhFbOh3I6fen8p8/m4eEJsq8CV81afO2Eua0z3qBw9Aa/fdldv/0Lh6/X+
OS53+J/dlxU//pv4g8Chtw0Hv8T74m/n6ou/2JUkxr5fcsCNpCP5N9gXpVcD1eV7u09CVpHpXe43
e17GW6B9e0EE/REJqy8qoNIuCy24Np9WVbbqvfjeXSCS2ADytW259j9dOL7/GKBeLy2/NEqzLjQM
1U1VBI3t2+6pNYE2DP591i8o7BARg0EyvUs/yYEK6aCS6QafgTfDgsd3vjEYRJDDj3++/PcZBagY
19C52L/zKeDzff/Om51fKfIF1MvaHxSL1pq20Xxa8sbl+6OnRKl+8MouSwXsSU++XbZnqptdC7VS
2Te+8/nqGY0wjXBYA7P05mjHIqv9NDa+Dvp614tYKBb1easLX7WUmIuN74WeYNjgFFeGPxejq522
ibDK74meqV1lz9eu8uel2gKoNoRDA6oDh0uOtX/J8ayl2i3Vfh6qbdEhj8WfQbWbT8FDzVzT85un
/Ccz87+p+w1E/qtuvPjRA/Yf3w6orBGZwx9vG8vuYd/fzoJo0Sj6WvfwHIH6xmaDDokM8Xfie9P0
a31ZmEyDLJ30b8NMxt3tGdWAp+adprFc8OKnHIlnW632HbDB9+2mIHQxp88CBtYX2Nr7N9qowbj8
5l95fKzPA5q7Z0+l0GDoqSraVPqnvpMKVCMCPdGCO735PrRvyya4W3UBezZJQBeBcKMVpSkpdcWo
3XEip4sGGzBXLfylHF0U2dGGPw8ksMqf5t4NFMCwZNQE4wJSaq93W76vOL4DfUrlrbF3P8VjFkVi
9zpxEp+Gn6TqS+27MBkr1v4gXsjs4cqpTLD6dYmvqAPrv8D3JJBWvPm7IY8pBOUGvFVzlEpw9Ie4
92Kh4jy73RdVp8PLrnPPMNGv6BV/COJmgeMPWeprigj/8xQR449SRMw/UBERz6aIWM+miBD0vIqI
1SoirSLSKiKtItIqIq0i0ioirSLSKiKtItIqIq0i0ioirSLSKiKtIvLDKSIYtZJIK4m0kkgribSS
SCuJtJJIK4m0kkgribSSSCuJtJJIK4m0kkgrifx4kghuJZFWEmklkVYSaSWRVhJpJZFWEmklkVYS
aSWRVhJpJZFWEmklkVYS+fEkEdJKIq0k0koirSTSSiKtJNJKIq0k0koirSTSSiKtJNJKIq0k0koi
rSTy40kitJVEWkmklURaSaSVRFpJpJVEWkmklURaSaSVRFpJpJVEWkmklURaSeTHk0T+A/7uOpCK
LMxvwY/PSXGrfRDGQrDR1F9yllrXYPowKV72OpqWhV962mrL0XAYxkMpRzAwrA9gHA9HbMjA9Sza
9US8GlBQTZPDHRgJtUic1B9ZvmAgXw0QVn2ofqrVZ3Vb3BxGfBSWTzQOwCJaJrZGhobaq8xax2Uw
QctFMNoBC+OtAcIM5QkmNVuShTGOR6R8hK4PjBCmVjnAtp+gQg3wrSe4UJ7AhayHHpKvRRGFm5uN
xhu4MCJI5YqMNO0J2OqcpDcJ1CnNvbjulacJi46fZWmmucD7qo8eHjU6V+qP857NJ0OZLeazTqfj
JNMwu9eOJ+GNzNW52XghTQcjo42X9tqbT2aXchoDncgknLyffvrppXZEsWCOgYXuWw7RqcOZblHP
0Q3bpIaBuWt7zlvt8H06nk9kfvj+/OT61D98dbhubYkCfYFsiyNTbZ2ubXwI+629hqv0qxyqHHcl
86J/m0wW96uLAE2AXCsIqKtTYjg6tZmpC5u7umsqHAAOY9GEZpfVDVzxNi4yjJpwzWezNCvq0JDl
eIGwiC4cx9SpoEwXlDDdQJx5LqOWZ3tPgFY3vIaO0e2oWaHBFbrddaJrIPoaHoIfB/iAvAagHLkO
YgTrFnKFTi3s6o6LhG4Kh1LmMmJS2gR03fLBKAsnUqXJw/cScgMUxEN7Y04d/9Bicgt/JEQ8Gq2R
QIjFL0nRhNvlBiUuD3TDEr5OTcJ1G8HBZIEjHFsI4jLUhLuy2Iy3GqvjlJyQTZwYW4ypO7KOc1eA
fQpoqIN1ZHkQYBRAgE2HwiG1XeGYwjWRtQPo7sguBmtQsYkI34JqUkuMRsPtkJ7ImzC6b8IrsMN8
iKzuWJjr1BBwxQPi6z43Hc+14KYZxu7AVnYfC281o4acmIvsXUdOTEbDjSDbp95lGMt0+kFVnHcn
XpbcyUzr4gNKDgiH5+HdAQEfIAkgCLKhQ/KFmAeBgOMtkG763Agc7lPX4eBDv6zchyfJMIMceeh/
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
YrrsqjumnM65ZCZCyXy7r5dCnMLnzPUI2J1MWBTF2A9D6jAPHMEv6+Vm8xMtUpRMlsvF+hFtXjKU
bdAEZYvVbHt8/j5JntH8ZZ10E42QAeFQjBShCwbOU3H0NqAzQBW279IrqNaA7gDmRoEdDWH6MKA3
RIQ5jcAwnjaM8IITA/qfpbI1LCBA7uuMtcpsFY1jhGAc57jlRC+i1AP6jbxheQcuwe6OlMRctcfY
wzCoGyMI1oN+CoEHQETdqhtd2aB39bFHz67aIWXywGT3y24Hwx7mFdQBdF81W1ZTJjPJmKkn8w50
0ifd265l0SUdgimY/sdYYV5fZY3PrBxGelErjTOcvvsRdp3CJ2Odmt5V4x9QSwMECgAAAAAADl8D
SQAAAAAAAAAAAAAAABwAHABjb21wb3NpdGluZy9jb250ZW50cy1vcGFxdWUvVVQJAANbPqJXvz6i
V3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACAAOXwNJyqZ25pAAAAD6AAAAOgAcAGNvbXBvc2l0aW5n
L2NvbnRlbnRzLW9wYXF1ZS9vcGFxdWUtd2l0aC1jbGlwLWNyYXNoLWxvZy50eHRVVAkAA1s+oldb
PqJXdXgLAAEE9QEAAAQUAAAAtc6xDoIwEIDh3ae4zQnbgjHKLE5Ek0YnY0hpT2iCHLkrMby9vITr
v3x/Ze3NlnBxccAAiYDRBdiqhyCLauc4hJaSqmPLjhdVUyfqHF03kqToLU7EaS3zZ7I4BuQ7Iza5
NodMHzOdZ7ooTto0+BVj9jvPTvptCc+KeSTIX3AlkNn38F59IIYQGX0iXso/T2x+UEsDBAoAAAAA
AA5fA0kAAAAAAAAAAAAAAAAbABwAY29tcG9zaXRpbmcvY29udGVudHMtc2NhbGUvVVQJAANbPqJX
vz6iV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACABCXwNJ/fiMw6w9AADGPAEAXQAcAGNvbXBvc2l0
aW5nL2NvbnRlbnRzLXNjYWxlL2hpZHBpLWNvbXBvc2l0aW5nLWxheWVyLXBvc2l0aW9uZWQtb24t
c2NhbGVkLWNvbnRleHQtY3Jhc2gtbG9nLnR4dFVUCQADvD6iVz8+old1eAsAAQT1AQAABBQAAADs
XWtv20iy/Xz1K/hhkVUetPtJNgXfBHxmPePXtexMsINAoMiWTUQSNSTlxPfX32pSkimJdqzEs3c8
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
E9+bpl8e5mE6CfJs3L8Ocxl3t6+oBjx13XEWywUvfsyWeLLZao+pOdu1m4LQxYw+CRiYX2Br5x/d
WcRg8pt/lflQnwc0d9eeCtBg6Kkq2lT6px6bBaoRgZ5owZ3efB/at2UT3K26gF2bpIgkhKIVpSkp
dcWo3VEqJ4sGGzBXLfy5TM5m+cGGP3cksMqf5u4NFEksGTXBOIOU2utdl58rju9An1J5y3fvpyiK
InH/PHEaH4efpOpL7ZswHSnWfideyPzuyKlMsPpFx1fUgfXfGD4KpBVv/nzlIYWgXIC36hqlEhz8
Je69WKg4T273RdXpsLLr3DFM9Ct6xV+CuFng+Eum+poiwv5zigj/qxQR8y9URMSTKSLWkykiBD2t
IoJRK4m0kkgribSSSCuJtJJIK4m0kkgribSSSCuJtJJIK4m0kkgribSSyM8nieBWEmklkVYSaSWR
VhJpJZFWEmklkVYSaSWRVhJpJZFWEmklkVYSaSWRn08SIa0k0koirSTSSiKtJNJKIq0k0koirSTS
SiKtJNJKIq0k0koirSTSSiI/nyRCW0mklURaSaSVRFpJpJVEWkmklURaSaSVRFpJpJVEWkmklURa
SaSVRH4+ScRoJZFWEmklkVYSaSWRVhJpJZFWEmklkVYSaSWRVhJpJZFWEmklkVYS+fkkEfbj//uT
mD8DjM/g3/HE4hlgtH58jAQ9A4z4GWAkzwAjfQYYjWeA8RnUGfIM6gx5BnWGPIM6Q55BnaHPoM7Q
Z1Bn6DOoM/QZ1BmkRXlYXEM/8TmdXWsfBF88ONX6s3AmtS439GE6e9nraFoefulpq9YLDYdhPJQy
gYFhfQAThBNjaIDreXTfHfFqQEE1TSYinAg1SZzWb1m+YKBYDRCj+lK9q9mndVuMMW4kYXlH4wBM
ouVia2TI1Vrl1joubghaToLRPbAw3hogBleeYHJny7JiAv+JuLyFrg9IxCJWDhjbd0ihBtjWHbGh
PIHGuB56CLFMEIUOOk9GG7gwIkj17DlpWhOw1TnKrtIoHGnu2WWv3E284+d5lmtuFsvqm7s7eeci
D6fayXw8lHk1iI1Op+OkkzC/1Q7H4ZUs1LbZeCFNByPJxkt77c3H03M5iWV+kUvYeL/88stL7YBi
YTgcC923HKJThxm6RT1H57ZJOcfMtT3nrbb/PhvNx7LYf396dHns77/aX7e2RIG+YBQKwtXK6drG
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
SwMECgAAAAAAK18DSQAAAAAAAAAAAAAAABUAHABjb21wb3NpdGluZy9vdmVyZmxvdy9VVAkAA5E+
ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAA5fA0nKpnbmkAAAAPoAAAA/ABwAY29tcG9z
aXRpbmcvb3ZlcmZsb3cvZml4ZWQtcG9zaXRpb24tYW5jZXN0b3ItY2xpcC1jcmFzaC1sb2cudHh0
VVQJAANbPqJXWz6iV3V4CwABBPUBAAAEFAAAALXOsQ6CMBCA4d2nuM0J24IxyixORJNGJ2NIaU9o
ghy5KzG8vbyE6798f2XtzZZwcXHAAImA0QXYqocgi2rnOISWkqpjy44XVVMn6hxdN5Kk6C1OxGkt
82eyOAbkOyM2uTaHTB8znWe6KE7aNPgVY/Y7z076bQnPinkkyF9wJZDZ9/BefSCGEBl9Il7KP09s
flBLAwQUAAIACAAOXwNJcjEuDWACAACoBAAAPAAcAGNvbXBvc2l0aW5nL292ZXJmbG93L2ZpeGVk
LXBvc2l0aW9uLWFuY2VzdG9yLWNsaXAtc3RkZXJyLnR4dFVUCQADWz6iV1s+old1eAsAAQT1AQAA
BBQAAAB9U9tumzAYvucpfFWRqioYwiFoqpSRpEubwxRoczFNlrHNahUwMk60vv1MaAiTol5Z9nf4
/Z+mSTLfpcvtBiymy9V8FoESNQqT93vezMtafZgjw3oVxaFkjTXDClvzfWLtWfbMlZWIgyTMesJH
nBDJaxULyaw3hmsrKYR65Q1XQt6TujYhdEcgAkfBKXhK4igaEKJIsoYpHQkCAOy/0Kb2xLZdG+zT
RSxx82Y4nwBhmOWB84WFO2Cy8BqTcpooLNUay3de/dGa8VkzcZiffWp+6DSiqNSknRCqMak4ZAW7
O6Vw2x+8UsC8GYFfbvB7ZHi9kQvdMB8aEVEUjKhlWRdm/7ytmcSKi+prW/9ia7OQXrG9YjkygrMs
tMee73WyOWXVYzwlih+5+ohxUWS627oqIu6stFSXJLyUBEJqd9rrur2Q71ox6RXjzA/Z5ZMpL5ku
u2qPGacLLpmJULzYHaqVEB18zlyPgN3aBHmeT7wgoA4bgxP5ZbPabn+iZYLi6Wq13Dyi7UuK0i2a
onS5nu9Oz9+n8TNavGzidqIRMiAcmpE8cMEg8kycYhvQGbBy23PpFVZjQHdAc0PfDoc0fRhwPGQE
GQ3BEE9qRnjOiQG9rlRZ5oWuT4A8VClrlNkoGkUIwSjKcMOJXkSpB/QbecPyDlzA9o6UxFw1J+xh
COrGCIL1oHcQeABEVI260ZX1+6g+HtNzVB0hYfLIZPvLdgeDnubl1AH0UNY7VlEmU8mYqSfzDrTW
ne9t27Lwkg7BFMz+U6wxr66qJmdV5oR6UUvNM5y++yF2ndwjE52a3lXjH1BLAwQUAAIACABCXwNJ
gN+IjU9DAACXRwEASgAcAGNvbXBvc2l0aW5nL292ZXJmbG93L292ZXJmbG93LW92ZXJsYXktd2l0
aC10b3VjaC1uby1vdmVyZmxvdy1jcmFzaC1sb2cudHh0VVQJAAO8PqJXdz6iV3V4CwABBPUBAAAE
FAAAAOxda3ObyLb9fPUr+HAqR3kg94OGRuWbKUAo4xm/ynIyqTOVohA0NhUJNICc+N/f3SDJSEK2
lWjOnZmgmooZutm99u7u3WsvVKXLLA1EnveV9c9gPp1diSQU2XUmhPI7Nyg1P3Uu/eJ2syt8jj6k
k/lU5EcfLk7fn7lHr47Wn++chCIp4igWWX/3KJ0PIsvjNNkc4Keffuo4aSiU6/uZWG/8yHVV15Tu
uV/Ed+Il4MtgIOVyw6nL++I2TUovMP/UuRL5LE3yeDxZM5ffKr8TTfvUeZ+LTDkZbOJgCHc6A78Q
R9fxdAMIQVhXEVcRVTDuM71PeM/UDUVFBkKdi5HS5NuZHyjQ9FHBqAf/MaWLtSHmiL8EiLM0K7ae
wrhjJWlyP03nufL+fQ2j7nDuWsOBahKXqYbLBqplYqK6znCIESLEpXqn05HIFeuL/1koozgJhGKn
adFXKEcIKbkI0iTMOx0n8/NbESrXt5nww9UYCGYszmd+Edwqf8zFHGIQpNOeP5tNRG/qx4lalA90
Ou7XQMwKQL4+Z+5Hx7OtgWc5jjsaKd3RybuR++7Dy1p/OdGrifvVvTr3Ts4/WKcn8NBgcCWf8gsF
fUWLz3jsh2Mhok7nw5lyJW7ARK6cCz+DPsu2fkdV3yodadDzrt2P11vrd2EMIyPSdLhQazcieaH8
DhHm6NdPSqZ+Pcq+fFVGZ//rXPzWsPQhxmUQIFqLMPb7zwwbxLfW8ot/54+CLJ4VTpqJCuj/rDzH
yNTMCFFD+e16WA6kvFao2cH72SDjMDKI8svI6fdHk7T4EOdxkWb9fiZyUXRfglFs8A7Z26rgTVbD
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
E9/8rczH6jygufvWVIAGQ01V0abSP/lOaigLEaiJFtzpzfehfVsWwd2qCtizSDK1MCIUrShNSakr
Ru1MYpEsCmzAXJXwVyK6LLLjDX8eSGCVP429CyiAYYqgCcYlpNR+/7a8rji+DXVK5a2+dz2lCRQE
fPc4YRye+Z+FrEutOz+eSNb+IF6I7GHLyUyw+rrEE+rA+ncMnwXSDDe/G/KYQlBOwFvZR6oEx3+K
ey8WKs7B7b6oKh1WVp17hok+oVf8KYibBY4/ZainFBH231NE9D9LETH+REWEH0wRMQ+miBB0WEUE
o1YSaSWRVhJpJZFWEmklkVYSaSWRVhJpJZFWEmklkVYSaSWRVhJpJZEfTxLBrSTSSiKtJNJKIq0k
0koirSTSSiKtJNJKIq0k0koirSTSSiKtJNJKIj+eJEJaSaSVRFpJpJVEWkmklURaSaSVRFpJpJVE
WkmklURaSaSVRFpJpJVEfjxJhLaSSCuJtJJIK4m0kkgribSSSCuJtJJIK4m0kkgribSSSCuJtJJI
K4n8eJKI1koirSTSSiKtJNJKIq0k0koirSTSSiKtJNJKIq0k0koirSTSSiKtJPLjSSJ/gx9ex/rf
AKPxN8DI134MN4A9MhVh7Pfy4FaE84kIo3gi4vTQOtj6b8WeySGbdTATG4auGbBB4fmLZEWcSzWm
4ZdxnzJFDKEM45uRmPqzW+gvzV6JCVQkd6JMIHrD7+I+blQfBxovjS5jNoSYnVxcr+KtNf1A7lNI
RcSUKL6prJwBiS1/o9koa6PD5CD9cL8vaxz492Wx+Q17R2OUKPlyZj1ZwYZy2W3/HHMY5zO/CG4b
ZNg1m5waxhgp3rK/92C9NJxP0i/lBNNyKe5lmeIxr1n+Uv6ArvewSUn1C82HmWrtcFPNDjzVUB9m
fg47R/kSF7fKR64vtHdlVPiFULq6po7j4mW/oyiZ/7WvrE5vNB77IZTWETSM6w0Yh2akjTVYQVmw
64lw1SCBGgbjAY64HCSM648sP9CQrxoorW7Kv3L0Wd0WM4Ixi/zyicYGGETJ+FbLWJdLPjPXceka
rwbBaAcsjLcaiKZLTzB5sCXGyBcoNHn5CF1v8BFlVYO2/YTJZQPbekIPpSfAreqhBx5tRohCQsii
yQYujAiStC8jTXMCtjqn6U0MJYfiXL7vl2uJoI6bZWmmOFDCV7ceHtU713Jnn8+nY5FVjVjrdDp2
nPjZvXIy9W9ELtfNxgcpKhiJNj7K68F8OrsSSQiVYSZg5f30008vlWOKuWbrmKuuaROV2kxTTTqw
Vd0yqK5j5lgD+61y9CGdzKciP/pwcfr+zD16dbRubYkCfQXijEJdTp2qbNyE+VZew0b6TYzlEXEt
8mJ0G08Xu6uLAM0QOeZwSB2VEt1WqaUZKreYozqGxAHgMOZNaHZZ3cDlb+PCgdmEaz6bpVlRh4ZM
ezDkJlG5bRsq5VRTOSWaqiOmDRyNmgNr8AxodcNr6KhGt9CZpoElut2Uv6sj+hoegj893COvAShD
jo00glUTOVylJnZU20FcNbhNqeZoxKC0Cei65V6U+VMh8/bRBwG5AWqbI2ujTx3/mDNzC39gmDyK
1up5iMWvwJUacDtMp8RhQ1U3uatSgzDVQrAwtaHNbYtz4mioCXdlsRlv1VbHKTQSbuKERaWVe2Qd
564AuxTQUBuryBxAgNEQAmzYFBap5XDb4I6BzB1Ad0d20ViDivWIki2oBvFZFI23Q3oqbvzgvgkv
x7bmQmRV28RMpTqHLT4kruoywx44Juw0Xd8d2MruY+GtetSQE6JV2buOnBBO/Y0gW2eDKz8UafJR
PvDudJABUc2ULu5R0iMMnoerHgEfIAkgCLKuQvKFmA+HHJY3R6rhMn1oM5c6NgMfRuW5fXQajzPI
kUfu10IkC7CNQ/XG8ySciCNg3tCzyI/O/OBitKPzmoc88hs8jMSGh/48jNOeJa9/Hlg/W6eXk/nN
SaJ0iUF6mPcoWFhegpsDDTlDSEqqyRwK2Ri2ra3RISRByNLMMLHJ7MfdXIzU+yy+Fg9uVaM+NK+A
7ArAZr9O5aM8tHU2jmpbaHkzoNQk4DtktlDpUgbz1tPAJQNxl3LmqpCXdMjrFlVNDhleI65p2K6r
UU2uvnmeyVR5JB+vDcZ15JPNweBmtJkX05lIggnEtaf1iAyq/CsjCtNCLWOgatgcwuJ3TVUmcpXB
gqJYNxzdsbYjOlyu9vzoAgw7p83rv2pbhxs1wqUl3AdmOZavJPLl+aIzQGrCaTvAyFKHjgUHjO1q
qmVhS8U2zPrAclxs4VqgKkNHzSY3IGlNkMYbS/VcFMMRYOnJrlpPnnkO0anDYa8NCSQNihFWIcUR
1TINi2MD60injwavtNkcu7JpA2ewjRMK7Y10NxDj+c3ofjpOJzmkClymCSwjqA8hO+h4oBoOtVRA
jlQOkyzD6GBrYEBi1rfhXsLmBipeQ10foRl8vUdnHa7R4EMQbKxWJ52k2eg+CZSu1jMXETfLmEOO
Rg4BikFcHY5BhmDB6q6lwgkzNJk5RJrpPhpzuXeBZkodYSSyuzgQO5yoPbPC09xz1bzuaxA2+Vqd
pLAInQ9nI5k94mSDTmEMR5Mu6R4n9pA7morJANKdaw1Uyx1AqqDUAspiubb29OZ8t2NzVt1jONF2
Y1n3J0QN/kRsuXV/uXTfrVwgGpbHkq5TRkwdGJZjwmS5wFmYBXmGYRtR02aIG486ULL4k4tmD65E
ns6zoPLgYfR10JHeBJovJ2GRHII0ieKbxYvrVdoxzZ6GyjQJp6gJNNZVBzbEn0IqUvkQGerA1YmB
BuaQ2+5jyafB/gZMcxsm8IRyb0NnPwtu4YyFM2OBjaIeQz0ZYwdryNDhEGSagVSoSYlqUxepOsQY
DkWTIndQg7ZtrLM+JmsAwtDGBh3EpdQPs7XcQ5KVlAcLMUtYOnEd6mJbZRYBRkIYAUYyHKoOnGvw
cYhFHl+7ku49e4Nu49mRmLb6rXvP8Lb3FAVb3ufBlQjSLIyTG6VbJSg5gYtDVdMZg9hzlRE6gDLN
1VWTWJBtNa5bEGGoNOxHfV8bYJcntS5rTkBJ0+CEuVpLzruP1/czYJfLtWRwYFclv7L40HaGUBtB
fQlkxIAFb9tDWyXcgorfHQAx0Z+ctHdQlt/GQf6MTbsBZc0NjUXbbmgh2jjumtK5dQ0HNdXlw9Rg
Jc3inA9dBEUJp1Av0/IKQT5lSNdl7QzuaQc/NgBHcx9oWPc1bJgyTYQbrGhaviBcThtQSFqlgMHA
gsqb26rjoIHca1DLDDgc8UPXQiYcItxEj2Wnut01XBz727jgZiOLnydxAbGX1+8TWcPCMUb+j5dr
aY4bR9J3/Yo++gIt3o8jnt6Ods96x9s9e61iUbZ29HCoJEd7fv1mklUsgkRJNT2OubTVRQSQCSIz
vy8zwYGjMDSKDFFLSceBkxRwoQxidsiGE+ldzFnbpOwbgfs485k9PT6uNeAN/2+VXtDu958+IdSg
AzIeYIYpYLHguaSMEK+YBaYBVkSKzDkIFwMEglelhRnbcsKDWkLVgES22y7O+b7vXp5un7/fPAIj
GY7hEYsqxTiiBSGlpKwoAv/V6HUCCSVFErPNSkmdhCuvivzpsESZlmhrsB5XK9Q1cKq76RaH5ref
y0wVNqjCBuepgYB4S2hARuIDBULkEinOGCchvHDtL0Gp8/nbesxHXNXCNpDbdrNbHJr/ftk8Pf9j
TIPAIR/cjYY/3HDaMR54T1IUEJWLEcQzKggF7q+Mjk6p1z3pafK28KfnV7WUDa+57ZZ0cMBVcfP1
+QWFPwSw4eCbErRKSRKlgwKgBugT4mIkxvOUk3MssddPUdw8bc/t+BLZHSRoD56PqHXsGhxyC2/n
EOCeIMTcfQO+cHSUBvTiOgibNSPcoWdEBmR5ZJjSzfBLUpm7GibV01QSdJvGAem27Oiv3/9cFkjY
ehEDA7qqYgAkTKklnmZGADgqzbgq0sofhISnxWuRt41N63q+AML3J4Bp9RBcWGbcB6mITgDkhU6U
AIbRwHkl4N4A4DfpV4NLQ5id7NfC7DRd0cCnPr30z2nT3z8+fHx6fH7s8A7ByVnE7IoPARhSVBD5
igvEBQReMQJNFFllwS5xFu2VzrG91thaP2Mb+q1c4Mf+6ebx6X7z0PX+YXP3fX+7rzxhdgLCDUVt
YOeTAlMsnhMVgPpp7ZIx6hLlGsu0NWsMrNVq+cUeMxB12vL26ePd5vuBSWLOaYirTF0ziyDTGEzl
IxUUmB/OllimAjHcOGWSkdG6S9SqlzkDCqoxlTI3vOEpbyQdnPycuT31z3dTKkoopISDXSiVPPWO
cCrh7QgOWLl4QZJxRnrFwOWz1ynhbOJaMtlAgzdaLawDWyYH/iG4vWYGo8/wB24xujMJLi4YjKHJ
BEC7NIDhRuc8iyWXi8zisMQZGDA+rEXXuiX66oR0XX+HrWGnyDn7CX/B7AcLTnvw2CbLABAsJOIF
nJPgAUGywnQub0D2acozh2N6vtBhDcgMvdFHT/n+A9j8Z5jwfrO9vQMctMrbKK90BocO3NeBsw/J
EGC8FHPVcLwLvAQWf0ze5owsc30Ma3h++NEujtP/fowHYnO02CGD4+EsCycIAEtwsMBsiZfMECqZ
DE6lSBW/5CSdZm9rdXpeyQ62tZadU7s4Tz//1/QuH7E+oiB0adRg+AONFcALk0YSGbhHg4CzFIsj
wJyKhkPmxGWgslroDGyZD1ko4xrKKLVQBh3D0Ac6AmOJcRitm2nwoHwks1wFkTnJVGFeEPPOEOiI
gXghhdM80bdp+ofDEueD3HFErYTSLSX0Efq8PEwElbshc2Z0MUD2Ikvgijj4o0CpJokDMOY8gMNv
c9NposXyDeOU2iyRQ/lL/4w6/fQOtv1aXeMGHv7CUy1h2ZQglDrA5MIBprGJG7BXk3lizKU30Ng0
/5ndOz6+qsW0DdnBtdQQ7Ovd5hnD8JSGxMyMlllIauDEGsbhAGtNgDYDe2aAziWW/+SrFL+etBbL
sJZY6ihWt+m+9KecKAITgMye58GrSYCEgQOVz0BuoswMjqn0qR36ZlMtRGgcKol4urKMsaJwO5nG
tUT6q6nE6kbSUhkWGDB2KzD1AUIlbYjHZkRaICpzc1HMmy9yJvLNh9SKtHyt3C39Vfzy8jBc+Byl
QIfLBgsXQ/zgLkmgCQqLgGAzEtCfZRb1CWBLIbBsLkJIi2XOnNV6UK3OruGx5Kla1x8rqxPVUkMC
VIRAmYueMIAbcEB8JB5IA4GYoTRnwiqparK1mKmSQrU2VQ2Eb5EJ/LR52G0f/5hSOcJe8zGBHzLw
BFNgD5l12PWBRIEnUkoROYMbMuGi2tdpkTOYYnq+UKFvqHBI8NWE55hd/PnhuX8CFA6Hg7Nrc0iu
D3+hPk4kCfgfttRF2GFnCfDbCE5BUW3gmVLxUuKzXPF8RFiOrHS0tnFY3KrDZdfv//78+HU/qxu4
oc4//Iu4L4MTERJ5DnoX4w2cfg2ez0sbMjPBRXdZmXJY6CgzDjhXrVwNvKp1aLy8zc2yJWbzbZ6b
GyEU7Mk1H9AspwwoAjVE+0JBK4vgHHyUAiKnkxLRtmx6fvJ+fyufNR9RKbBtFHXMViyTQog60+1T
j9fJwCcxOiJzZof8CS9FGs4IFdjVY8GAvAdHywM1STsajTFvYtpp9vP9AtOQSoOONsJ+Z9ziFUyz
AiIc2qjgLQyGw6iiR1dAAYorhrZCEZGUKAi8AaBwMglVDI82v57hGuY+B/5+qRPQIOSmIXmvz0qO
dva3D/4v4EzH9C6l12J0qxTs3IDBExYT5vkLYCmlMfnBcoGYnFUUb+I+nPu8hePTWv6+sfM7Ro/J
tj/2d8/TJy3eMTFyt6ypitlin0bEbsCcACt4SQpnlkoZADIsAsB8nqt6LdcSYJlL+eNrd32w4F83
D5vP/X3/8DzPpninPFMR9i1ggUsxQTz2STFAglkk4O6Mv5EeX8x+Lju+GLbQZtfQRphjRL37x/0G
QOqxMofUJVEBOwm8ywCFFFiTsEyCz4/cABiAH80icTmfo15cNADo7mBFA5v8bcVlZYhaGQd8CTN/
wjNHrKWZZEDyPntsRjQ/isv+1pC5l40Nu7HLEtQqPfrTO3Etxpc/ZmBDDKCK9kThForgFbEUTmh0
GSBVFF6r8OczsIeHV7WU24bou+lddy9f96eKvqR2MPJsAT1b4KaaZQx/jpFgJQWxJRCICHxR6fp9
z+epBditKzGW7/pFael9/ziv4g97Ro0B1znk63gIxQYpgSxjoksKTmy0koDP9J5SGbkQl8Tj2TJn
KmOnAVe1xDcNNXq24E37Ay6bMnUD+ENqINA5GlFINBTIEwM46kyIhKqiInNKWxFfI0/VzLVo/Rqa
WtlNr/i2e0E6f6q1K8Gu1dA75r3xMVOs1nG0K0GslgniqdJBQlDlZdG2sZjrql5ybdlWYXLfvBJl
bsstmslQuMLmBfQ2jmsHVJ3kwAEnW+mJFUUQYMspA1k/tHFfhCtx/lciDTytdFBi3V+EOefhNb//
kB8+3z70M8+EdsKTAXeoMD0OsJAA7QDOocCWNQfW8UaJ7TXPdKqoHFc+toIe/7+S3TCxlt3spqzI
t19v96fC/ZCS4hDIDfbG2BQDETkAgk94MkV0QljAVd7/S+nN2dBvfQcTtIfV0tVa7UxLq2Vn5P/E
WNVkogfeCtBWSAoRQ4LncNJiD5hUEoBBclJecoRg2rbE8GAhZsPNWdoviMc0134sLA3lm6GZemyk
RtF1gm0HkF4s+l4rDEiNKX4s0Gmak7eXl5OG+VsahNnzShHb6I4EBrHKnuef3mkLfgT72OHfAZ6H
IhyQvgM0dDwSy8F4nQNAqwMrQZkf127l8xkGkmt9XEsfrDnWrPfu8WWXHrsp+gh+KAF4C4yXO6w4
QrgWRsP7CFyTGBU4T2aTTJex3OMKZ9zR8XEtfS9a0i9bB/fPm+epPIQZHDHSDB2T5BqgZgS5wb6d
IT6mjG0NNqniILz7V4POad6FWK4l1gTi0KuNd1BuHz7/9nx7d5KNjy3f2IPGNCC6hFeaCpfwl6Ck
AMCjFmDdKjlzZsqFWGueY53opyzi7Mt37xjHt8uCA59fEvZ3YIHHSHi7eB0nRaacoswwukA6p0mu
6nUaCGEnu6P7/eA/+vjLCdtyxDXFASf3GY4UNkELMH0wdrw4YVh2TuZiIvs3OeC5fFe1DruGYlu5
QHDA+Te7/nkgzvtuvJczWpLTeM1laEjxTBqfiR76OhL2fXOAH0kUD/iSmdzq62hkVWCpdFzqfHvK
alitVoNUwo9LOj9V2rGd/MPj589DufMUaZzXWcEhIXmos2mNJViAyvC7ypEFqf0/V/2frfNG7X82
cqFZwwx2N5vjSdzu7wFXHyEqIi4v4D0oHQH5afRxwJcDlm49gwOqM/M0hNoKZnNUa/d07bAcXSVJ
jp1kQC/HBIOB849V7cEoAhe2lEK8F3jDMAAspWAUHEJf4j4BhfYXNZG93jp2VYu43jMnNlP3433f
bWCdqQSh9RDyIBxbn1UmxisQVXqNJzrDPgLyBZyRWeb1xlUTVSJ0jcjrus4eRRiiIxxlIHkTXzPs
2H/pEjgy5woBZqGw/7IAaAbsAG9P+ORclnLxClfz1dJ0riHNbkl4dg/7/e7U5KSxIxxN3eWoPBwe
kmjCO6sQdBwcLjB1I2gSVqtoX4s8s3krsXZqzWfdToub/sBn73bd15d+RMvHGuC1HCiYo0IqIyMB
x84xi1GwORFvzuQYJYT5JMufvmdUpRHWUtRKaNlSYsmUIl5L/2uPXSP909TJckyJajEAXSm5cgDZ
qYeoJWDXMckVibQxKE69oe4yrtRY64z7aYystTO0od325pRyeLqDN3J4OVYc7zd4gCc5sUy8sgVU
KZTYbC1Q/qh9ktSFmJdJh9NMtQhdQ4S+l4sN/rB5eei+nPIOWsJBwZr9+MeQMfd+wANOMPDuGcix
pwBW8O5IAgQV0xtd9P8UpK3lOXPOqjFXtYJrAu5utksOkm73fx9vppdTomo4VQOaFw59sDDcMa0Z
wJEBoDkFEUFqorJKgcFbkuainovTYmevEByez1XZiEYY2Qi+LFNX3+R4x43l6H/GWnWUEEISNo7q
Y0SzlEgmi+KxuJz4a/5nPnMtGW9Ktl0crdsO8fx1uX3Y/fo99WNLyww1xKxNsQoChcf+MycwG+QJ
NaFgHd2rdFEpcD7/meM1G7FQpGspMpkp3vI85bGOV0U5l0Uo8DI6C4X+RuJNQyB6+NmFCEFGDqnY
9b6epqulaCRcNkBWjlKUx4fnv/afb/fPT6ceJyHHW0dZsmTjUPjHviCFt+gluA5jVIxUR234v+8+
RdX/uha71tqYhtaOr6vJd/3vH/3cTjGWDbmCMaYFDgxFFuw75XgpDMKZc4BBc8SOFF2cEOXCmvKw
1NmK8vC0VsI1LEHSbgrF4Pq6p+9fnx8nAxXTdRFljCvFg0EmrM6DfydDaVwziMMGKGs6gw+Ws1Yi
SdM403LTwvS/3+76R9xPi7sp1dhPaVOgBhhJcNzgBSRk/UISLXThQJmZY29nMIaZz0P34XEt9WbT
kHonD0nH8RMe/VO5e9w8z3KPOTChnDXI5rGBSBTimHAkYpOBLhniFv8hucdKgFMKsvq5Vmi3rvVu
lBSLQPSf/e39DpsL5pdeYJO1NrGQJJXEvjKDeAAONFPKsaC8U/mSA32YvK3d4eFVLd9NS+ibxtmZ
IQYs7Go+pO0c0BMPYUYJrFAEoC/4SlhkhmYedVL2X0QK8xG16KrhRNVmWVsfrXjuTRRwOIFdP+Mf
aAEmCoU90SZyIDQGnLxnQMCyldaAm6Va28v9yavupPYmqvENgY3ayun62WZ/x0+VKubGGACRCfwf
1cQobFOCyAkAzUA0BTYrKcqvFomkaqJahG3r2HZLWP5L/7Ttnx73x7IFimEMcD0KochzDnAJUDcJ
HMhg0I4nIFIRjPXVt3+ctL1hx6eVuEY23rqRy36eT1/7vvuC1zQ/PwxfrhsvC/Hrw13ZQ25GKSY4
z5zEoeSHn/DwnAE5Eho8n8oii4vSnM3lzhDx1tBaxcbnBjZ21Xq7Hya63n9/eP7SVzcL8IiLazYe
cfwDc48lGqB9ihQA8ZjyA/SClXjDsbEzBluC++GwYdT101rC9YZMg6qtsHzX2Ao1VfkW3317B7zw
eDvba5YNFZEYLKWNfVqDwiolxr1POrVLj/WclThONoK/k/J0/+n+8VuP3248YcjhfqBVQRWIqDED
7o2aE5sQpRu82quzVWcuLCznWwijWsIsm5rHW2HYmi2HvmxM4DjA2wxwImH4zR1REtJPoD0lAqvm
Vstc7J++ajY+W4i67jLdbMSU0P/jfu7luB4SYgb7zQSFbXIQDkXOilgL0TF5xoqSOktlFp0s92d8
HKC29fo7vWxlKNUNTzd+vgPxv3Q5w6Yw4gq2favEiJeWEZ5LBv7lAlevdy2/3kAW/6PdPgYibhty
ry4QfH26nffEXH/E/z/cjqRDkU0qNt5Xzs5x7ManVjIirAeqK4smUietgOgrmdQP9wKTOGfuPh0f
z1Xf7uy6Nxp+FMvG5L7DT9T9bfyAdqP9NOrIuC6U6FAQWXEHCCUYArwzAeqC6C4vogr1QmdzrLMx
tTp9Q52b3Vbq0QIet//XnXoVtEQrNcoh/kvI77DzXGbg9S4QXZTBFlRmTKwNYD7LVb3SOqR0DAu1
1UEaPo6KX1x6erz7NADd1R0yaw3XXGniDQPqJYDIe8yh++A5tU6x6C5KkayXau/petxVrcNNQzE2
eeQvI+Ylm/3DVAMTzh6vkpnEQxbg/rBPHQgZcEjvgFImT3NxSWB1pt7i9YS1PEw15OHTFabu/usU
rMY71zkK5wxJQWU0SPzuQwgA54TySvok4rISN81QL9w1NoKLfmUv+A2SX8aPBIzGMvyLb5bix+PA
tUUXPLY/ScBCNBNphk+wJOu8+3FZv0mQc6Z0eHxV69NSUi3bIt73D/34wZfN3SHXP51j6kY8BDzc
AhAAH65KQAiNjAvoi5NMCeECxJt4WW/Vaq1zPVargZVuxqypQGetOyYWvqVPH+s+llRyCpxRIl1C
Z04FBEgPWFazFLSXKor07+pjmYS7qsXfNHRy04eLuv3NrlXW8Zr7jN3OGemEYADgwHtj2yCgfxEy
9XHReTmbqZagQco7eMcLUv7rr/HTsSFFcDMkmUp0znKpCUA0/LyPTMRlMAqpRBH/T9yVLcltK9n3
/hfK2JdHrLYirLCuZDvu2wRrkzvc7rZ7kWf89ZMJ1kKAqOqa6w7Pi9UmGWCCBSTy5HIScJcN+ipQ
iGOf0W1wp5J2tEtwAxdV3/J/PGGI2vYnxXYp/6KzzLMoMQePOEJxXwNGZ7jDS1ZQxOJ4+ha8Agtg
cyX+qb7Aalz6COHi6qA/fx9/mxmKJeHZEAkaHX4c0NywVrLBiluJyV3UGB+NV40Kn43RvLtzSK42
p7STfTIi7SQ6MpE9KGwywHmSsGIcQbENAwB1QB5KOGlFi8ir0WpJtkvYsxGSNKt2zvmDqxeM7KLk
TrRCsH+MRGbDrCNWXzLYSNYSgLtg2JIQlCjFa3+HVmj+xE0t79Lk2WjWm0SJhUzGavmaBB3uEra+
4gqPIuHBTAUjg/JElJIWoIv8WxwezQzL+89Pr9y+qafRndsxag3T+x1Q2+N/nbjlChL02eRAOR9S
Ar3NI0zRevg9LCPcJkBe2uQzDuBmwFqcDuvBRptj2Prb/O+pzc8iyTx4JryEtQFqAA0g4uEEBKAD
a9lEFwPPr7DtXJ9kXstQy29YT352zM0v4b9TqZs92G8iGxocd1jUCtuOcDI4pKwRLMPHjWDkn/me
8xEbUXhHlHVb8vbd+4p+DX1KkuGOs9ZFx5kcsLAIOW0RWmdkhLKUhwgL+5U0jv8EYZ2kOeP5fd/z
oMK0tp25nurtP73/2OUqc0lykRzSChajWYPGhSWklZTUJgP4yr0lV9lMjFr83fKs2BhhuhxZ+M5C
VIUYke+JLflk+CYF1gaDrZg58mOVek+bhhwzMsRQmlh6dT5l7PMqpNy+qQVd+iQ2lm/mMcCP4+MT
AKN5BJCUBMcsuABLz8LiHzhAQRA4sYHC4iImAXiR8f8xBDiX+qaeXWe9WUsPYM39nKfPeNRSZqrK
FYJGEegQDdrq0dnBRqR2oCIRwGjcGPY3K/iqSdRy1FOwrDcFftgyd+P9l9uZmkUc7wHHCefANkjo
PVIaGdCzxCIoTWkgydvGQpmP0rxe9F6/OmZLfRs+fO7tWZFkZrBfAWdyZEECU8l70E2aRiaTo5FQ
97b8gjNBmimse1PYHNhfJhHe+VPGKsUJsOSNQ7ExTxa0qeKDV+UjigxohxiAqfVHrAeqZBi3nYW4
Yi1/+ffRfZzFjQpzcwmc2ikMHVz2Vlk5wGBYLQ4q0YDOGIi1cBnMvy5h2jz1BV5w5uiEO5XIK7Hq
iLxtzyV/97J9fnh4/mVSc2qv5tQOvyFVVpPo7eAJ+sIwiuq1BMBvNAE1R5KV5JX6y+P456owjw9U
0q87mS1wsQU22B+wwLDJaVkMFMCxgoK4IWVkRZNhMJnmITklI2aawqd/C/SCrd7OhU3vfm8mo3uT
aV0t93ueCkwnv316rvbNgbO18LVSzykFBK8zsuDLkvgZxWCtNz5ZwLrxqqrrPfHF587rGnrr+rF6
bmbpqd8cPOVoh05JCIAs35mjPcYO5likjOcgNeD2hJU1yLUmqR9U4FQnZ3jyTVxyOV4lzqaToLrZ
GH0MHIyPJzjGJG5KHaKy3ssptYgbaZCk3g9gEfJMmU0qtWGD0yD1y03Hqt6ydtF+2D6PmAZe8MuU
2Gupfsdx9RISRAD7ekiaoeqnoL8Elp5xS6zBYpEY386ndpDknCd1ulvNccuXQGYL526jCSsxph21
jy9QYoqWmf5Aa8pKbGoDR4uBhcC5ByTsFCxnUNzKYBqsM2835ZMsl4JRbXRhS5noTPvkpv00bm6R
jK3hEhQwL+M0G7LMFssZxeDxJGLGu8y9p/kVJtXruQRrCRrhx57wLVfyIdv8l9sDzyRmTBROJhm5
sRT52y1G1pCuDMkRBVjBmvrAgk5v4hHaS/Dd+8s56d+9r+fXyRPb0m2bkTCJF+b83oXTTBRyGvwD
Q68x56gzGsi4AbMI6NS2QxCORGuzkvpy4X7nLeeoaRYP1rPqUPhthV73mBcnbTIF8JkqBpx0TCcS
DeaiglordGxgBQ1MERq0t1rl1w24eFY5HO7e1NJ1RW4Puh8fX56e09fx7qXM2n0p9f97f3txjkVF
HQscDA0EWA77hiQw5zWW/qTAJHH+qrrEzovOFCp2nqymptZLvzBcXObM/YZMk+P99m4C+kXX2dIi
wKYQjMtDRLod+EEI2KIek6QpxwijsU6+xSaai3Dutzs9MZ/kjpjlJOFiGz7+AGjj8eFrlaqrMA2Q
iTjIYDDNUoKyEAqO8+BoIqAjNLkqPHIY+8yRtL/bSG07UtvtMq8Lw4Lj7X037sucYykLi6DeoFtY
DQa71pgQNNjlWerMr0zpOr7mbF7X8Yl6InYZrdpRy05tG1hzviQeAb9TMtgkYKMEUNGeEj0wzp1U
2jNQAG/WtaHjAt/RjgscLm4bOnRMRz3QCB2mUOjJqNdg/hl0H4K2pQEWjFVY/Q+2ICeeWG5eY+as
x62l69AR7JhatS0ljl+VCHGos1CWSpMycg9jswaCmQ+OsEFkDehcWEOFvihaRx6mOl+LrY4/8Phy
ygKmBpWGg12F+SJDFMjlQ5WDbWXJwCTAVw0IV2batIx46eX87gAxLF8Np3fzQ41PpzoBpQu1p+Qu
wOFBJOYUSJUGY+BnYsQpFpwmIl2sEDgOWEvTcZrCRdNLL8Cg49PT7USaeVA5ihZj2cEy8WrQWMvD
jU6DZ9jUx8Xso9SM5cu0AsvxL+QUVM81s+koIKFXJ2qJh/uvM/qQSd0QFbG2ynisOTZg8BpkbcZU
Kgkg1QcVWlKJ2Sg39as6y0qYo2fwrxPkKYgHfkAdNBY4Y+cLWFRFCoFFz6D8YqLONYvqrx7e2elO
bcRO82P5Scnj/hDubvHYPXiYpp4jjNCUFXavIvBiHrweHKAd9DGEbKWGdS/eqF/OQoh6Dh08AxfH
lumx6p8KiuJILuwCQG6rAMIGZN1hEhk+AcwKRRMPCitpLuqJauRaNNk5jbU6UZd//GlfWPZh+wiG
8ZLdNkhLsQ4FdgRBRzVGxLXhA2xlreAnCPD7X5WzcHzTNXGbvlj11Dp8Ozs9HutZwqf8+eX2eVuV
30YljGAegKKPsGYiCYARQSnRyGAjwSHtZLNs62FqCTpMhTs9tdAsdehwOo+P7u7LdlbPui9HTxqM
Au8cnFWFNFhJNE/tADvaU5mUDlz/U+XoSzHraa7HzjS3bY0B9px7OtAGlMjwhIn2PAQ+a8uI9nAu
KyQLUXEwGbnxYgxg1NpkE3sL07ViLzhPPHd8pJqq2Xa2i9mqlgRiu77FziTHYxaxkqHRRZIH5QGc
cyfMAH/4wVLtYOrWeXeZAGI+ZiPUEpruRtJCU7RjXm4P5KJ87xmxiSQb4MhXBl2ZGNBwmIdtFWMq
CkLBKLi2aP6n9+dx3E8VnN6NlHRkZrwDPGfe4xMUMBhGxZSw5LHGg2iwWShYpsTzaDVnwcrXue9e
8RtXj1TS9yqyd+tdW5F9e787mlriFB9miSrQihxOIyxtgpNosEHQgQqOcwBDg17sHnYathZq19F3
G20vVM28++HzvOSWlA1Z/i1l7FRLOK3B3tHYo41ZMFOVHZSKBrkepbkiAnm1z+wkyZk9+bkXLd71
fLF4sVO+18QW4SfBsIkoexOVDyWge3ghg8uwN50AiJAk81inDujybWKXnQeb+fR+RDNjm18cwNx4
nrN1yB2KIMIAUotgc9HgYG+bEDW3b0XJ11l2m94xuxnb9Mf36+rT66KE8J+SLcVjTqALlcQEcA07
2irvB1BAQUYCquK6/gTzd5wJBa3PfPed6hzVcHGxedYPI+bhm5J+jLK7QJLDrGOsoOCADeDEhlnI
aDxNxMj8WtUCDnlOAcGtRkzeE7Mtr7h7+HJ7/3SkKThqzQioRROkuqQ2TmEInzP2LaSF+R47Rl3z
ocv4r27puRRnjIvZE/U8deec3ekW8t8/PN/uZsXI2MR5il4BcDaEDJmzktEECFuCKecBtHGYtsxV
d5+Fhp2P28jVAfu7cZzRGo2r25MDZUJCjgESA/yjkZiOYEfGDCcXLJzMDDHeeLvgNTqOUr9+7Oy1
3YI99l8RG/ZMp/zETIFcLYQP3mCcXRJ4OdIOe+GIwV6V8RWy3v8kNeNf8UynqlhPaWm84NlqzhLi
lopFg6HhYyEJJZy803s4QsB8gXMUfYRIA+Pp4JGo0oBlLxwo85jI1VWT5TUXCifL/ZtKcrpaToeb
9hcqlcc/PjzcFXry/QaVaAkLUujJfUzwY2ENNhy98AsNHomvZQIU6AUz8RW/+nz8vvzzJ6oZCNWZ
gTSiE3z7cfvfz2jZiKmsb/oDo51wbDJ04BiF0TavYOeBwQtIyoNxw4mYuM4uWw44+Hm7DO9WYkvb
E3tsDYHvx/sv8+ZKel9toEvSVaQguU5iCFh4BiYPpt5j5NgESRhYa5aHN98oc5HOEY2cnqgmrZal
f5bok7Xw9McdIFN+onybOGV98DRrnQaGXWkm5gga5UAdRvYFGNOMN3nB84EqEXRv/47bdVtg/v64
2rHMFZeLlqYQN3lKjYkpwurWFDmmYKEk+OjIygFwhKoU3iTwdxThXDpibzeMy6RnuLhjp/4mf97e
z8g5SljMJ9gB1IGCxVbU3EmYUQiAUKIxWRnu1JkeafPRKjFWYlyKsdraLVuWlWPr4ypqohjStdrB
Gey0aRUc+gyjq8ox6xzoSuuu1oilr/J5hYi3K8HXyyY3cJEfkRLydC8zaEF3M8vgoAQUmjDVWgzG
SzIQ5KsKwZhkRPcDHoerhZCsI8Qp5vHt91OudWtZRxVjIFQMLKADESGb1XB4MpVB74PhpFJ+K8t6
JkEt+7qzxdfbFih/eLl7vn1+eFn/snCioZddlBBh+beE2rnNGHxSnCOndObYKIINhKWcfRaA7a7C
/BdeWnm228eqCW7WajnBzXrbycg/qtT8OX3d3j8/lUS8wuRf+qUc/kajSwCiixz9eFjCFiwfjNBo
/GgrHObcyDcErwd5zjy4v9tMe2FJAgJdUAZ8Gv8MMOTjuCf7KEyOYtKfhR0K/gv2pcwDcwqzPyiy
u1m0F0ikSoAp1GuLNp/dN+07vsHIIQr8zYdx/cPn0/2bWtZtZwLySDy6LgHgULHOwC+tjvVUSRur
hcFWrmDa8IDtCzjVpQ8DF4ierDxXdtCMXAlGl+TXcHFnOgvK/Ry+i1icpAuTjwTU8W5PZgEKnIHB
PiSrESkhYTEyoKH+1pinY7S61i1W3nIhCxtv1zNYtn8vXYsaE2zKIX/eH2olOXhmUs6bLUss4Qil
TAxLVzIsF++sGyhJcEQJxazVrzdbvnh8zp+oJsOXrL+WCtm26FqN619ffq+TEdWeX0mVxFbsWq4I
xs05nqrYZtFmDYeC5Y6DdU90vIpI2jdvms9iundTi2p68i+g6JTBuGiBRJXGU62YBQ5bvRM/GK7R
LIaTxLjEBwF2DgCJaKO46Pfrv6IW1mw6wp5Out/G9S/H3WgKWw5lKjgG5ldMgJo4AMLBGAOoyUaX
Ag+K+76xMhurkkGtlrYKVeuWMO75cTylsml2UtwkS4Ctg5eYUgTWLCgEb4cMR1NUIWpBL7rJZ8PW
Uq3pUiotWMfhjJTGBRzQKYVwUgiA1IMPYCTHjHWtjMKP59IgNdJBiCyp8Ff7yfEFF1zlePumlpN3
hN+MHdduCSN3ICXYn9lIAhufId1HxsgD/OID814oKwhPMb96IJbBzwtebteCb1Y9wVdnG4C+m2JR
SOhTqDX3/7vvI+Mtg7UZyZAix9x2TkAhgymrklQZjrsg8z/C0Tzda2a6Xs50Tdq+NF9vy87NsEin
XFV0WaFtxg/hVO4NWOduCAwhqI4c3TQBEKkNsEHBMBZXuegObzgzz/3dm1rajvJYU7U4OPH4dS9T
Ov+JLsw6QJMpKSw8wACXxyC1QOpgKbj3HrZ1vm6HHMa/lFmG9+fSM7ZsDAQXeRuF/Gl1+8fLPsmj
FFaXQg4sqnLorAhBgbnoExuMAgCnaSaaMg1H/lWZZYfRz3SY39+t5V66OuEilhlWch8aS/uX3Q5z
y2jp/2be7bWTAJvPEzwRMQgv8YC3zg9ZgxEDixPMwKuC8PVbzlGjzJ+p57LinbmszaGWKnxbWsXt
xlmKFtvTh1GnnIu4fGwKoPixvTUmNCflwPTRyTtN3mxvX6itrRM7FgJX8xV0CSyZUXK3rg6Vr/tS
YjM1gSu7hcMi0x67tLLowaRRAqxfnTACxTAuKEyQ/8R0v7Z1xKhi151Zmc01BD/FJ1t0giokU8gC
mnQetIHdxNGtYzDdGQB50ilH/mqC8HW+nY+1LAsmn2Z+28781q2P9tP2t4fn7c+32z9Pcaspf9hi
WmGwTjGF7ZhItOgcwLolGpCDCWm1YpDyqlzO5WvOJUq2z9WTWi/NbC6EWSaoFp6VPZMU4KypRXgS
RkapAOokzabZWOs9snKnxGIhw33N83mGNyXs793UktmeuMfUmF+3//Pbl2ORKZuotwzY4oKBoYrJ
kgFsMR8JNtSIVIAaDSn28eJ8rEaIsSfEsU/Ey6xdBkcRhKYuKgno2uAxEbAdkvMR/1dJx3xIPNeO
05deewzLV2xpF8HFtnAu5fffY4jsmLhetpQD/IDksgITNhg2OAhZD0mQGDCeJMRVyPQwdn+1He42
Um87UvNjDuLqL/TtnvoZlDLZmA3PHrZ8IGB3WuQrQ8ED6klsZwabpelnMB+lfj9fd95vbAfZF1P0
/Q/ocphMYewpjKmmYAKroOGglBGpjThDJ60fCBNG+aS0SOo6M/hcQvPsgVr4TWexrTbHPOF4O365
f8Ditw/bpyek4a6TGgG+lNyRZJLgCj5nDJiugyTz0g7SI0VklETnprfA5XEbEXvfd3Ns2vLHy/g4
3j/P+Py1OuA27TLsaEEHppWZGppaBgguGk4VBeyuRD+Htx20kWjpJRPFqN4tcnjPh9O0VIBuEhkU
VtCDzmNomeL/MrAuNBHsFdgwH/9C9m7H/QEWwnKnC4qsKdOe+Xj/pc23F0zAKiz0X+h11tgJjGJn
yihZwh7Q0b5Rvv3x5ZXIY8djI8b9R1+4I44JTrRg+ML4TokMFMmaNVKwBow3iwBYOVEANYklGsIV
jo6eaBvSEW3TlmFgquGXu4Mnv6D4g0vf28y0RTJVmrFAJg2WYOm+ZQFQl07hlULASy796V4jcGcB
jzuzaFB/sdtupoZITCGIMsCulw60Pxd2gJUbpYmUGU/+brfdqp39Fc83D9Wz7jgwBTJENhmJSMz/
K1gNpePW1KHX8HfoMcPDbv9nSbJRSXgGxhUiYw7KZEAaziErGjnGLAx7pffD/gUXGn41FopYL6sx
8WKbToddE9zj6vb58djpuYRaymojMYMlaP3AHEiLyH7wyNjPYWen7COY/pe3cjP6+cYNs4eaWYyd
WXDW46P+/OnjoctwiRuaTILUYFlgzQAX2C1do72VOAFcrfSVmaGHsS+EDeFuLTXnHaklO9MQah7t
5IAibY5yYMpITEcH6wzBFc9OKGMinPLx/9IE6nLjp0rqjV16isXmf3u7tt7EdSD8nl/hl5WodKgS
X5K4Uh+cCygLKUcl7J7zFNEm7aJyWUHQbv/9zjhAE0iA1VmdPFQlnthje2yPPeNvpoeDz1gD+H7c
DOd6F2E5FOPpMuZThFqEke0FQddye8yjsAyUUEeV9byWS738qdVQ/g68/mixLMEWbW2GL0PIU2nR
UAAT6LMGzYVHIAL2p5SBguRK7pk982oMzdahtk+tM36Khyd5LvKGs9nx++JptXex0KdnZciq3QW7
XqB6aGPvOoiiyDCqq+cIt8s9l4kenvB46trerxV1Bga+SlarVm6fqsuCcqHBE48MURMfBEKvUiWw
qf6vPJ3noMjIbmhiODAXkZswYpspuYIJSjiuH15th5r4Z6xQk2oUTeTzdAoXLDuAHHhDNT66ssAl
qPMUHcglsMkoGhHCAOYP6TvCEoLCdP0/XVn44M6o8386QgVnbK+MJVGvd3y7vqcCUBZBhDjGnBRW
AIsQ63WhixR8y0Oh/pQ29lG6UeePNzH9vD9Ue159f6+ieyNAUQkkb/q2GzAMhKajgIZo55eW6vq+
C9oOVTAo7BYLazXLGjeCn04yQmTHHqiz5VvNlleiP5aoOW5oUmkzE0Pzmujuy0E95HbXAnWM9czQ
Uf4fuaQcVXmoeQEv3+p1yk5dEIRtHpso8eATlJ080/rCAcO1EkoocOweRlGEzS0CG8LsoyTCwrgO
mi247V03hTYW1H4Ye0Jaq5x9ilaPIa6dkwBcy9ctfBuvsnx+FFhR+Rg/A+qlzBDUGMZgEgqZ33Ux
BHQoMC7BVSf7x2W0e7tVqeq1afAWEdPGpaIROJ2VgNF4GCGp5yLYBKwTHDpJwjLcRdg+hwdCKnUZ
gvISfFedxqhz/NJQjRN382g03urDZ9KRpVIsS4VYhZbl46kK10HYTRjZXhjCT9+1mGU6kknrAmjS
Luc2yKRdcp3rU+9zfHkwhb/9/IhTVY0AFpiuaQUIDac4yI8PM5KL7nG+UIErPI9asjnUwEeGR3w0
tZ4jj4TgIS9KK5XQsEaiVHM8L3C4VCC8sKdmAmTAxeldYUhCx4edqXKuBDZqN1HtEg0j/Fnk6+V0
TkCYZy97tWW8XSwg1zuolD+dzzdkAVtY8vROVsW3fE2+r1d4CzjfkGK6fs31dbni22yzT7jTjVFM
N2/py2qdfp9ld6T0Qi6veabP8LfI74hZfbnJCx1EePe+XvCl7M3/lj38qNQKWkCXhw4Es2XeWB2H
CvF7ZRpfYoJxvqrt+whUo+X8naDXGaasXsjBvnNHklUxnd9zUIDNmKzzzSzLl8U9E/RWxh3H+XRD
Nj8QNT9LV9siBd620JXzFfRint1b6IYVdyj7dGN8Xc+K6dM8h0yQgUPW1i3rkx+QWOTLe4xiDfSQ
66EoamNJtF7QvTnomPCqVhhk1JEuFEWMx7AfjR5I8u/fIWl5vkSPyUQNjfuPp410l2z4fYIuOChr
mwIRD5qILdexB0g60watc8+BdKPxVcsvNi20mhSV0CWQ6Y5qe2DrPzCCXTAUGOt4cFjCqRznzV3o
VaOyCJx9+MCIRrgpuvBYXAIDpT0vGl2idgfG5zH5HCXktQRah4Z4hmXtOFOqeW0m7ZToE3l2o3OU
Ngrr7tknEZD9aZbBzw2BpsH1oiI9N8ZAh1AkCt+Q0fI5b+c3VsPhyD9fLQqiz+M9aWeaLWbLm1Zq
RgdGeTJG+sPx8Fy+Atp2nCh/QPoT9Ri0UwobxpIxLkBiL/YYbG9jmBxSza1KwrOkLDa+5k8oCLFu
v/YmQAbSNFCJIpdaCxsrTbHy3iQaJtHDuLUBXOiCNI1i1Q8vZCuoJh1GD4MwALFpL59SbIE0TcJ/
kgusMg4TEpBOHiJ/FJxnATZ0A2Ohpy2Cm4Uzw8C6FbGxmwgW+QJPONtHOFTrN+atZJSoIbkoBLey
X5L+RUBYt5va0CmHzIHU7MMsa/wCUEsDBBQAAgAIABxfA0mNOmVnYAIAAKgEAABHABwAY29tcG9z
aXRpbmcvb3ZlcmZsb3cvb3ZlcmZsb3ctb3ZlcmxheS13aXRoLXRvdWNoLW5vLW92ZXJmbG93LXN0
ZGVyci50eHRVVAkAA3c+old3PqJXdXgLAAEE9QEAAAQUAAAAfVPbbpswGL7nKXxVkaoqGMIhaKqU
kaRLm8MUaHMxTZaxzWoVMDJOtL79TGgIk6JeWfb/Hfyfpkky36XL7QYspsvVfBaBEjUKk/d73szL
Wn2YI8N6FcWhZI01wwpb831i7Vn2zJWViIMkzHrCR5wQyWsVC8msN4ZrKymEeuUNV0Lek7o2IXRH
IAJHwSl4SuIoGgCiSLKGKe0EAQD2X2hPxpPcdm2wTxexxM2b4ZwDTkbzwPlCwh0gWXgNSTlNFJZq
jeU7r/5ozviTE1KX+tkn54dOI4pKDdoJoRqTikNWsLtTCrf9wSsFzJsR+OUGv0eG1wuNbTfMh0JE
FAUjalnWhdk/b2smseKi+lrWv/wvZyG9IntFcmQEZxqBrud7HW1OWfUYT4niR64+YlwUme62roqI
OylN1SUJL5Y2pHbHvc7bC/muGZOe4WE/ZJdPprxkuuyqPWacLrhkJkLxYneoVkJ04XPmegTsVibI
83ziBQF12BicwC+b1Xb7Ey0TFE9Xq+XmEW1fUpRu0RSly/V8d3r+Po2f0eJlE7cTjZAB4VCM5IEL
Bs4zcfI2oDNA5bbn0iuoxoDuAOaGvh0OYfow4HiICDIagmE8qRnhOScG9LpSBbkfuD4B8lClrFFm
o2gUIQSjKMMNJ3oRpR7Qb+QNyztwCbZ3pCTmqjnFHoZB3RhBsB70LgQeABFVo250Zf3e1cNjenbV
DgmTRybbX7Y7GPSwcU4dQA9lvWMVZTKVjJl6Mu9AK93p3rYtCy/pEEzB7D/GGvPqKmtyZhEY6kUt
Nc5w+u6H2HVyj0x0anpXjX9QSwMEFAACAAgAQl8DSQpJl8TnPQAAszABAF4AHABjb21wb3NpdGlu
Zy9vdmVyZmxvdy9wYWludC1uZWctei1vcmRlci1kZXNjZW5kYW50cy1pbnRvLXNjcm9sbGluZy1j
b250ZW50cy1sYXllci1jcmFzaC1sb2cudHh0VVQJAAO8PqJXkT6iV3V4CwABBPUBAAAEFAAAAOxd
a2/byJL9vPwV/LDIVR60+0k2BW8APjOe8WstOxPcwUCgyJZNRBI1JOXE99dvNSnLlEQ/lHjuzp3Q
CCyFTVafqu6uOnUkwGd5Fsui6OvrP/5iOj+Xs0TmF7mU+m/Copz+rp1F5fXmrfCz/zGbLKay2P94
enR5HOy/2V9/XjtM5KxMx6nM+w/Pon2UeZFms80JkOZlidQvbudyfeiTMA2T6b2TqExv5GtAl8M0
+tmGS2e35XU2q3zA4nftXBbzbFako8maueJa/40w9rt2WchcP/Q3UXCENc2PSrl/kU43gBCETQMJ
A1Ed4z434d8eYVw3kIWQdjrQ2zw7jmIdhj7pGO3BP673MAuxQOI1QJxnebn1FMaaM8tmt9NsUeiX
lw2MpidE4IS+YZOAG1bAfcOxMTECLwwxQoQE1NQ0TSHXnS/RZ6kP0lksdTfLyr5OBUJIL2SczZJC
07w8Kq5lol9c5zJKVnMgWK+0mEdlfK3/sZALiEGcTfei+Xwi96ZROjPK6gFNC77Gcl4C8vU1Cz55
Q9fxh47nBYOB3hscfhgEHz6+btyvFnq1cL8E5yfDw5OPztEhPOT75+qpqNTRV7T8GY2iZCTlWNM+
Huvn8gpMFPqJjHK4526srxnGe11TBofDi+DTxdbuXRqDOEVSRcK4vzCyiQrNbxBhgX75Xc+Nr/v5
l6/64Ph/vNNfWza+pjkQjzSOKncGcxnDro/1w9k4y6fVxb7mnTuDnw5PPugXweCiCuI8K9IynV3t
ZzcyH0+yL/tziGdpzOSV8S8jy+GAGBCYGI5KNCsLA8Yyo4jzbDKBpwxYt1Kq65PoVuZ71+V0Amtd
LQas2nI5+/1nLh+sc2Pk5+gmGsR5Oi+9LJd1wP5rtQIYEUQTRC3914uwmkh/q1NbwzvZwJKPxhbR
fx54/f5gkpUfU4hHlvf7uSxk2XsNRrElNLKzVSnarCZpMiijvDyO8s8Qv9o+RRrdzb5IRuZoaf8n
Gc37/SkYPIcjVfSSbAH55Z1+k6XJm9ULrJvee/Va/41av6tJmSAa23VSScW4OWkMu0DG5eF0Pumt
Lp/OZV5tt6cgYIK5xnfFkEiRtGBomb+ag2HN3G0Ka4S5yespAigeHzwnhiSflrdeNJmMovgzLGPm
1dPCNNUaUkuzdvQkljhB9TTtU/ya5Z/rDUKEJna0PhamkPdxUukXtl+pXvw0CdNc9oZDLzxfzI6y
rB6+W6lqe9hMs9emVBOF2QLSQJVfmlNa4/HY5paVEMn0yurlydHp6dnwcDD0nKMjSDjD08uL4cXp
0BleHB4H59Vl1/F+GYaXJ97F4enJcAizEqRhtOOk8diiesMVP6ucUWFDHNIB3s3eGHGatNgr1CJD
HcZkN3tUmEg07cFL5SlhGqY72rJGidCbllZZHizapobZFn3a+GluEjRCNjVjPV/MLmRR9ooSMvVw
iPv9UVSk8bAoc0hRB/F1lL/T7wfV/4dlHqVlUY29bw7C9s2gAmV5PaS/BwdnRflK7SmTcKJhviNE
K2LJHUSAM5A5FCrlfn3uKNWwuaNJc5wQPVl7ogfJ6Z2uMNeA39SngMOGtHaNaQy1b/2JY6hx7TNg
wjUsdpvBpAJqi6qbKgCwjeCgTtJRcjtJ9uBXOtIfeF5tIxFRMuaxDWsGZUghWNVr/GidVjMsB41p
NIuuZF7Va7he3BalnA4/y3wmJ+sQ1mfGEaFE/yxvgDIAe1ZHtKrXDdstHqzZEJQSU+rDu/uH0yvY
jbUDb3XYYHfekP7u8GybRXBWv0Di/aO6P5flIp+tAV1am9dzrplrWoOsRGiS1GEefvljBRHTFUT6
14fI/voQeX/11vwWtEwotIWcfoGUNizSq1k0WcMav327h9tPVtOWsClKiGgkw/I6LZZ7s98vJlLO
h8DFe81UmmezDGr9omYsB5NsdqWrX82cWo0d4Mk7wHT3M1lPrRbfkaESFFsWM6uC/yTi58BSgL7T
sw2fgHaTHXkxeMV4RPXRtKpDSxcasBazFBLbEMY+H6xuAkJepvHxopRf379ar3Tf5kSF3uY78msF
nsTJPXi1Hy9nZToJo0kh/+1evNNHWTapKzfekadXvlD73peaqxdxBKn/Sv6/rIhFd+wEwAkKHc+m
E7BD40Wu5J7BnTvVgiO2YwsA9m1E8b19p7idxRdR0YiEmrKm5XpvA8eb173X79WRVad1SQmX7YLJ
d+wXAIpAhL8IlGBW5rdnGdCd3veYq+gRwRtdyDMciRAjdSPT2BLDZVYbzvPs6+1BI+MtwOxBDQPm
/T7E774rgG9UCr3vwLComqGdiiVHHIrZ8sbhKEtuq1qJqzZoJ0tsnFj3llZk0TKrDmjHCi4TfdPQ
ff22+k2aeTK4PD/ystmsbq6Psij5FqLJWCKBIit+WFypbmXeRj+eYYiabLwypBjmZqV9TgsoR6zZ
AqoeJo2hK4ivz7IqHARvlrrnmIV+cLuzxNTCG5XnBTrL9fTvhSeyVPzuASpkERMOIdLf/raxnL16
PV/rw1wW2SKPpbqgpuz/rvY8dDPrOXoT9tYKRZYlbQJhOBnU+2k4VJ1RJSdgyniVk1/mDAn9xc6Q
rb/sGRJwhn4+vNCVZDRJi7J6I/Oljv4NpBj2PcR0rpLY9TC+UVTkmzixGOPY5s0Kns2SVK3n8CbK
00h9ElIRnQcowf3Vac0GqtRo7cx2obqJkVKK+/2zWno9ysp+fw7vvTtEkJFvKymzStF1k/6ufmYQ
Z3OZHEXTURIdKFqkQ75ectW2W+ok37hlm8IoKW44V2XyYHsQ1ilKboexisH38p9Gw1AzU4z5rnqz
ySw2ktvxU+/PZbGYlM+IbR246r7VdTcqZIPpHlSjR+D1+97q7V8ofP3+PybVCv+j97rmx38TfxA4
9L5l41d4X/3tXH31FzuSxNz1wxg4kXQs/wbrojRMoLp8Z/dJxGoy/ZD77Z5X8RZo10+FRiIiJKo/
UIFKe1dowbXFrK6yde/Fd+0CwfLIBPK1bbnxnx5s3/8eon4/qz7cyvIeNAz1SVUEje368ZCaE2jD
8J8ng5LCChExHKazm+yzHKqQDmvFbvgFeDNMeHgTmMNhDDn88Ofzf55QgIpxA52Hg5uAAr4gCG78
+enFsNLOd2zdKlAsXmvaxotZxRvv3h88J0rtn0c858n3d+2Z6mbXQg3+sI3Ppp7eo6MkxlEDzJ03
Bw9MslpPc+Njq6f5TSQjsazPW134qqXEXGx8fvW04RHiFNeGv5TjiwdtE2FXn2e9ULvKXq5d5S9L
tW2g2hAOHagObC450X+Sk3lHtTuq/UJUW/JxIv4dVLt9F9zXzDU9v/2W/2Rm/jd1v4XIP+nGqx89
YP/57QBkjdga/XjLWHUPO3+LTPIkjp/qHl4iUN/YbEgeywh/J753bV8/zKN0FubZdHAd5TLpbd9R
D/jqvuMskUte/Jwt8WKzNb8yxHftpiB0CacvAgbmF9je+Zt3EjEuv/mrmY/1eUBzd+2pAA2Gnqqm
TZV/6jOpUDUi0BMtudO770P7vmqCe3UXsGOTRJCVEIpWlKai1DWj9iapnC0bbMBct/DncnxW5gcb
/tyTwDp/Wrs3UFZiy7gNxhmk1H7/unpfc3wX+pTaW3P3fsqScSwenidJk+Pos1R9qXMTpRPF2u/F
C5nfHzmVCVZfl3hCHVj/ouGzQNrJ5ndDHlMIqgV4r+5RKsHBn+Leq6WK8+J2X9WdDq+6zh3DRJ/Q
K/4UxO0Cx58y1VOKCP/3KSLmn6WIWH+iIiJeTBGxX0wRIehlFRGMOkmkk0Q6SaSTRDpJpJNEOkmk
k0Q6SaSTRDpJpJNEOkmkk0Q6SaSTRH48SQR3kkgniXSSSCeJdJJIJ4l0kkgniXSSSCeJdJJIJ4l0
kkgniXSSSCeJ/HiSCOkkkU4S6SSRThLpJJFOEukkkU4S6SSRThLpJJFOEukkkU4S6SSRThL58SQR
2kkinSTSSSKdJNJJIp0k0kkinSTSSSKdJNJJIp0k0kkinSTSSSKdJPLjSSKsk0Q6SaSTRDpJpJNE
Okmkk0Q6SaSTRDpJpJNEOkmkk0Q6SaSTRDpJ5IeTRKBg51FxDfd8Sctr/ZMwl2KIrv5MstR7JjNG
afm6r+l6Hn3t66twotEoSkZSjmFg1BzA2ORjNmKANI8feiJZDSiglsVFjMdCTZKkzUfufmCgWA0Q
Vl9Ur2r2edMWH2NMx1H1ROsATKLnYmtkZCr5J7fXcZlM0GoSjB6AhfHWAGGm8gSThi0B+QbbFq0e
oesDJuxNXg2w7SeYUAN86wlceQKbvRl62OI0QRRORT6ebOBSg+oc5qRtTcCWdpRdpVADdO/ssl/t
JaIFeZ7lugeUqr5y/6SpXag/fHuymI5kXg9ipmmam86i/FY/nEZXslDbZvkY0P9IChUzQ29eHNkY
Aq2/9RfT+bmcJVCpcwkbD73WDygWzDWxMALbJQZ1OTNs6ruG6VjUNDH3HN99r+9/zCaLqSz2P54e
XR4H+2/2122tYYgtso0BLlYY4BT9KkcqeVzIohxcp9Pl0arQhMizw5B6BiWma1CHWYZwuGd4lsIB
4DAWbWgesrqBK97GlZijNlyL+TzLyyY0ZLt+KGxiCNe1DCooMwQlzDARZ77HqO07/jOgNQ2voZMS
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
jhLpKJGOEukokY4S+fEoEdxRIh0l0lEiHSXSUSIdJdJRIh0l0lEiHSXSUSIdJdJRIh0l0lEiHSXy
41EipKNEOkqko0Q6SqSjRDpKpKNEOkqko0Q6SqSjRDpKpKNEOkqko0Q6SuTHo0RoR4l0lEhHiXSU
SEeJdJRIR4l0lEhHiXSUSEeJdJRIR4l0lEhHiXSUyI9HibCOEukokY4S6SiRjhLpKJGOEukokY4S
6SiRjhLpKJGOEukokY4S6SiRH44SgYKdh8U13PMlLa/1T8JckiG6+jPJUu+ZzIjS8nVf0/U8/NrX
V+5EURQmkZRjWIiaCxiH4zGLGCDN44eeSFYLCqhlcQiusVBKkrT5yN0PLBSrBcrqi+pVaZ83ZfHQ
ktE4rJ5oXQAlei62ViJT0T+5vY7LZIJWSjB6ABbGWwuEmcoSTO5l2YxFIRIgTC3QtQWbY5HUC2z7
CSbUAt96wraUJRDsTddDiJsCUTgV+XiygQsjgtQ5zEnbnoAs7Si7SqEG6N7ZZb+KJYI0P8+zXPeg
p6ov3T9qahfqL9+eLKaRzOtFzDRNc9NZmN/qh9PwShYqbpaPQQ5h1QygG/raxcgGT+tvB4vp/FzO
EijVuYTIQ6/1A4oFc00sDN92iUFdzgybDlzDdCxqmph7zsB9r+9/zCaLqSz2P54eXR77+2/212Wt
YeAh3sYAFysMcIx+lZHKHheyKIfX6XR5tio0AfLsIKCeQYnpGtRhliEc7hmepXAAOIxFG5qHpG7g
MrdxmTZvw7WYz7O8bEJDtjsIhE0M4bqWQQVlhqCEGSb4d+Axag+cwTOgNQWvoRMo3kJnShoqdA9n
4J6J6Ft4CF728B55C0A58lzECDZs5AmD2tgzXA8JwxIupcxjxKK0Dei65L1xHk6l+iPB+x8lZAYo
NfvOxj1N/CIh2961YxO8u9ZegS9+Scs23B43KfF4YJi28A1qEW44CAKTBa5wHSGIx1Ab7lpiO956
rYkzEmOxhVMmKqOON3A+5GCfAhrqYgPZA3AwCsDBlkshSB1PuJbwLGQ/APRhzy4XG1Axo2O5CRUz
y4KDFG279EhehfFtG16BXeaDZw3XxtygpoAjHhDf8LnlDjwbTpppPuzYWu5j7q3v0GqEKqmbFMfR
PfK7iwRhm4CTIfahm6Gc7pE9BvgsJHwquG9A5Jpw8h1q2AJyACO+bbm+zyhT+BZFrg7Tvnq8oUyY
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
+b7i+C70KZW3Yvd+KiFJIh9eJ83S4+iT0n2pcxNlI83a78ULVdxfOZ0JVn/R8RV1YP1vDJ8E0k43
/3zlMYWg3IC3eo5WCQ7+EPdeLFWcZ7f7oup0eNl17hgm+hW94g9B3Cxw/CFLfU0R4X+eIiL+KEXE
+gMVEflsioj9bIoIQc+riGDUSiKtJNJKIq0k0koirSTSSiKtJNJKIq0k0koirSTSSiKtJNJKIq0k
8uNJIriVRFpJpJVEWkmklURaSaSVRFpJpJVEWkmklURaSaSVRFpJpJVEWknkx5NESCuJtJJIK4m0
kkgribSSSCuJtJJIK4m0kkgribSSSCuJtJJIK4m0ksiPJ4nQVhJpJZFWEmklkVYSaSWRVhJpJZFW
EmklkVYSaSWRVhJpJZFWEmklkR9PEmGtJNJKIq0k0koirSTSSiKtJNJKIq0k0koirSTSSiKtJNJK
Iq0k0koiP5wkAgW7iGbXMOdzNr82PkixFEMM/T85K6MrmBln85e9jmEU0ZeesQoniuMojZUawkBc
H8BY4CGLGSAtkoeeSFcDGqhlcZngodSLpFn9kbsXDMxWA5RVH+rfevVp3RYf8iQaRuUTjQOwiFHI
rZFYaPmnsNdxCSZpuQhGD8DCeGuAMKE9weTeVhzhiKPh8hG6OYAqwJhtP6GPYYH55gCGIb1INq2H
Ho64xIjCrSiGow1cGBGk72FBmvYEbHWO8qsMaoDhnV32yrOESScoirwwPOBU1Uf3j4rOhf7PeU8W
41gVy/ms0+m42SQqbo3DcXSlZvrcbLyQYYKR4cbLeO0vxtNzNUmhVBcKTt5PP/300jigWDJXYGkG
tktM6nJm2tR3TeFYVAjMPcd33xr77/PRYqxm++9Pjy6Pg/1X++vW7lCgL9CFWHGi98E0Nj6E/TZe
w0X6VcU6f1yo2bx/nY2Xt6uLAE2IPDsMqWdSIlyTOswypcM907M0DgCHsWxC85DVdVwJ3sYlY9SE
azGd5sW8Dg3Zrh9Km5jSdS2TSspMSQkzBeLM9xi1fcd/ArS64TV0EeFb6AjiVKN7OAd3BaKv4SH4
tYf3yGsAypHnIkawaSNPmtTGnul6SJqWdCllHiMWpU1A1y3vDYtorPR/gbv/XkFugGKz72zMqeOn
Q6q28DNlpcPhGsGCWPySzZtwe1xQ4vHQFLYMTGoRbjpwO00WutJ1pCQeQ024K4vNeKuxOk4Ro3gL
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
ubv2VIAGQ09V0abSP/W1WaAaEeiJVtzpzfehfVs2wf2qC9ixSQK6GBGK1pSmpNQVo3bHmZyuGmzA
XLXw5zI9WxQHDX/uSWCVP83dGygzsmTcBuMMUupgcF2+rzi+A31K5S3fvZ8y4zgWD6+TZMlx+Emq
vtS+CbOxYu334oUs7q+cygTrv+j4ijqw+TeGTwJpJc0/X3lMISg34K2ao1SCgz/EvRcrFefZ7b6o
Oh1Wdp07hol+Ra/4QxC3Cxx/yFJfU0TYn6eI8D9KETH/QEVEPJsiYj2bIkLQ8yoiGHWSSCeJdJJI
J4l0kkgniXSSSCeJdJJIJ4l0kkgniXSSSCeJdJJIJ4n8eJII7iSRThLpJJFOEukkkU4S6SSRThLp
JJFOEukkkU4S6SSRThLpJJFOEvnxJBHSSSKdJNJJIp0k0kkinSTSSSKdJNJJIp0k0kkinSTSSSKd
JNJJIp0k8uNJIrSTRDpJpJNEOkmkk0Q6SaSTRDpJpJNEOkmkk0Q6SaSTRDpJpJNEOknkx5NEjE4S
6SSRThLpJJFOEukkkU4S6SSRThLpJJFOEukkkU4S6SSRThLpJJEfThKBgl2E82uY8zlbXGsfBV+J
IZr6l5yl1ueGHmWLl4OephXhl4G2DieKojCJpExhIKoPYMxZakQGIC3ih55I1gMKqGkyEeNUqEWS
rP7I3QsG5usBSqoP1W+1+qxui6UIszQsn2gdgEW0QmyNRFzJP4W1iYsbgpaLYPQALIy3BojBlSeY
1GxxQhOUEl4+QjcHJNDMMlzY2H7CFGqAbT1BLeUJHPZ66OGI0whRuBVFOm7ggkGk7mFB2vYEbPWO
8qsMaoDmnl0OyrNEen5R5IXmAqWqPrl/kvcu1L/Ne7KcRLKoBrHR6/WcbBoWt9rhJLySc3VsGi+k
6WAkbby0195yMjuX0wQqdSHh4L179+6ldkCxMByOhe5bDtGpwwzdop6jc9uknGPm2p7zVtv/kI+X
Eznf/3B6dHns77/a37R2hwJ9gSYkMQ21c7rW+BC2W3sN9+gXGan0cSHni+F1Nlldrj4CNAFyrSCg
rk4Jd3RqG6YubObqrqlwADiMRRuah6w2cEXbuCQP23AtZ7O8WNShIcvxAmERXTiOqVNBDV1QYugc
McNzDWp5tvcEaHXDG+jSJN1CB6c5UegeTsF9juhreAh+7eE98hqAMuQ6yCBYt5ArdGphV3dcJHRT
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
crF+RJuXDGUbNEHZYjXbHp+/T5JnNH9ZJ91EI2RAOBQjReCCgfNUHL0N6AxQhe259AqqNaA7gLmh
b4dDmD4MOB4igpyGYBhPG0Z4wYkBvb5UNrED1ydA7uuMtcpsFY1jhGAc57jlRC+i1AP6jbxheQcu
we6OlMRctcfYwzCoGyMI1oPeh8ADIKJu1Y2urH929fCYnly1Q8rkgcnul90OBmfYuKAOoPuq2bKa
MplJxkw9mXegk+51b7uWhZd0CKZg+h9jhXl9lRWdWD4M9aJWGmc45+6H2HUKj0Q6Nb2rxj9QSwME
CgAAAAAAS1sDSQAAAAAAAAAAAAAAAA0AHABkaXNwbGF5bGlzdHMvVVQJAANNN6JXvz6iV3V4CwAB
BPUBAAAEFAAAAFBLAwQUAAIACABLWwNJo1f96FAAAACOAAAAMgAcAGRpc3BsYXlsaXN0cy9leHRl
bnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1zdGRlcnIudHh0VVQJAANNN6JXTTeiV3V4CwABBPUBAAAE
FAAAAHMvSizIyEwuds7PK0mtKLGySk8tcQ7x1dBUyCxWyMsvUahMLVFIzs8tSCzJTMpJVSjPLMlQ
KEpNzi9KycxLB8qAtRXrcbmjG1SMZhAxhgAAUEsDBBQAAgAIAEtbA0nylpXVRwAAAEkAAAApABwA
ZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LXN0ZGVyci50eHRVVAkAA003oldNN6JXdXgL
AAEE9QEAAAQUAAAAcy9KLMjITC52zs8rSa0osbJKTy1xDvHV0FTILFbIyy9RqEwtUUjOzy1ILMlM
yklVKM8syVAoSk3OL0rJzEsHyoC1FetxAQBQSwMEFAACAAgAQl8DSZ3ixibXQQAAPD8BACIAHABE
dW1wUmVuZGVyVHJlZS04NzM0OS1jcmFzaC1sb2cudHh0VVQJAAO8PqJXvD6iV3V4CwABBPUBAAAE
FAAAAOxda2/byJL9vPoV/HCRqzxo95tNwZsBn7me8WstOxPcQSBQZMsmIokaUnLi/fVbTcoyJdGO
lXhm504oBLGiblafqu6uOnVkIGd5Fqui6BnrL38xmZ2raaLyi1wp4zdpUWZ/7JxF8+vNqfDaf5+N
FxNV7L8/Pbo8DvZf7a8/3zlM1HSejlKV9x5epfNe5UWaTTcX+Omnnzpelijj4nam1gc/SGEKZnRP
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
t93V279Q+Hq9f47LHf5n92VF4f8m/iBw6G3DwS/xvvjbufriL3Ylidj1exi4kXSk/gb7oiV1YON8
Z/dJxCq+/5D7zZ6X8ZZo1y+EYqEIiarvUqDS3hVacG0xraps1R7yXRtVsDwSwA+3Ldf+0YXj+48B
6vWy8nutLO9CT1PdVM0h2a7fDOk1gTYM/n3Sn1PYISIHg3R6k31SAx3SQcVWBp+B2sOChzeBGAxi
yOGHP5//+4QCVIxr6Dwc3AQU8AVBcOPPTi80PwR2aO8OisVrfeVoMS2p7d37g6dEqX7wykZQB+xJ
T7696yB1w70Wav1FwMbXUl8/oxGOcVQDc+fNwQOLrPZTbHxj9XV+Y5NILuvzllCw6noxlxtfXT3B
MOMUV4Y/z0cXD9om+lsW+mwdNXu+jpo/bzdgA9WGcBhAdeBwqbHxLzWetVS7pdrPRLVHjCbyz6Da
zafgvmaufeXQPOU/mZn/Td1vIPJfdePFjx6w//x2ALJGbA1/vG0su4edf4FsxHAcf617eI5AfWOz
MWJIRfg78b1p+s3DPEqnYZ5N+tdRrpLu9oxqwNfzjrNELXnxU47Es61W+5pa8F27KQhdwumzgIH1
JbZ3/qW7mDGuvvm3Mh/r84Dm7tpTARoMPVVFm0r/9NdmoW5EoCdacqc334f2bdkEd6suYMcmCegi
JhStKE1JqStG7Y1TNV022IC5auHP1ehsnh9s+HNPAqv8ae3eQAlsq7gJxhmk1F7vunxfcXwX+pTK
W7F7PyVIHMuH10nS5Dj6pHRf6txE6Viz9nvxQuX3V05ngtVvdHxFHVj/HcMngbSTzV9feUwhKDfg
rZ6jVYKDP8S9F0sV59ntvqg6HV52nTuGiX5Fr/hDEDcLHH/IUl9TRPifp4iIP0oRsf5ARUQ+myJi
P5siQtDzKiIYtZJIK4m0kkgribSSSCuJtJJIK4m0kkgribSSSCuJtJJIK4m0kkgrifx4kghuJZFW
EmklkVYSaSWRVhJpJZFWEmklkVYSaSWRVhJpJZFWEmklkVYS+fEkEdJKIq0k0koirSTSSiKtJNJK
Iq0k0koirSTSSiKtJNJKIq0k0koirSTy40kitJVEWkmklURaSaSVRFpJpJVEWkmklURaSaSVRFpJ
pJVEWkmklURaSeTHk0RYK4m0kkgribSSSCuJtJJIK4m0kkgribSSSCuJtJJIK4m0kkgribSSyA8n
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
9fv/npQr/O/uy4of/0P8QeDQ24aNX+J98Y9z9cVf7EgSY79msTyRdCz/Aeui9Gqgunxv90nIKjJ9
n/vNnpfxFmjfXpAjSkhYfVABlXZVaMG1xayqslXvxffuAjliBpCvXcu1/+nC9v1XgPr9tPzQKM26
0DBUJ1URNLZvu6fmBNoQ/Od0WFBYISKCIJndpJ9loEIaVDJd8AV4M0x4dOMZQRBBDj/65eI/pxSg
YlxD52LvxqOAz/O8m8H87DIoVel9WzcFikUbTdt4MSt54+r94VOiVN94ZZelAvakJ9+u2jPVzW6E
GvxhW5/5POoPokaEwxqYlTeH90yyXk9j6+Ogx7teYoZiWZ93uvB1S4m52Ppc6AmGLU5xZfhLMb68
1zYRVvk50TO1q+z52lX+vFRbANWGcGhAdWBzyYn2s5zMW6rdUu1nodrqKxkiFv8Nqt28C+5q5oae
33zL35mZ/0PdbyDyj7rx4kcP2N+9HSizRmSOfrxlLLuHvb+dZcZGFD3WPTxHoL6x2TBjLkP8nfje
NH2tLwuTmZ+l0+F1mMm4u3tHNTBQ952ksVzy4qdsiWebrfYZsMH37aYgdDGnzwIG5hfY2vsbbdxi
XH7zVx4f6vOA5u7bUwEaDD1VRZtK/9RnUr5qRKAnWnKnN9+H9m3ZBHerLmDfJskaG4SiNaUpKXXF
qN1JImfLBhswVy38hRyfF9nhlj93JLDKn+beDRTAsGTUBOMcUmq/f12+rzi+A31K5a2xdz9ljc0o
EvfPEyfxSfhZqr7UvgmTiWLtd+KFzO6OnMoE669LPKIObH6B70kgrXj7uyEPKQTlArxV9yiV4PBP
ce/FUsV5drsvqk6Hl13nnmGij+gVfwriZoHjT5nqMUWE//cUEePPUkTMP1EREc+miFjPpogQ9LyK
iNUqIq0i0ioirSLSKiKtItIqIq0i0ioirSLSKiKtItIqIq0i0ioirSLywykiGLWSSCuJtJJIK4m0
kkgribSSSCuJtJJIK4m0kkgribSSSCuJtJJIK4n8eJIIbiWRVhJpJZFWEmklkVYSaSWRVhJpJZFW
EmklkVYSaSWRVhJpJZFWEvnxJBHSSiKtJNJKIq0k0koirSTSSiKtJNJKIq0k0koirSTSSiKtJNJK
Iq0k8uNJIrSVRFpJpJVEWkmklURaSaSVRFpJpJVEWkmklURaSaSVRFpJpJVEWknkx5NE/ga/u475
3wCj8TfAaG78Fm4EZ2Qq4yTs5dG1jBcTGY+TiUzS59bBNn8q9kRN2ayDWdg0DWbCAYXnz2Zr4lyq
MQ0/jPuYKWJKzU+uhnIazq/hfmX2Qk6gI7mRZQIxGn4W92GjxihiojS6ipkPMTs6u1zHmzX9Pu5j
SOWYa+PkqrJyAiS2/Ilms+yNnicHGc/387LmM/+8LBbfcHYYp0TLVysbqA42Vttu99eY4ySfh0V0
3SDDbtgU1DRHSAtW9wd31kvD+ST9Ui4wLbfiXpYpHoma5S/l7+cGd4eUVD/Q/DxLzZ5vqfkzLzX0
h1mYw8nRviTFtfZRGEvtXRsWYSG1rsH0UVK87Hc0LQu/9rV19UajURiPpBzDwKg+gAkbj9mIwQ7K
ovueiNcDCqhpchHhsVCTxEn9kdULBvL1AF0qF+qvmn1et8WRaY3GYflE4wBMomViZ2RkqC2fWZu4
DCZoOQlG98DCeGeAMEN5gknN1siyOBG8jAqmWwN4FOJygO0+wYUa4DtPAF41STKvhx54NFynkBCy
8WQLF/SvSNG+jDStCdjqHKdXCbQcmnv+vl/uJUh4XpalmeZCC19dunvU6Fyqk326mI5ktryfdTod
J5mF2a12NA2vZK72zdYLaToYGW+9tNeDxXR+IWcxdIaZhJ33008/vdQOKRbMMbDQPcshOnU40y06
cHTDNqlhYO7aA+etdvAhnSymMj/4cHb8/sQ7eHWwaW2FAn3FaMylVEuna1sXYb2113CQfpMjVSIu
ZV4Mr5Pp8nR1EaDxkWv5PnV1SgxHpzYzdWFzV3dNhQPAYSya0NxndRPXmO7iMiRpwrWYz9OsqEND
ljPwhUV04TimTgVluqCE6QbibOAyag3swROg1Q1voBM83EaHkRRCobuf8ndhN76Gh+BPD/fIawDK
kesgRrBuIVfo1MKu7rhI6KZwKGUuIyalTUA3LffGWTiVKm8ffJCQG6C3ObC37qnhxyQ20Q5+GoWw
9Tb6eYjFr8CVGnC73KDE5b5uWMLTqUm4biPYmMx3hGMLQVyGmnBXFpvxVmN1nNxibAeniA1DnZFN
nPcF2KOAhjpYR9YAAox8CLDpUNiktiscU7gmsu4Ben9kl4N1qJKxaAeqNEeAdLQb0mN5FUa3TXgF
dpgHkdUdC3OdGgKOuE883eOmM3AtOGmGcX9gK7sPhbe6o4acmJBUtpGri2IryOEiTtKerd7/PLB/
to/PJ4uro5nWJSbpYdGjYGH1FhwZMOT6SMDO5i6FXAWb2mHUhxQBOYybFra4ylXDsngfHCejDBLl
gfe1kLMl4uVMvc/ya3EAdBtGivygmvVueA2kN1rM4om8u/MkjM6Gu/d1Kh9VSTMii9R8X1/koUXA
dzj3sdalnPZIj4FLJhIeFdzT4dQakPVsqlsC8h8jnmU6nscoU2uzyDOVSA7U47XJhAEd/vZkcHGM
t7JGOpezaAJx7bEeUUFVf1VEgYhR2xzoDFs+bA3P0lWa0zl3ofobpmu49m5E/dVeyA/OwLB73Lw7
qrFNuONGuLSEe8e7Rkqwz1fZ1+CA1IJaNMDI1n3XhvTreEy3bWzr2IFVH9iuh21cC1Rl6KDZ5BYk
1gRptLVVT2XhDwFLT93KeqoiuMSgrvCF7hM4UkCWsA4JgOi2ZdoCm9hABn0weKXN5tiVQ1s4o12c
0IZuJYOBHC2uhrfTUTrJtS7kO3gC/gW4hg/ExcAD3XSprQNypAtYZBVGF9sDE9KWsQv3PEtugKjW
UNdnaAZfv6OzCdds8CGKtnarm07SbAittdZlPWsZcauMOWQw5BIowMQzoEhwBBvW8Gwd8q9vcctH
zPIejLk6u0DCVJc9lNlNEsl7nKg9s8bTfOd6eNPXKG7yteRiaqu7H06GKnsksy2ygTEkbkORIUEc
X7hMx2QA6c6zB7rtDSBVUGpDQbc9hz1+ON/dczir2xPI9/dj2fQnRg3+AKlaHt1fzr13axcIw+CA
bRiUE8sA/uFasFgeVHRuQ57h2EHUcjgS5oMOlBz36KzZgwuZp4ssqjy4m30T9NhoAi1Wi7BMDlE6
GydXy49112nHsnoMlWmSG74FJM/TBw7En0Iq0oWPTH3gGcREA8sXjvdQ8mmwvwXT2oVJVJ83KmGG
WXSd3EioGUtsFPU46qkYu5gh04AiyJmJdEoR0R3qId2AGENRtCjyBjVou8Y6m3PyBiAcbR3QQVIK
4bBaqzMEa14VFmKVsAziudTDjs5tAhyJcAJ01Pd1F+oavFxik4f3riJDTz6gu3juSUw79214D1x5
13tqrZfBfffx8nYue/ZqGUwBxKSkJrbwHdcH0g2NC9RxE/aK4/iOToSNoKwOoKYbj/r7Dvq96yTK
n7Dft6BsuMH4eNcNFqOtStGUCe1LqHHUUA9Tk5cMRQjhewjYrqDQiNHyHYJUxJFhqKYM3GPPnnEB
R/M9MLDpa9ywZEzGW4RiWn7ytFo2YF+0Oj2DgQ0tnXB010UDtU2BJA8EVEffs5EF+VdY6KGDXbe7
gUvgcBcXXGwkwItZUkDs1fv3M9UcQQVQh0n9Uf0GJHzOoPM0PR+yD4Zy53gm0ZltuZ5niAEXj9S8
leV7Yroa3vSANKROwY2tfu7dcKiqNCpJZVmhTZ/YCA49Yy6keiD9ugOnSPeZ5znUch3IoQ+iBYvN
OGFgEyFvYBMiGm3t81xGiywpbscpkPlyG65oHOeYqEJLGfSE2Oc6/AuHFwqr7vgDV3c94XHOjP8j
5lqa5LaR9L1/xR51QS/ejyOeHoXlGa219sxto4rFlnq3X1HdUtjz6zeTrGIRJKq7dqzwntQqIoBM
EJn5fZkJJuHKqyJ/OixRpiXaGqzH1Qp1DYjnbrrFofnlfZmpwgZV8DBLrQG7e0toQDDvAwUu4RIp
zhgnwTNz7S8BePP523rMR1zVwjZAz3azWxya//i62b/8c+TXcMgHd6PhDzecdoyF3pMUBQS0YgTx
jApCgVYpo6NT6nVPepq8Lfzp+VUtZcNrbrslkxogSdw8vXxF4UdwOkJTU4JWKUmidACarQC4QeyM
xHiecnKOJfb6KYqb/fbcji9B0UGC9uD5iFrHrkG/trubY4DbQ4i5+wZQ++goDejFdRA2a0a4Q8+I
5MHyyDBXmOGXpDJ3NcKop6kk6DaNA9Jt2dFf//C+LECk9SIGBkxPxQAgkgLp9zQzAphLacZVkVZ+
JxA5LV6LvG1sWodpwwpD3p+wmdVDcGGZcR+kIjoBBhY6UeI510AXJUDGALgx6VeDS0OYnezXwuw0
XTGofZ++9i9p098/PnzcP748dticfnIWMbviQwByERVEvuICMP9gYZcjMCyRVRbsEmfRXukcUWqN
rfUztqHfygV+7Pc3j/v7zUPX+4fN3e/Pt8+VJ8xOQLihqA3sfFJgisVzogKwJq1dMkZdolxjmbZm
jYG1Wi2/2Itl0tHf7j/ebX4/kDBM1wxxlalrZhFkGoMZbGRRAhOP2RLLVCCGG6dMMjJad4la9TJn
QEE1plLmhjc85Y2kg5Ofk559/3I3ZXGEQjY12IVSyVPvCKcS3o7ggJWLFyQZZ6RXDFw+e51NzSau
JZMNNHij1cI6sBfv9uEzyMTtNTMYfYY/cIvRnUlwccFgDE0mANqlAQw3OudZLLlcZBaHJc7AgPFh
LbrWLdFXJ6Tr+jvsOTpFztlP+AsmDlhw2oPHNlkGgGAhES/gnAQPCJIVpnN5A7JPU545HNPzuQ6G
NTwl/LgsYfzjYzwQgeMJH5IFHt69cIIAEAOHJDUcc8kMoZLJ4FSKVPFLdv40e1v20/NKdk7XFNwA
H1jsP569oYdtxF4SXT0eIKbBSPnIl7gCBs5JpgqzNpgVBF9KDLgkKZzmib7NBD8cljjvR48jaiWU
bimhj9H168PEgbgb8hpGFwN8IrIEp53DkQ+UapI4YC/OA/iUNv2ZJlosvwbkRmqzDE7lr/0L6gQE
mtNrdY0bePgLD4KEZVMCb+0A9gkHYdMmboiC08sTYy69EfCn+c/s3vHxVS2mbchu6CLKP91tXtDT
T0kiJP9aZiGpceDBGAenoTUBZgYEjQEAhFMdqXyVRdaT1mIZ1hJLHcXqNt2X/pSxwtgHqMzzbIhz
gECFDhzYYgb8HGVmcEylT23vOptqIULjUEmEbJVljPne28k0riUyLE0l5p6TlsqwwIAUWoHsGoRK
2hCPjVS0gOPn5iK3Ol/kjHOdD6kVabknuVsWpeKXrw/DZbVRCvRRbLBwMWRluUsSkKjCEg3YjASA
YZlFfQLYUggsm4uC8GKZM2e1HlSrs2t4LHmqpfTHuteE5tWQzBQhUOaiJwwiGhwQH4kHXErAzSrN
mbBKqhrPL2aqpFCtTVUDp1gkmz5tHnbbx9+mbIGw13xMr4YMUNQU2ENmHVasEYtyIK6liJzBDZlw
UWXitMiZsDU9X6jQN1Q45JBqTH1MYL1/eOn3APTgcHB2bQ6pz+Ev1MeJJAFiwpa6CDvsLAEKFcEp
KKoNPFMqXoqtlyuejwjLkZWO1jYOi3N2Qcx3/fP/vDw+Pc+yum6owg7/IrTI4ESERCiN3sV4A6df
g+fz0obMTHDRXVZEGhY6yowDztWSVgOvah0aL28ztrzME23f5umfEXXAnlzzATBxygCFUkO0LxS0
soj/wEcp4Ao6KRFty6bnJ+/Xt1Im8xGVAttGyt1sxTLvgLWcdLvv8SoM+CRGR/DH7EDReSnScEao
wI4ECwbkPThaHqhJ2tFojHmzUjTNfr6aOw2pNOhoI+x3xi1ewTTr9fu/DS0g8BYGw2FU0aMroA5w
HkNboYhIShQE3gCwBJmEKoZHm19Pogxzn0mL/O3HOscJQm4akvf6rORoZ3//4P8KznTMIFJ6LUa3
SsHODRg8EOqEqeQCWEpp5NcsF4jJWUXxJu7Duc9bOD6t5e8bO79j9JjP+e357mW6jv+OiZEeZE1V
zBar6BE7mXICrOAlKZxZKmUAyLAIAPN5ruq1XEuAJV3/7am7PljwT5uHzef+vn94mRN275RnKsK+
BayhKCaIL8USBkgwiwT0kPE3MrCL2c8lYBfDFtrsGtoIc4yod/+83wBIPRZ/kMomKmAngaqYCI4D
096WSfD5kRsAA/CjWeTG5nPUi4sGAN0drAiTUx9+WVWIZYhaGQf0DpNLwjNHrKWZZEDyPntspDLf
p0I8rV7J3MvGht3YZZVjlYED5n0txpc/JvlCDKCK9kThForgFdBuOKHRZYBUUXjd6uy5NMl3eHhV
S7ltiL6b3nX39en5VG+V1A5Gni2gZ1sc0Sxj+HOMBCspiC2BQETgi0rX73s+Ty3Abp3st3zXL6oX
P/SP8xrrsGfUGHCdQ0qIh1BskJKkhLkUKTix0UoCPtN7SmXkQlwSj2fLnCm+nAZc1RLfNNTo2YI3
PR9w2ZQMGsAfUgOBztGIQqKhQJ4YwFFnQiRUFRWZU9qK+Bp5qmauRevX0NTKbnrFt91XpPOncq4S
7FoNnT3eGx8zxYIQR7sSxGqZIJ4qHSQEVV4WRfXFXFf1kmvLtgrzx+aVKHNbbtFMhtoIRBlMLTDH
tQOqTnLggJOt9MSKIgiw5ZSBrB9aUC/ClTj/K5EGnlY6GCbWOpjdlFn49tPt86m+ygaiBMHQYPXf
phiIyAFQcMK3K6ITwgI28f4PZaFmQ7/1HUzQHlZLV2u1My2tlr1f/xljlTqPHrgfwEMg/eB1JVif
kxa7XKSSEFyTk/KS1wDTtiWGB5WYttE2BeB1lRvM//ZOWzjC2P4J/w7IMBThgG8cUInjkVgO58YB
4446sBKU+X59GD6fAb+51se19BkbseeE6+7x6y49dpPjE/yQ4PQWyBZ3WE+BSCGMNiQErkmMCuyW
2STTZQTruMIZSzg+rqXvRUv6ZU/R88vmZUp+Y/JAjAhXxyQ58GwSQW4wC2eIjylj0dYmVRxEFv+q
vzvNuxDLtcSa8AOG+rF1+/bh8y8vt3cn2fjYC6o97KoGMJHwJkDhEv4SlBTAFtQColjlBc5MuRBr
DbGtE/2UwJp9MOod4/h2WXBK0JKweo3payPh7WIXe4pMOUWZYXQRZE+TXNXrNILTTnZHr/XBf/Tx
xxOs4hhSiwM66DMcKeyOFDoFsGzAooDus3MyFxPZn+S35vJd1TrsGopt5QI8AN3c7PqXgbM9d2M7
+2hJTmN3+FBu90wan4keqtYJG0KBCpMkigdow0xuVa0bhB6WSselzhffV8NqtRp8Bn5cMsmpjoh9
ph8eP38eijknB+28zgoOCcneQZzUGgtMgNLgd5UjC1L7/1ttc7bOG5XN2ciFZg0z2N1sjidx+3wP
kO6IjjDYewHvQekIoEOjjwOqFrAw5RkcUJ2ZpyHUVjCbo1q7p2uH5eiKnx/7ZIDZjNzWwPnHmt1g
FIELW4DTei/wYk4ARETBKHjyNnGfgL35i1pkXm+MuapFXO+ZE5upt+u+7zawzpT91noIeTQn67PK
xHgFokqv8URn2EcAXRCeM8u83rhqokqErls7Vdftluh29/D8vDs1TWhszkTjcjkqD6+LJJrwchW4
eQevE4zLCJqE1Sra13z9bN5KrJ1e96w7BGOLAIpXD3/usYDb76ei8jF1pMUAZqTkygEsox5crACB
MRkQibQxKE69oe4yTNlY64ytNEbW2nXrTmPX93Kh3YfN14fuy4kcaSmvlUbFhj+GtJ73Q+RwApix
yIDgPYWwhu3HCWJtTCJ8P/BTy3OGU1dj5lpvRMNKN4IvC1DVTeF33FiOh22sQkUJFpqw60gfHYYF
DsNkUTwWlxN/7bDNZ64l411LspujHeKllBOxO95s4VwWoeA46SwUHiyJFyMAflInXcyAmofcxFqc
03S1FII2pDATAymPDy8/959vn1/2v58yXnJsks6SJaDnWAnD2rLCK3GywCYZFSPVURv+5/WwVj1H
a7FrrY1paO34urxy1//60ZdThgVc98AEhn8xxcIBN8mCvT4ce9gTIBoHkTFHLNHqApysXFhkGZY6
W2IZntZKuMbRlrS76Q+5FjCzbv/708vjdK7F1KKrjHGleDjHCctVPgEaxFqRZkACDADpdMaHLmet
RJKmcablpoU0fr3d9Y+4nxZ3U6qxh8WmQA3gpOC4waZv5CJCEi104QDkmWNv86ph5vOAYnhcS71b
1wo2SopFFecv/e39DotT875ckElrEwtJwFKxLwF4h7Lw/plSjgXlncqXvP/D5G2xDw+vavluWkLf
NLZ65syxMKAxhkbtAGN4cGZKYIYrAAZxomBe3dAMJDYp+wed+HxELbpq+By1WdZmxkM/Nz4FQExg
1Xj8Aw+MiUJh25aJHFCJAZ/oGaCobKU14JWo1vZy83vV+mrjU9vWmemWWOHHfr/t94/Px5wTymwM
oCUKbhOIIcAXgAIkcIBTQTueABjFHF5nQsdJ29Ien1biGtnYciOXxdhPT33fAYroHj8/DJ9MGZuJ
+fXhGsqB3SjFBOeZkzjka4WxoAuzpAgNVqqyyOKiREFzuTNQtjW0VrFxk29j6bIP4XmY6Pr594eX
L33VeYjnS1yz8XzhH8jeSzQlWUUKgBskzRBpsYxiOHblxGBLcN89xI26flpLuN6QaVC1FZbvGluh
phTt4oMj7wCsHi8+ec0yMJRIDOZBxyL7oLBKiXHvk07tvHE9ZyWOk41A5aQ89UffP37r8aNBJ7wz
3B+wKqgC3j9mS0TUnNiEQMzg1R+drTrT0LicbyGMagmz7Egbu8YhPilsuGFDy7YLRTHANIThZW9R
gHd4pRkpEaA+t1rmYv/lVvTx2ULUdYvQZiOmlNhv93f8VEzheqCUBpsFgAYRZHoQkLIi1kJoAi7J
ipI6S2UWZcjZNFf1UmuattnpZR2qVDdA3HgzFrGqdDnDpjDiCvbsqcSIl5YRnksGiO0CV6+3nL1e
/Y//3q79g4jbhtyrhsmn/e28oHn9Ef9/uD1Bh/YMqdh4nyk7x6WRhFrJiLCeAQcomkidtAICpGRS
390LTOKc6Y0+Pp6rvt3ZdWMb/CiWXWV9h99G+fv45cZG71DUkXFdKNGhIKzhDuBBMMQEnwDyQGiV
F8HaeqGzWYrZmFqdvqHOzW4r9WgBj9v/7k6FJi3RSo1yCL4SchFsG5QZqJsLRBdlsH+IGRNrA5jP
clWvtA4pHaP94iANX+XCjxnsH+8+DR9vWfWYW2u45koTbxjQBOEtuo5IfPCcWqdYdBe14a6Xau/p
etxVrcNNQzE2eeQvI+Akm+eHKYssnD22mpvEQxbg/rDJEMgD8B3vgP4kT3NxSWB+s97i9YS1PEw1
5OF6SmffP03BaryTlaNwzpAUVEaDxHuhIRBPhfJK+iTiMpc9zVAv3DU2gh/y6HN7weu9P46XCEdj
Gf7FN0vxqyXg2qILHmvXQMg5zUSa4XZzss6775cNmQQ5Z0qHx1e1Pi0l1bIe90P/0I93qTd3n14e
95vPUyc5p27EQ8AZLQAB8OGqAN6mEukOcAcnmRLCBYg38bLC+GqtcwXy1cBKN2PW1ejOWnckwd/S
p491ATWVnIC1A/N1CZ05FRAgPWBZzVLQXqoo0p9VQJ2Eq3SyDT7awQ4v+OhPP8VPeB7FUMMzQzqi
ROcsl5oAQMJ76zIRl+FISiWKUGCc0VzEh3DuM54FnlTSbtyaWsCPuo279ycEXyNvOiCH4V9MqwSe
FLYvUE8ZWhXQU472NRSDE15dY9/j1t+KVlzIPqod2G7W2ST4cXv0Xk+b+xlMG3rFLFXgT+HlgN8E
WlEs3odRWNNn1oZkg1440Nkci7UbIWq7O5VND30crNEjwmUJ4C4pAW+e8T4XUlIXiRIGcL+WXjlZ
S7GYrZakX5OOnVR0cWrnN/Lx9ALEHVzM6dJ/5t4q/GRPMQneeOKeBOcokE2AlTRGLYe+/z9y6X8+
4qqWdw04doa3lBjan0aoOOwmxdSsAh6vhcZAIAOARAjxTGSqtXJAHNQfumG70HBY/7x6w+OrWo2m
bnbqzXq8fwLOtP+v00dTBh4Wii2RCUFyBq8pEqjoArwPx6lwGXiPseVMqnAxYS1O407iztipCPRD
+cf4dfdVf14MXAYFZwPcAMIPGiD+AM2As2yTT1GUN+7CX96fV8tQy295S34+tTUORYnTLQF3RE+y
WBa98HgfCMyOCko8XiiXvMDmJoDYZ/ZzPuNCFNEQpVveFvjL++q7IpjRURwtzjmfvOCKYE82fsoM
iW3B7zU4JmKCg/1GGfJf4Tcnac4kPd+3koegVt/Q9WaCij+//9j8kojPSsjs8Xs5A2Q14HHhCBmt
FHPZArvx3/NLIjMxavFv1rFiZ2X7E2645vAZCWRo4vDFJjHCzqx9FhxMsQj8esVwVcZlUlLB+9uM
ZZ7f1GeY+7wLGR5f1YKuMwI7J3bzatHHzf4ZaMm8VkSHBp0ihQSc5eDwEwFEDATOnDA4XNRmoA4q
/T8Wi+ZSX9XaNc6bc+xIlfyvZdzGyUvZ8UKTlCzJyEiyiJSTd8SlZEB9mSkwJGEt/4OXHyolajlq
FRxvqSCOJnO3efh8O3OzyKIDsCjpPWCDjLkbbfDDl0Vh/7hhLNIc3AKhzGdZLC9by2+Phyb+EH/6
1LJZmVXhYK/A8gR+owCgUgjgmwxLXGXPEmX++379ZybI//J2Jc1x3Mj6zl/By0TIh9LDvjhCB2xl
a8Yce7T4xTs5it3VUoco0iab8vLrJxPVS6EK3Ww/M6yDTRZAIFEFJHL9crKERW0Jy11u9kDCS3+I
uKK4AJa8cUg2xnkBN1W88Sq/RNGCrkEMKInlSywHKmi4FnOr1vK6nzJ5f/PYb+7uNh8HnqG2PEOt
kCCqrCbR28YTNOtYA4dQS9BdjSbAM0iykjyRB7If/1g2yL5DQf2i4oeHh1MtAWusZJ1msL/l2x5U
MkGB3JBaBACRoTEtbZvklIwYdkTIswCAYLmMY+63m58ni9G1xUytBrfbfFmMLVw/bIpNuEP2yqhe
1HNKQRnVLSKJyhwFFEVjrTc+WeJCPCv7a5uA+7Yy3QQEsexWrG1ZCQ9aLo3eG527+4MywSQKiDpE
Zb2XGGEOrN1Ig9ihvgF5hreU2aTS1OR8GKSc3FRkwp5Nd8lVv+kwCC9L30NYlaX6JcftQkgQAaTD
JmmGjIvC6RMYc84tsQZDdWN8PnvMjpJjVrihtVhjz+dieA+3xiTIsCBj2MJb2zQlJh/r4QeUBawE
rY4AYzQSZBvuQY9zCvYPsB1lMCTKmedb8oGWU46MqWW6p3P8Vnx4kNu65RqBPiY4NQLWZZxmTStb
i3kMovHIR5nxruXeg+qcngmnpqRgQnxXI36KsLmL9fu43mEYoatbZXCOyI2lCKtp0SuDUBgIvCNA
htPUBxZ0ehZ7xpaCb1+fjgj89nW5vko8TE/7qTd7IC+MYRczXobIWen4A7rtYttG3aJ4hwewFQEN
orYJwpFobaukPp2xV5nlWE76rGO5qgo8TC/0oobqM3CTwfnLVBY/pGM6kWgamSSwtQz1AXd4wxSh
QXurVfu0+BGPModda0GyWsxNf/BwHkDzGaF+utv+ZtDlMkOwGd7UphCMa5uIyehANWiXrcfoPMrR
hWOsk8+x08YkHFvgocd4kSti5ouEh1P/3BUIlPd3X/pxDLLCmCAmYiODwZgrCSdKKNO44GgicJA0
Ocv+vBv7CN/etk6othWqbT+PWkG/S7e+rTrWmHMstcKi3mbQ8qcag4jbJgQdGPqoWn5mwMp+mqNR
K/se5ULs3B2wopYdIGfZhAknHkFFo6SxSYCyGYCPeUp0wzh3UmnP4JQ8G+Jsxcq5ohUrJzzsJ3iU
GJu2S7LfLSGDd1Cvg9QGLUTAkmiADWMV5sZx0MWIJ5abp6CRynFL6irJeiumrqdwuPu3SoTYYeAq
S6VJLYK/IdAsQdeyI6wRrQYFTFhDhT5JWoUepipvi13vP3D3eAgJpAaZhoNThQ75JgrMdKfKwbGy
oPxJ0FA0KDGypRO428daAOCK07lws4IrbvKhuodDrK3SGVtJcheAwxKJTlupUmMMfCZGnGLBaSLS
ySjb/YAlNRW7GDw0Nf8tenUeHtbX65scrD+wHEWzROlgm3jVaIzg5kanxjMEJHex9VFqxtrT0EPz
8U84bYt+k9VUGJDQ14fEy7vbL6Pk2oHdEBUJa4HJYFqUAanQIGwexqpIUJ18UGGacjka5aKcqrKt
hNkbf/446AVZLYAPqIPGHCzh86bKVAjMywLmFxN1brKp/qgpBStdCZReab4P4c5BnVdDqdC9EWHA
S2aEplYh8j6BiXnwunGgEqDmG1orNex78UxY3zMiyjVUhH542E1xkIrKSMAo9uhuLoAiaJVuUsCc
dCYR/yr5RiiaeFAYjX6STxQjl6RVUrZXuttHgIc37dvH9aYv0miiEkYwDyqHB0UVrocA2gacXBoZ
7Da4yZycfNtymJKCCtgNlh/d55PBFdbdu5sP/SgvZZtWljTcnN45YOiYlIRJPSYF28C291QmpQPX
f1da2ZzMcpmLrrLMfhpmjEUlHnbpf9lDNkjX23xC32rLiPZweSnMlVWxMS3Cq8QYQPKzySb2HPJd
kYV4HLtk36VYqukrEp7p1TSZs1+sET95fxeh1G1odJG0jfKg5nEnTAM/+AYUfAdLt86704mc4zEn
RM2VnFVHpkoOXvaP6x0+Fd/q2DaRZAPci8qgFQoNuw6jQa1iTEVBKNyc5ya/vX99XCN4Xyhmq46S
Cs2MV1SYkeHvIC8bdCdhYEryGOZNNFzsFMQ34nm0mrNg5dPwKU+Y/IouBfW1PK/VYjXN81rfrvby
iDj4yViiKgjPgWVjMgCw68YGQRsqOK4BbmN6sjzAYdiSqFWF3y21PRE4//L7t+OEKJIPZP4/7oxI
tYQrDYQCjUUYmAVZTtlGqWgQLkiaMzwxZ1tfDpQcOZNva16zVc2qhw8rCS8THwt8EszQEPlsIvOh
BHgPz3giLZxNJ0COTpJ5qUUAFex5fDiVjpP11D6iUQdYl5nXmBvQ3lvrEH4KJW0D6kwEwYQGB2fb
hKi5fS5Ul8q2W9au2WU3DcJ6vShevc5MCP+Xo0Z4bBPwQiUxDFXDibbK+wYYUJCRAKs4D0V1PMcR
K/7iyHtfqcpVDQ9nh2dx12E0sMlBkEi7CyQ5jH3EOG4OAjTc2LAKGY0Hzd3I9qnYaRzyGAOCpgmZ
vEbmNMj75u7D+vZhn8G555oRRHtNEC2J2jgYtH3bYmESuJtahQEoZ73oPP6TR3pMxRHhYtSjXKeu
3LMgU0zUrdu7zXo1St/DGmaD4wG0S0NI03KWIztADZUgynnQbDgsW7YFBvmMw47HndBV0YhXXTeC
J+iu1wcrw6AuOAbqCigJGtGlCZZcaeHmgo3TMkOMN97O8An2o5TTd5WztpoBkP0nIqz4cMsPSbuY
c0144w36GyWByRG5zgtHDBajiU/gvf1/XNT/iUfw9GO5pLnwgnerOYqplpOWDHr19uHslHDyUm9j
aAiIL3CPoiEN07k9bTxiHRmQ7IUDZh4TOTtxKk9zIncqt18UlNPr+XK4mX6hnKv37u7uJiNcbg+o
RElYkIxw6WOCj4VZi3D1whdqPGInygSqkhfMxCcstOPx6/SPexQrEKqyAmlExY3zrv9tg5KNGJKL
hh/QbwbXJkMrh1Hot/EKTh4IvKBJeRBuOBEDZslpyQEHPy6XYWtBtrQ1srupIPBdd/thDAGvtzHP
OgefRAqU6ySagOkvIPJgADAsAW5RSRhIa7aW//UXD8qYpGNp4IcexaLVPAHJEn2QFh5+uQHNlB+g
WwZYMh88bbVODROY75NzrWmUDXXolBUgTDM+iY8cD1SQoGvnt+sX0xzT1/vdjsl2uF20NBmAwVNq
TEwRdremiBUBGyXBS1e6NaCOUJXCs7iQ9iQcC8uqnYZuHvwJD1fsAJH96/p2lM6eHSw+wQmgDhgs
1prjDovkhgAaSjSmVYY7daSSw3i0goxr0c3JuO5tz+aZpVjbrHAtKIaIX7ZxBusBWQWXPkM/nXLM
Oge80rqzOWIunHacIWJzQfhijpMOD/leU0Kox3kkIfBuZhlclKCFYm1XIRrjJWkIomCEYEwyovoC
98OVREhWIeLgGPjmuyHmdCpZRxVjIFQ0LKCVDVU2q+HyZKoFvg+Ck3oCXfRPSNYjCkraF5Ujvuin
ivLV481mvbl7XHycgWmgKVpkP1r+f3bactuih0ZxjrCELUesYdYQltrWtwJ0u7N0/hOTFubfabdi
gcuFmi9wuegrkcl7ltq+TV+wwGoOSMpgsBlye/czCl0CNLrI0Y6HiTTB8sYIjcKPtsJh9IZ8RuV1
R8+RjtvWybJnkiRooLPE5TfdrwGGvO+2tWUzIpMY+KfNaZEW5UvZNswpjCOgiBljUV4gkSoBolCt
eMN4df8znWNav3bfflHS2lcWIPcAYovsJQ0FTgN8aUV3SA1JG6uFwYJTWKI1IAIupzpD+XKB2pOV
x8KvJyMXhNE5fiI8XJnKhnI/hm8jJmnojH0hQet4OUCAcGDgDAT2JlmNmhLi9SUDEg3wb40RH0ar
c81ieZYT0ajYXK5gXt8xA99PRLAhlnazvdRykORIpByXhJMYyh5yugyG8LewXbyzrqEkwRUlFLNW
P10S7uT1Oe5RLIbP0fssFXJa5eG6W3x6/LmMI1NbRBKV8xCwtqIi6FzmeKtiMRjbargULHccpHui
41k4in4y03gVQ9tFSaqp0T9TRYfgsxmKPlUab7UsFjhpPCe+MVyjWAw3iXGJNwLkHFAkoo3ipN2v
PkVJrFlWiD3cdJ+7xcf9aTQZMIMyFRwD8Ssm0Jo4KISNMQa0JhtdCjwo7uvCymisggZ1PZdVqFpM
kYk2990hKEqzA+MmrQS1tfESg1NAmgWG4G3TwtUUVYha0JNm8tGwJVULOqdKC1YxOCM0YVYO6BCM
NjAE0NSDDyAkxxaz6xiFj+dSIzUmpYtWUuHPtpPjBCdM5dh8UdLJK8Qvu4ppN/taKyolyJ+tkQQO
PkPQgRY9D/DFG+a9UFYQnmL75IWYBz9OeG4uCV9e1wi/Plqm6OXgi0JYkYw6tv11C0XuLYO9GUmT
IsdiGpwAQwZRViWpWrjugmz/FqzFoW2y0sV8pQsyhTb/ss4nt4VNOkQ9oskKZTO+ywHi3oB07prA
UAXVkaOZJoBGagMcUBCMxVkmut0MR9a5bb0oqa0wjwVVs4sTr1/3OERijyp5OtAmU1IgpWMhHufR
kysQAlAK7r2HY92ed0J2458Kv8L2MfWMzbHl4SGfeiHfX69/edxGQuQE0xzQjsklDo0VIWCdcJ9Y
YxQocJq2RFOm4co/K/xqN/qROpjb1pLuuakTHmK6VUH3rvydf1ytMACL5hIi5uWWOwmQ+TzBG5Fg
nXO84K3zTatBiIHNCWLgWemx5SzHABrGfYq1CDpXtJhRcrUomOyXbYqhGepq5N3D4aVrj4WvWPRw
xSsB0qBO6JFh6CcTJshnO9onUgy/TPMLkeUsKqsyy3NgN7KNMp8RlaFfEEcu6bbRBnYXRzOHwUBS
UFCTTm3kT4Zenmfr+KGkZYavMVlfX1nfYmqzfNN/vtv0P677Xw9+nCGL3mIsWrBOMYUI9yRaVJYx
BYMGREZBsJsYpDwrAHA+zbHoumm/clGLudjJhTDzqMaMfrDFdwG9Yyjsl4SRUSoQ/bF0cl6NtT4X
+k2JRaKBnT1lCTyCZhC2bRclZbZG7j5U5FP/++cP++QzNgDiGJBNBQPBDSPsQsBi1ASBoiMVwFZC
inX9aTxWQcQ1m28Efs33gVjXf6Dt7oA7m9PBYmt462ELBwJyhUVUHJCG4PqCc48VD+DjT3Bnx6OU
8/NFZX5jK5pbFjVef48q5SDqYNkxjLcDEUcFDYxQRgTQ4AyNcB7LARvlk9IiqfPEnGNRnaMOJfHL
rkL8ch8sGdfdh9s7zEu56h8egMc8lJFdIJ7m2IBkkuAKXmcMGI6B+KrSNtIjEFmURLcTGN/T405I
rL3f5R5c+5fH7r673axvD3K52snl2rWwQwVtmFZmqHlkGUjo0XCqKOhmStQDGaeDTiiaW0FEFppW
s0DG4+4SLRVIr4lg5Vz46AJjGJPAX1lSGGPJnhALx+OfCGGsqLdw480lXEEl2Z2ZH24/TIOOBROw
CzPIDFoVNRY6oFi8JkqWsExctM8UdLyfvCC5q2jkotu+9Jm6uQ9goVlHy9CxlMhAEb5SI9BfQH+i
CKALJVAmMUGXhnCGIlsjbUkqpC2nsegYSvbhZmepzVrazmTrbcu0Rcg+2mKWQAL1EVNULQsgVesU
nkgZOmWyHdomBFc2cLcysxqWJwtytdQQiS7iKAOceulA6eXCNrBzozSRMuPJXy3IVVS8PKP/pFO5
6oqBSiAO2STiDAsifIJbMFdGGIp4Gf4SLSIoEW1/zEEUKgnPQFhAzYcDM2kQ7K1pFY0cbdKGPYG8
vJ3gRGGGyY0rFvO8LXw4DZeK64dP7v56vbnfF4PLpvS820hsQbKxvmEOqEXNrfGIYczhZKfWRxBl
Tx/lyehHQPDLTpNVdJVVcFaDHH375oddIbLsFzItCVJrUKax3rjAgooa5YfECehNSp8Z+bcb+4Rb
CFpLqjmvUC3ZEeD+sTeLK+dsG2XDlIEXTUUEPUEhaqETypgIt3z8M2D9pwH6C6qXdm4JFMtub9i6
yjCRhxxSkaViiuW2QY7kgSGgF5xsH2NDTcs9g2tggPQY3efFKOX8c/gkK3rZ1wpPltVVeTZlSU22
yTptdC26IhuNkFcc6yd5LU0jvOGyRUXYu7MrTj5dY3XWrVhWr+ZSp2RCZqSrib3+fYD3mpn9gEKX
fxqMmALkAdskgtUPDAJ9YIEKYoWDcy61Celsc/37cMJY/35cawfpnHNCyZf7rGL/nXs7iewWFqRi
hnG2FsjkDG2tKcIxtEFLKiUDrvc3RXYfqLso6Z9vdCn4vlTsu9dtO01nbV0EmQu2kMASO5JiDXHe
NvCJHPytSNI9l1BzmP2ipE/UiF7s8CwWdz//PoZiRTyLAfWXBGUix7oPuehRQneopa4JwYDQwBwc
CnXEETUesqBGzkvLw8PlNFBvffupcHkMYGEDyIJJhFnFSUMlxyqjIG85IVRDQarhLUnahWdJeHx9
e6TyNTSUa1rOPbVSkaknB+1DIDP0y3zt7gH3RvVWolYtFo0BHRFxsID7OIvAB1h31kShfEvONVbN
Jjpus5p1LRan5tDCWExOz6pI3H54hL+9ulv2N5M6Mi4g0jisy5EE0gDnCUu5h8ZgsbUkEUT6LAPo
dI7jQUHjXuVqKk512VWviirKLR/QPVGnt8wbzO6Ge0LAR7JwmzWI8qRFlNa5pxHLnkJ7KftclBSv
KsuYReW+/v7t4/2qW8Aus4NsaQe50iVKAxonRC53SOBk+5Tg12Aop0RbbukTsCDbkY+BgmybS6rn
Qbr4cO8x/PTboQDGuCJHJIbQiEhCTsD+CQ5LhTs4JtJFI71n1NZxoQ8DTuiovT1tJ5vg3/1mMObL
DNwxlKdl3kctrIPNC6opl7AHDLJ3ZwlorAEUPKfPhO44bsnfNl5cpN+29bFhM69XO7Hl7ePnzzDq
17Co0N3cPFx+Bk3w8vr3y7vNx/7+8uf7O8wo7B8uN939hz5nFW0+rh92DV/nl7HpHj79tLq7/+nn
9fLryyFYc0gZ+2kB/930X1+S8cOHfpNrpm2flxM/NTz5a8PDL6NVwRvI86GfdX3bV5cDsiX7c3Ne
/Hh1iQVExu/3DfT6/vbm90sMzsGWu9XlPjzp68t3d5vu5pUQ4qW9urzvH9bL/nbzisPv7OqF1v/4
6vLhV4Q4Xv5097j5CWh7hE95cwdfsV++gmvwpbl6wfg/vrr43/v1pru+6WEQJGA/NH3Jv7n8FRo3
/e0ral+SqxcURt1PxTjM/IKVE70i/3pB4FExGQz0whqY6vLiTfrm9ff/vnz3fz+kyyP/fnz95t17
993Fq8O/Y123zRfhm0uMVMC99rDB7OlaZ1Dq1b+w6zr7OU7923d9yHB8w188HOmLXeMWjh4OMBrV
HvNRmf6BMPAOL0ac/eQ/8a+LocT20/+g6z/fXv7z9bvLDwN+LZC8gAtoSinLBNS7vhhyzvvlV9jV
WAVdd3+4a7qEXdotl/DrwyWs97+VnT8PgjAQxfd+io6SGCIoIOMFCCGlkEiNbo1/GBxgUb+/dyBG
h9K4kl/I67t3l7ZLabJ/1dlhYnh8iAN94XV/MZm8FUxCWdbJ/LJ8L3Q3ckIXp2t36x0jvfYFaxQk
gud72KXm3wah60nWPDAwNmNRQCSxN/UgAVQ2g0bYd+zQnqlkcjDFuC6fBGidggKbgNgNCC0k5JmF
DXz0VeuyqESWYoHNvk4CVHZUlhIgGhO6r4qkTucl4CFJsG4YBZw24GaS3jeV7N1cXdvR5dtsvP+Y
BapWUFpbxnPjfESXHGP1vP+EfAz3B13lOLnYC1BLAwQKAAAAAABaWwNJAAAAAAAAAAAAAAAACAAc
AGVkaXRpbmcvVVQJAANsN6JXvz6iV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAABoWwNJAAAAAAAA
AAAAAAAAEwAcAGVkaXRpbmcvcGFzdGVib2FyZC9VVAkAA4Q3ole/PqJXdXgLAAEE9QEAAAQUAAAA
UEsDBBQAAgAIAFpbA0l+qfEg6QAAAIIBAAAwABwAZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktcmVz
b2x2ZXMtdXJscy1zdGRlcnIudHh0VVQJAANsN6JXbDeiV3V4CwABBPUBAAAEFAAAAHWPQUvDQBCF
7/0Vc5JEpONBL0sJFG0uFpWkNOfJ7iQupJmwOxH6701sRBF6nPe+92ZmVxRvhYGcfMcOVICC/fCf
DHGsA0cZg2VoJEAzAQYRj9KNJ474TEq4q0qsuH7xins6y6gHjhqRnVfftzhQVK6FgsOfrohU83ro
29XVpvIbnKcnCYydkOOAy11oG9xzS/Y8+duLtrbDkDw+3KdgICqpt1Bw865hs3QY8z+SwVXLGBuY
lBMrfVSoDrkxpYbpH7i5+43lgU48KxfsyFblz8JXcQy32QxEdcY0Y2/VS7+pRTpIlnSapasvUEsD
BBQAAgAIAGhbA0lXGBNJ2gAAAFABAAAsABwAZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLW5vcGx1
Z2luLXN0ZGVyci50eHRVVAkAA4M3oleDN6JXdXgLAAEE9QEAAAQUAAAAdY1PS8NAEMXv/RRzkkSk
k4OCDCVQtLkoKok0581m0ixsM2F3UvHb29iAInh8f37v7crytSQojPPcggqYYHt3YohTEzjKFCxD
JwF61ZEQvVjje4lK91mWIZ+cX8ePboV78dORIz4aNbirK6y5eXKK1ffErB4k8Jk3LQdcXtB2+MwH
Yz/P+fbire04Jne3WQoEUY06CyV3bxo2ywbRXySHfyMiG9goJ1aGqFC/F0SVBjcc4OrmByuCOfLs
XGp7tiq/Dl+kZbjO50LUlqibBqtOhk0j4iFZ6DRPV19QSwMEFAACAAgAaFsDSVcYE0naAAAAUAEA
ADIAHABlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtbm9wbHVnaW4teGh0bWwtc3RkZXJyLnR4dFVU
CQADgzeiV4M3old1eAsAAQT1AQAABBQAAAB1jU9Lw0AQxe/9FHOSRKSTg4IMJVC0uSgqiTTnzWbS
LGwzYXdS8dvb2IAieHx/fu/tyvK1JCiM89yCCphge3diiFMTOMoULEMnAXrVkRC9WON7iUr3WZYh
n5xfx49uhXvx05EjPho1uKsrrLl5corV98SsHiTwmTctB1xe0Hb4zAdjP8/59uKt7Tgmd7dZCgRR
jToLJXdvGjbLBtFfJId/IyIb2CgnVoaoUL8XRJUGNxzg6uYHK4I58uxcanu2Kr8OX6RluM7nQtSW
qJsGq06GTSPiIVnoNE9XX1BLAwQUAAIACABoWwNJd02LHeMAAAB3AQAALAAcAGVkaXRpbmcvcGFz
dGVib2FyZC9wYXN0ZS1ub3NjcmlwdC1zdGRlcnIudHh0VVQJAAOEN6JXhDeiV3V4CwABBPUBAAAE
FAAAAHWPQUvDQBCF7/0Vc5JEpONBL0sJFG0uFpWkNOfJZjYupJmwOxH6701sRBF6nPfe92ZmVxRv
hYGcfMcNqAAF++E/GeJYB44yBsvgJICbAgYRj9KNJ474TEq4q0qsuH7xins6y6gHjhqRG6++b/Gn
ICLVvB76dnUVL7+D8/QkgbETajjgcgxah3tuyZ4nf3vR1nYYkseH+xQMRCX1Fgp27xo2S4cx/5EM
rlrG2MCknFjpo0J1yI0pNUxPwM3dL5YHOvGsXGJHtip/Fr5Kw3CbzYGojTFu7K166Te1SAfJQqdZ
uvoCUEsDBBQAAgAIAGhbA0lKLj4w4gAAAHsBAAAyABwAZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3Rl
LW5vc2NyaXB0LXhodG1sLXN0ZGVyci50eHRVVAkAA4Q3oleEN6JXdXgLAAEE9QEAAAQUAAAAdU5N
S8NAEL33V8xJEpGOB70sJSDaXFpUktKcJ7uTuiXNhN2J0H9vYiOK0OP7fuuieCsM5ORbdqACFOyH
/2SIQx04yhAsQyMBmtFgEHEv7XDiiC+khOuqxIrrjVfc0lkG3XHUiOy8+u6APUXlWii4H2p5jIur
FeX32oSeJTC2Qo4DzofQNrjlA9nzqD9duKXt++Tx4T4FA1FJvYWCm3cNq7nDmP+RDK5KxtjApJxY
6aJCtcuNKTWMr+Hm7jeWBzrxxFxse7YqfwZfxTHcZpMhqjOmGTqrXrpVLdJCMqfTLF18AVBLAwQU
AAIACAAsXwNJ4h5Fb3QLAAAxSwAADQAcAGVycm9yX2xvZy50eHRVVAkAA5M+olcyN6JXdXgLAAEE
9QEAAAQUAAAA7Vx5T+NIFv9/P0UJ7UyDNLbL9yG1RmzIdLPD0izH9EothBy7klRjuzxVZY5Z7Xff
V3YuQhySAA3dQki5sN/1e/Wusv3lM0nRbjVA2EamGVlu5Dq6aYW2j5GFTe8cfREii65jXsDHkqbI
N13bPUe7H7EZ4jBCpuXrGP7MyHHsCCNB+BXhKCFc0j5NYklQyohAh59OES2SrEoJigu0v4euhzQZ
ojyWyRD+L4dkfG4R5+RvXxZJZnnYCuwlknmNZIFvR2i/oDJCJ0QIygrUiYENogIVTKKEFX06qDiw
+DKkhTrs5GB0ZH3geSt/Jwgf5v8SljF92xpLlpf5RclJn/HLCPSlCbknIxwINtotlbaGpQPqHto+
K+jNDjr6eGS4uqvbJvpUkgJMY2A91IO/BrOG0zTEiahyWgzApjyPM8RKwmMJNhTtQnoT8yWMk1bp
cOhEqMPyPC5SlNGCROidUQluiB4tjKGUJUjQR8YfLKtyIoy9WMZG9/OJ8Zn0fqdy9PaPimapsUd6
1cDI4ltWSU0SITUleCZFQ0dXSiGtg/ZYArQKeczARbZaSR/UhE6BTkPAUCTFFtISdHpbEtGpbbQO
ASWAkdOc6FIRqEl1KiFZfsCWEVpNyThJwLMvMjbQ5Y3cAgzzHBYE8OhyzvhTsCCK0JQDkD6i6W80
I8iQeTmm1VhbAQ0H7GY0Fsj4KiaUWMVB0BXtNjl+a4ZYTlIar02qPmuWzIRAjewQVjjYT0/E2rLN
n/8wk6+P4/H1YRaclIzLRzKaENlS6+YMohPa6ikf6TFZ/3RAhSTFTAgMYEnP/ONLFJnn8z/OHh0s
OjpoORri6/2j6x8TFdg704jb+OR6C/Oa9C6p1EbeS/J394JbEDmhHmLHxOY4uEX1kpjENc8PVcTL
KISXGcldHzLKORIJp6WEALdeyDHApWbwSQksTZJ2KE8yopfD8l2d6/qsghDKOKqKuAfaS4aEjOUv
EL37hBMeIUUxMoy7YNXEWe8rSaTWB/VH1DWaDzRxNdCHMs8WGAKifOBbbuBPovyAztvCwS22cEeF
hWW6kfIqxPogNYU8TuOM/gW8ruKsgixegApcJR7yJ4olWttuddJLqbjUmo9TIw5IoXIYUVGkhERG
dFCgTkDIxnr07KwehmWOipC3GRFDQpSH5pnC/df663sBi5UoyFXoaYXK98xnhqqMpSS8aOoZtJ0b
xs43BC38wUBzdez4nhu+ra+XhqpghbYaXIGD39bYdwcc2N233tbZdwQXtN1v6+w7Ay7QPce0zSUB
MrCCc7TtA+9g5yjmChQ0ajwREFfgwHG9SqKSM9XqqgVFhZqpsLzMiCTRQtxt2xrhbgHudS8MdONU
nc7JnxWYD8E5VN6iFGx9T/gwwqYemI7l+W1Vf+AtdjnbA5c7+niEPkM/BfwiBA4HGF9uG1cxN/os
SwkXhl8YwrMSyxy6Tuk6YZaUhXsFAucJWAMPCuPU0Ir4ig7qqYtWAikNPJRTsAbR4iIZMq4ljF1S
ojfgwBGqR9+J0CH0ARU4cV+1RKB6SjnU+ozfKj9f18umQhh3hbjbnwAWtZDKSRArGrd2HnS5dur3
VVwEk6WHju87XitMLZHB9u1vCBNnQmiM0wEttD5ned1xim+G2/pAibtIQcO9AlJLtFwEna2bGANE
r3uFzSj1ivHaZGHNa7YYI8v2wwC/aoxEnJMfEqJ5xRYjZHum4wavFCHIuj92lppTcDFEru2GOHil
OarW4IUz1KMxWy9hPaTyYhS9IPA8+zUvtJdIVi+w3FbLXIHlm6H/iuF6ibz17dFaJYk5OsZeMJ18
FmTAoBlUNOdwC7HThpvfbC97gQ/mmyEAthMJuyJqZ1uZc1vsNE3+TDe4fvOdA9EZ88UJTW1DVKXa
PdNivQTa24cMDJiwKoMelqCxUiTd0R80ak2+JtpqNF93Lcfx22f8FsbuYmM5tr3aXOTv3cM//rv1
8fT06OLs6MPx7l73Yv/wpNs5O+5eHHf/fdY9OT3Z+p/yyYQVaheuqG2OtvUd5bWjEdgGYxRBkopD
f6726YCqPBl9P2IZTW6NqhzwOCUaLeoD1ZyjxnF204xADdXEdG0IvT/hepk1Ph1sMGx5JoEedISN
+c4y0kTVG8vR5k8m1h1smdNrYO7tcwZtK895johJ83hAtIzFKSinlfBlSEHRYVykGZjuOy30V9Bq
ETamjt3Q86xXiQ1QVJ9+KGQW6LQIF0t3fdMOnSWzab+l0IDQvXYM/nS8/2H/8HkDbpOqP9ZxY8bG
JRCW4zw+mVs/KpKuyGn1EHmH4KiyHwXAPrTTAyJbgfR107Rtx10CpNu6yYDXBvI/F6eQOi8+diGj
HpvPAuhNnqlvo3ygLnXR4rIUBsZOfV3WFERnAxBXof4gcEuItAIV6K7nOW77poJlqrZ5DFQUKYhc
xzxHXXWtTH98RQ4oVVYS6jLwDIIaLxERaq6o01Sy5SzTerGgiXIcrR/TTKu3PajaedhIP8YvVbSd
rRpX5PZVLLCFZequgz28JPqEdjhvC89aP+6cdE8vOp8+/b7ffRZXbeYns4YRRHaaH6duCkkwenLS
j62/msvl7g4TCjaaCAntekggy3N6pfbiepxdqx0sjdSXa6UqVy2C1YHWdTbZL3Jx656LK6Rf3MVX
pt2yvG1IqJ7tW61TFsdaHISDwN/8Yrs5Jaa+Ai1jXaw8/pK7ORZ3/GXMZbJZe3Z8sMxAgW3awZuB
Wg3kqX1f681ALQby9SBwQrNlT8cy2yYsYeg+g4FGYfXJ7aPKdzgPYjO5Avqaym9tJnEs3QwcHy8p
KiyVNe9G3CAMZxLpZ2jjUDKMeZxIwusLSlQd+6hS/EaI3Sql0CvNTxGAMuEyHmgpSRj0j6bXoxKa
Fqq+TeYcvveY8nxz7qsn1RkejWdpiuw1lcO7RO0l0LmBa9puy3IPXbNluVvhfGfcNA4oj2/HdxLJ
GHA8PDtAvVswzib9aqvfz2XKOMvYtZZROOdOC+vdt2XGkjgbMiEX+v2Uwyg2kBvwSG088NRon8c5
WWJOz3Jw4LyZ80nM6eqeC0Zru8bBt725qBJg/xFpaLKuZq4E4wRKUNrXar1BcY1O9k4eirmLNYJS
07FbNbIW3w0BegWb6zVVx8FOPajZSHZPB6Gd1uLyeWQXV4MZ+aEHuCSjAdqGOvjYCnGLDpCncIsO
asPrFfuV0st22ss2y2vT65nWC3RxY9U2Usivb7Z1/Ve29PtVlmkVzzbRyQWTW+B+TusYug0kbD2B
Zm0d+FhfaC+JmjQ/vpZcowaCcudXJef7hSfBR2j/mYTavN4Fjnk9ABjNt35Wt8j2b/dA7vfmz/XF
rqN55Xvn5z/f/2R3Gpv9ZHfjDLhtn9QjFl1drdCBUrMDldE2vnGDX+DFrl92duAsY3IafCnhbb//
k4XBuPAqCIFXOaQC3gAFAYEIPsVFCq8Fg5d/xlfxSUMAfq/57tSnkKJ5U6+gMbwd7Z6cdPd0xVKx
WeQyph7aQYCXDVZbbqALTNOcKbA79T6qQnVAJILszG+jp6sfSigANAXsJlMPQYoUKtWU9KHGSDWw
pVbAMmurCpRNXCfw8JtNGpvYODIdPfTUjevLbGIvsomH7WB2N3vbtHeOCM9p83CAlBSUpBEiNyRR
s7Gn61wL1mkC0gEpBnKojPQOqTmXYvecXNaF4u7XZjxZk9SymqbGiiPOIFsIsRwey/E3hWelyeRr
0NWPMNZtK7Cn04DVHrkQRiiJq8FQopP9D6fd43/9gsSwklLNxFN2Xcxzcl2IBbqDTRx6LY+dULfb
ht/+sRMjycLAt812yTz8XA/kmPAPp4+9aOf/EpYJw+ld0K3eMZXx2z6QoxHShcUxLdTuP5BjRrq3
B3K8PZDj7YEcbw/k+B4eyOH6kWXrJmSG6VBttQj8YH7+P1BLAwQKAAAAAADEWwNJAAAAAAAAAAAA
AAAABQAcAGZhc3QvVVQJAAMwOKJXvz6iV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAAB1WwNJAAAA
AAAAAAAAAAAADAAcAGZhc3QvY2FudmFzL1VUCQADnTeiV78+old1eAsAAQT1AQAABBQAAABQSwME
FAACAAgAcFsDSbKjOj6wAAAA3gMAAEwAHABmYXN0L2NhbnZhcy9jYW52YXMtY3NzLXNpemUtYWZ0
ZXItaGVpZ2h0LWNoYW5nZS13aXRoLWRpc3BsYXktZmxleC1zdGRlcnIudHh0VVQJAAOTN6JXkzei
V3V4CwABBPUBAAAEFAAAAO3PvQ6CMBQF4N2n6IgDFKookDgo0cTBSOJoDLmWG6xWSi7VpG/v3yAP
wXbOdM53jKJMzLNJGKTp9MSUxTt0rpFlblpXkGmRrGOdqhvQGiuGRAs/EvMkZt5to+oVdLg/X1Ha
NZGhcts8QasKLFZj5ql+A8v4wTxIYg7ygjw3hDusFPyTH8UzEYhpyN/T1ljXYscLDQ6Jv8d+qVx+
DgaSadUgE2GSjI49RTwoBsWg+CpeUEsDBBQAAgAIAHVbA0kxv4FlhQAAABoBAAAmABwAZmFzdC9j
YW52YXMvY2FudmFzLWxpbmVEYXNoLXN0ZGVyci50eHRVVAkAA503oledN6JXdXgLAAEE9QEAAAQU
AAAAzc49CsJAFEXh3lXcDRgYjQYGEUIiNlZqJxZPc9HA5I28TPxbvVmG5fmqUw43YA7n/KzwuQNf
vXN5FuJVAuqhe+ypDe1o5Klwi2V+xmpjFm3tUW2rqInvdGDatcpa+rtHq08JbYNmLIiZfDwkIVD6
hKgEAztqQjeMcCE06vRLi9mk/KeZH1BLAwQKAAAAAADEWwNJAAAAAAAAAAAAAAAACQAcAGZhc3Qv
Y3NzL1VUCQADMDiiV78+old1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAxFsDSULQGHexAAAAzgEA
ADYAHABmYXN0L2Nzcy9wZXJzcGVjdGl2ZS1vcmlnaW4taW5pdGlhbC1pbmhlcml0LXN0ZGVyci50
eHRVVAkAAzA4olcwOKJXdXgLAAEE9QEAAAQUAAAAzY8xC8IwFIR3f8XbtIMGwaF0bTuIg9KgnWv6
LIEkLySvYv69FUVxd3C84+7jrm6afVNAi+edZugJIzhiSMigrTdo0TEMyCVZPzL2kpNBuFCAuccQ
PSrWV1xS0IN2y9t8NRMnMqPFKKqOO1G3UjzhQtIYFD5USQGFilGUUn6BK1SmCx1rcivl/WKd55sM
CriS7uFVLApDw9G912F/CDRt4bStFu/MRP7Y2az+6c30rzfvUEsDBAoAAAAAAG9bA0kAAAAAAAAA
AAAAAAAJABwAZmFzdC9kb20vVVQJAAORN6JXvz6iV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAABv
WwNJAAAAAAAAAAAAAAAAGgAcAGZhc3QvZG9tL011dGF0aW9uT2JzZXJ2ZXIvVVQJAAORN6JXvz6i
V3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACABvWwNJ3v266a8AAADuAAAAPwAcAGZhc3QvZG9tL011
dGF0aW9uT2JzZXJ2ZXIvZGF0YWJhc2UtY2FsbGJhY2stZGVsaXZlcnktc3RkZXJyLnR4dFVUCQAD
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
WwNJAAAAAAAAAAAAAAAAFQAcAGh0dHAvdGVzdHMvbWVkaWEvaGxzL1VUCQAD8DeiV78+old1eAsA
AQT1AQAABBQAAABQSwMEFAACAAgAnVsDSdFRwi2pAQAAhQQAAEAAHABodHRwL3Rlc3RzL21lZGlh
L2hscy9obHMtYWNjZXNzaWJsaXR5LWRlc2NyaWJlcy12aWRlby1zdGRlcnIudHh0VVQJAAPqN6JX
6jeiV3V4CwABBPUBAAAEFAAAAM2T0WvbMBDGn9e/4h7Xl1InTpe4I5C66zaoSyCUPoQxLtZZFpEl
Tzot9L/fOV1ZQt9aCtOb5O++O/8+aZ1lxWhaTKZnk2z2Az6vvnxd3lfLOSyYqev5jnjnw7byzrAP
K+LUF+A8QyRm4zSkHtyTBron0SWgUoFiBBPB+hrtyfpfl9H5u3VZJA0whudeQLuYZfnZ/iMErgP1
Pgx260/ZZJrLHNe0SXpeDG0qsUJNt15rUVxJ0bYAKbSkjsYfIMmCG6NXHAi7pcVHCjCXBU3fxJ8L
yxQcMt2ayGWLTpMSq9b7OPyKkfGNDITPMjkBK9LDNuP/khJj4NK7xugUkI13D4bb0ne9pWH3DZ2y
FAoosW5JwTmQw40AhA3WW3Iqvi2i+0jhu2v8tam5eOFdwMeTD6dHEEeHECtSBm+MpRJtnayAv3pY
OFW2VG9LFJIVYUxh7+jUzihuB2haMpaggCXIgQCLQAL7jcGg4yFXCXiAH+hXMsflTfAdXIzzfJIB
e7jIZ9PZ5MWEr7lNZQqBHB9col5SlpM3EXbq7yvY5yqu2odH4eqStafv6PwHUEsDBBQAAgAIAKBb
A0nDe5z/zQEAAEUFAAA6ABwAaHR0cC90ZXN0cy9tZWRpYS9obHMvaGxzLWF1ZGlvLXRyYWNrcy1o
YXMtYXVkaW8tc3RkZXJyLnR4dFVUCQAD6zeiV+s3old1eAsAAQT1AQAABBQAAADNlNFr2zAQxp+X
v+Ie15dSr07qeCOQuus2qEcglA7KGBfrLIsokiedG/rf75R2UFMYbGVQvVl899359529HDTAKWRZ
+a4opwXQPmZZfmx9gxYCN4F6H9g4fXuWTYv8O3y4oM2gFyVEcqqmGFHTjeGuQibtw30Jb91g7dFk
+QqdjTOcLNfibrz74lpfwrdVBY13jhqWO9HcoTVqcvvoPz8+OUse64+fVtf1agFLZtr1/JV478O2
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
f498D1BLAwQUAAIACACdWwNJ6RNRQswAAAA3AgAAMgAcAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEt
ZG9jdW1lbnQtcmVmZXJlci1zdGRlcnIudHh0VVQJAAPqN6JX6jeiV3V4CwABBPUBAAAEFAAAALWQ
sW4CMRBEa/iKLUlzwpAEZCEkOIogJWVEgVLs2XvGwlkje08ofx9fko4KnVLuSPNmZzadA5iDUnq2
1E9LoGtW6rEK0WCAJCbRJSbx7I4L9TxffMBqz21cawjRuSJDFkySq6oab+5G7ajpXGFlkjfKGR29
/lK3xXTWUIyB7BBw/1wdufWuSyg+8sHLqY6fl0D99YJsAyUNNZoTWZgCMTYlExo0Z2Kbh7V6z5T6
vXbeiL5ha5iMRw+DEtj+DffTC4VcTF+Fy10I/0n+BlBLAwQUAAIACACgWwNJjNYZr+UAAACsAgAA
KgAcAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtZG9jdW1lbnQtc3RkZXJyLnR4dFVUCQAD6zeiV+s3
old1eAsAAQT1AQAABBQAAAC1kUFLA0EMhc/2V+TYXsRpq62DFNrtQUFBELEgHrKz6XToNFNmsor/
3qx4EQ8ii8eEvO8lL8vWA0zAGDue2/M50FsxZnoak8MIWVymY8oS2D/PzMVk9gJXa6pbv7BQiJs7
KgU9PQXZVSjkU363MOQ2xtFg+Y18+Qdy4CAd8kHpIfENb5OFzX0FLjGTE+3pzCvG0PRwKSRf698m
73VipaK9BRVG6gUWzFIl3gbfZuy2/cwnHY6RuuoauYmULVTodtTAGRBjrZ5Qo9trqqXfVY+FcpfZ
OjixP9j6n8HJqJfDf/39N/IHUEsDBBQAAgAIAKJbA0leEyog7wAAAMYDAAA5ABwAaHR0cC90ZXN0
cy9tZWRpYS9tZWRpYS1wbGF5LXN0cmVhbS1jaHVua2VkLWljeS1zdGRlcnIudHh0VVQJAAPvN6JX
7zeiV3V4CwABBPUBAAAEFAAAAN2TQUsDQQyFz/ZX5Ggv0nHV2iBC3R4UFAQRC+IhO5tOh46ZMpNV
/PfOigfBi3Xx4jEh+d6bF2beOYAKjMHDUzyeAb9mY44OQrQUIKlNvI1JvbjHqTmppk9wtuCmc+cI
maW94ZzJ8YPXdU3KLqY3hH3pQhiP5r8me/HaI+8K3Ue5klVEWN7WYKMIWy29MvNCwbdfVWY4MTv5
10/719G5MnFRljYIZTHwILBS0jrKyrsuUe/2I5/4vA3cV5ckbeCEUJNdcwsTYKGmaEJDdlNSzcNe
dZ859ZktvFX8xi73Ge2NByn8+O5/Sq7+OXmXX/AOUEsDBAoAAAAAALFbA0kAAAAAAAAAAAAAAAAe
ABwAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvVVQJAAMNOKJXvz6iV3V4CwABBPUBAAAE
FAAAAFBLAwQUAAIACACmWwNJbvgP31EBAACXBAAAQgAcAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhc291cmNlLWFwcGVuZC1idWZmZXItc3RkZXJyLnR4dFVUCQAD+DeiV/g3old1
eAsAAQT1AQAABBQAAADN0cFOwzAMBuA7T+EbcNiadG3XTuIAjAkkJiEGXBBCXuJuEWlSOSlQnp4i
BJx2ZjfLspLvtx+lnKXVTJTjfCKeoGbcLNGZ2lv9fNOF7VkfKUAwG4fWkgZiPhnJQmQFHL0szO/w
BbPn53tH7y2pSPrKmTjHiMdwtCLlnYbDOvbtIWD0DZBTvnORmPTx0IFk5TtWdI5qS8m5Z1qSNvhX
jWRepOM0E8kN++iHhygkC88Nxkt02hKHZOlfDSVfpK9iMQRpyMUf31iBNY5AFhNxkApZjEQ5EhP4
ji/leJplMO+a9pacJr5josepzKtylstSiPIJrjbOs3EbGNJE9vbONLTGQBAowroHZc3wH6xJYTd0
Tx9W2LSWzrq6Jp6b0Frsr7EnhjcMgFoP24weEELv1Ja9Mx/EO2jT/aVVu2hFlWb/SsvT/aUVOw86
SYv/pVX7QPsEUEsDBBQAAgAIAKdbA0l8bgzCPgEAAHoDAABQABwAaHR0cC90ZXN0cy9tZWRpYS9t
ZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtdi1iaXRyYXRlLXN0ZGVy
ci50eHRVVAkAA/o3olf6N6JXdXgLAAEE9QEAAAQUAAAA5ZDNbsIwEITvPMXegAMkDiQNSD0UKCpS
kVChvaAKLfYGrDp2tHbapk/fIPXnIbiNRqvZ+WYvxDSZTEUyTLP8FQrG0xqtLpxRh03tz7MmkAev
TxaNIQXEfDsQWTzOoPe21H/H98yOD8+WPiuSgdTK6rDAgH3obUk6q6BbhKbqAgZXAlnpahuISfVb
B6Ktq1nSHOWZorljWpPS+K8GIs2SYTKOow274Nog8tHScYnhAa0yxD5au3dN0aXSRSxbkJJs+O03
lGC0JRDZKO7s/6Hz9Pqgs1hcC3QSi2wQ54N4BD/442E2zmFRl9UTWUW8Y6L9jUgn+TQV+SRvp1md
rGNtT9DSBHZmp0s6oifwFODYgDS6/QdHkli37t3LFsvK0KwuCuKF9pXB5hEbYvhAD6hUu2ZwgOAb
K8/srP4i7nwDUEsDBBQAAgAIAKlbA0nLK/qyQQEAAHoDAABSABwAaHR0cC90ZXN0cy9tZWRpYS9t
ZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtdi1mcmFtZXJhdGUtc3Rk
ZXJyLnR4dFVUCQAD/TeiV/03old1eAsAAQT1AQAABBQAAADlk09Lw0AQxe/9FHPTHvJn0zZpCh7U
WhQsiFUvRcp0d5IubnbD7EaNn94U1H4Ib4/HMPN+D2YrxCIrF2Ial0X+ChVjvUarK2fU7qHzh6s+
kAeva4vGkAJivohEnk5zOH9b6b/hG2bHu2dLny3JQOrO6rDEgGM435B0VsFZFfr2DDC4BshK19lA
TGo8OJBsXMeSrlEeKLl2TGtSGk8qErM8i7NpmjywC25YRD5ZOW4w3KJVhtgna/euKTlGOorVANKQ
Db/5YglGWwKRT9LR9gRdFv8NehanWfZfoLNU5FE6j9IJ/OAXcVpMYdk17SNZRfzERNtCzMr5Yibm
k2x4grvaOta2hoEmsDNPuqE9egJPAfY9SKOHe7Anid3gXr5ssGkNXXVVRbzUvjXY32NPDB/oAZUa
2gwOEHxv5YGd1V/Eo29QSwMEFAACAAgArVsDSaekkZGLAAAAmwAAADkAHABodHRwL3Rlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1wbGF5LXN0ZGVyci50eHRVVAkAAwU4olcFOKJX
dXgLAAEE9QEAAAQUAAAADcixDoIwEADQ3a+4H8DQErCwaVhMnJS4GIejPbBJacm1xNSvl+3lyVI0
RamKsgIhOtl2sj42SkC/LeudvCEemOh1EnWrulqoSjZvuM4+sPUz6OATBzfYhUaMBJESjBm0s+R3
kcZt3/Pzgcvq6LJNE3Fv4+ow3zATwxcjoDFkIAVAiNnrDwdvf8SHP1BLAwQUAAIACACvWwNJdIbW
EKkAAAAHAwAAOwAcAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXJl
bW92ZS1zdGRlcnIudHh0VVQJAAMJOKJXCTiiV3V4CwABBPUBAAAEFAAAAM3SsQ6CMBAG4N2nuBfQ
tCVIYdOwmDgpcTEOR3tgk9KSFmLq08sD6CzJDX/+/MM3nGB8v2VyyzLgvBLlcjvBc6jnYbyQ0xSa
QHQveF7KKueSMfmAU+98MK4H5d0UvG3MQC1GgkgTtAmUNeSWRArnpT3crjiMlo5z11GoTRwtpjMm
CvDCCKg1aZg8IMTk1DN4Z94UNuIrTf6gLWtR/JUm+Hpp2Xppcg2/9gFQSwMEFAACAAgAsVsDSVRf
2eafAAAA0QEAAEYAHABodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1z
b3VyY2VidWZmZXItbW9kZS1zdGRlcnIudHh0VVQJAAMNOKJXDTiiV3V4CwABBPUBAAAEFAAAAM3O
vQ6CMBRA4d2nuC+A6Y9gZdOwmDgpcTEOl3LBJqUlLcTUp5cH0NW4nZzpE4wXGVMZk8B5KXallGsh
c6jmYTyTaynUgei25flOlTlXUhR3OPbOB+N60N5NwdvaDNRgJIg0QZNAW0NuKdI4L3d/veAwWjrM
XUehMnG0mE6YKMATI2DbUguTB4SYnH4E78yLwkp8pKm/pW3kVxpj6le0N1BLAwQUAAIACACgWwNJ
PhBaXoQAAADAAAAARgAcAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL1NvdXJjZUJ1ZmZl
ci1hYm9ydC1yZWFkeVN0YXRlLXN0ZGVyci50eHRVVAkAA+s3olfrN6JXdXgLAAEE9QEAAAQUAAAA
ncyxCsIwEIDhvU9xoy5C1GIbRCh1cRAEBwVxiOkZD8KdJBfFt7e+guvPz9eVALAAY+y8sXUL+M7G
LGdRvIuQ1Cd8SlLicFmZum2usN7irYSNhYw87DFnF/BE+uidYpD0sTDhEuO06v6WiUl/5HHUSXjH
d7FwPvTghRm9jm18Xi7SUH0BUEsDBBQAAgAIAKJbA0lNSK/z7QAAAF8BAAAtABwAaHR0cC90ZXN0
cy9tZWRpYS9wZGYtc2VydmVkLWFzLXBkZi1zdGRlcnIudHh0VVQJAAPvN6JX7zeiV3V4CwABBPUB
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
AAAArAIAAC0AHABodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLWVycm9yLWFib3J0LXN0ZGVyci50eHRV
VAkAA/Y3olf2N6JXdXgLAAEE9QEAAAQUAAAAtZFBSwNBDIXP9lfk2F5kxxZLBxHq9qDQgiCiID1k
Z9Pp0GmmzGQV/71Z8aQ3V48JeV+S95adB5iCMfZiYasF0FsxZnYek8MIWVymU8oS2L/MzeV0voWr
FTWdv7ZQiNsNlYKenoLsaxTyKb9bGHMX42S0/DU5cJAe+aD0kPiOd8nC830NLjGTE+3pzCvG0A7Y
Uki+zl8n73XiRkUHCyqMNAgsmKVOvAu+y9hf++lPOp4i9dUtchspW6jR7amFCoix0Z3QoDuoq2XY
V4+Fcu/ZKjixP9iaz+jsWzqm+q/c/5T8AVBLAwQUAAIACACmWwNJ6zEQIBcBAADxAgAANgAcAGh0
dHAvdGVzdHMvbWVkaWEvdmlkZW8tZXJyb3ItZG9lcy1ub3QtZXhpc3Qtc3RkZXJyLnR4dFVUCQAD
9zeiV/c3old1eAsAAQT1AQAABBQAAADtjkFLAzEQhe/9FXNsD7ub7BbbBhGWXaSCQlkrCqWHdDNN
g9lkTbJV/70pVa8ieJS5zJt5880rBwlQAKUsXzBKAF89pdNU25ZrcKF12FsXlJGbGb0oZlu4rHE3
yCsGHo24Q++5xEcVDhUPKK17ZzA2g9aTUflP/hOyMiqckPeRrqy5MXvL4GlVQWuNwTbEWfQcuVZi
tPnipwtSbGG5Xq8afBnQB9gruQyh/5S1Eg22qI7YoO+t8VhxrXe8fWbgzgsBh+iP6ryHKZnCGJ2z
DhKaL4r5BPaxP5lYltF8lpJYlM0JIZmw6BNjQ4Jvyoe061H+FC7Keuj6a2W4fmhuSxMTdjZgKUTM
4BnwcwPfr+JZ9MLg9C9SfABQSwMEFAACAAgAplsDSaoEWfLEAAAAJAMAACwAHABodHRwL3Rlc3Rz
L21lZGlhL3ZpZGVvLWxvYWQtdHdpY2Utc3RkZXJyLnR4dFVUCQAD9zeiV/c3old1eAsAAQT1AQAA
BBQAAADtkbFuAjEMhufyFB5hQQ2HiohQJXo3FImOFUPVwZf4chGpgxKfEG/ftGJj66kboyX/3yf7
3w4OoAKl9GKtlQI6Z6WW8xANBkhiEp1iEs/uY6WeqtUnbBpqB/esIZO8Uc7oaB+dKxsvJXTUUIKB
7GT7d7Bgkjpy592QUHzkg5e+jl+nQD/TK7INlDTUaHqy8AjE2BYntGiOxDaPkZO8Z0o77mLjjegb
tobp5GE2ysD2+rjfu1DIxXQpXB5CGEe+N/IfjXwDUEsDBBQAAgAIAKZbA0lcghJK5AAAAMYDAAAv
ABwAaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXByb2dyZXNzLXN0ZGVyci50eHRVVAkAA/g3
olf4N6JXdXgLAAEE9QEAAAQUAAAA3ZFBSwNBDIXP9lfkaC/itGJxEKFuDwoKgoiCeMjOptOhY1Jm
sor/3qx481TWg3hMyPvy8rLsI8AcnPOzM+8c0Ht17uQoS8AMRUOhnRRNHJ8X7nS+eIHzFbV9vPBQ
ibtbqhUjPSbdNKgUpXx4OOQ+5+lk+QfJiZMOyHujJ+FrXouHp7sGgjBTUOvZzBvm1P0z/7O9/Ou3
/RuJ0SYuTbT1YMJMo8CKRRvhdYp9wcHtVz7yuss0VFfIXabiocGwoQ6OgRhb2wkthq2lWsdd9VCp
DJmtUlD/g23/mRxMR23Y5++/Sf4EUEsDBBQAAgAIAKhbA0nz3hJqgwAAAMAAAAA9ABwAaHR0cC90
ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLWJlZm9yZS1tZXRhLWRhdGEtc3RkZXJyLnR4dFVU
CQAD+zeiV/s3old1eAsAAQT1AQAABBQAAACdzD0KwkAQQOE+p5hSG2ESMbiIEGJjIQgWCmKxbibr
wDIj+6N4e+MVbB+PryseoAFEU68N1kDvhLhcBHU2QMwu0lNjZvHXFldNe4PNju7Fbw0kkuFAKVlP
Z86P3mbyGj8GZlJCmFfd3zIL5x95mnRW2cuoBi7HHpyKkMtTm56XDTxUX1BLAwQUAAIACACoWwNJ
NVs2UboAAACSAQAAKwAcAGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcXVlcnktdXJsLXN0ZGVyci50
eHRVVAkAA/w3olf8N6JXdXgLAAEE9QEAAAQUAAAApZAxiwIxEIVr91dMqY0YPRSDCOta3IFXHhZi
MZuMMWxuIsks4r83d9jZaflg3vcxr+4dwAyU0tOlVnOga1bqYxyiwQBJTKJLTOLZHRZqPlscYbWl
tndrDZnkm3JGR7voXLnYlFKnoRQD2ap+HSyYpIl88q5PKD7y3su5ib+XQH/pE9kGShoaNGeyMAFi
bIsTWjQdsc3vyEl+MqUvPsWtN6Kf2BqG1WD0loHtY7j/v1DIxXQrXO5DGFV3UEsDBBQAAgAIAKpb
A0kBci/1+gAAAKQEAAAqABwAaHR0cC90ZXN0cy9tZWRpYS92aWRlby1yZWRpcmVjdC1zdGRlcnIu
dHh0VVQJAAMAOKJXADiiV3V4CwABBPUBAAAEFAAAAL2RwUoDMRCGz/Yp5qgXaVppu0GEuj0oKAgi
CuJhNjtNQ+OkJLOKb29Weqqn2NZjwsw3M/837yzAGJTSo0qrCdBnUuri3AeDHqKYSJsQxbF9narJ
ePoGlwtqOnulIRG395QSWnp2sqpRyIb4peGUO+/PBvM/kx076ZGPme4C3/IyaHh5qMEEZjKS/3LN
B3rX7kyZFe0v2/XvgrW54jo3rTXkRk97gQWj1IGXznYR+21/8gnvG0/96wa59RQ11GhW1MIQiLHJ
M6FBs86ppv2uekoU+8wWzoj+xc5+Bie7dqqjea/+w/toeCTvZeADey+9qtx74YQC7wclfwNQSwME
FAACAAgAq1sDSUmOn7HdAAAABgMAACsAHABodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXVzZXJhZ2Vu
dC1zdGRlcnIudHh0VVQJAAMBOKJXATiiV3V4CwABBPUBAAAEFAAAAM2RQUsDQQyFz/ZX5KgXcVqx
OIhQt4cKCoKIgvSQnU2nQ6dJmckq/nuz4s3jonhMSL68vLfoI8AMnPPTSz89A3qvzp2fZgmYoWgo
dJCiiePr3F3M5mu4WlLbx2sPlbi7p1ox0nPSbYNKUcqHh2Pucz6ZLP6I7P4FOXHSAflo9CR8yxvx
8PLQQBBmCmo9m3nDnLpR+vVb/p3EaBM3trTzYIuZRoEVizbCmxT7goPaL39kf8g0VCvkLlPx0GDY
UgcWJ2NrN6HFsDNX67ivniqVwbNlCup/sC2fydFv5v4JUEsDBAoAAAAAAMpbA0kAAAAAAAAAAAAA
AAAQABwAaHR0cC90ZXN0cy9taXNjL1VUCQADPDiiV78+old1eAsAAQT1AQAABBQAAABQSwMEFAAC
AAgAqlsDSV6E9GnmAAAAYgEAAC0AHABodHRwL3Rlc3RzL21pc2MvY29weS1yZXNvbHZlcy11cmxz
LXN0ZGVyci50eHRVVAkAA/83olf/N6JXdXgLAAEE9QEAAAQUAAAAdY1BS8NAEIXv/RVzkkSkk4qi
DCUg2lwUlUTa83YzSVeSTNidCP57ExtRCjKn99735m3y/CUnyIxruAQVMN4e3AdDGPaegwzeMlTi
4aDaE+Lq8maZjLei2yRJsHXB4g8X0ErbmxCW7329wK00QzuaD0YNbnYF7nj/6BSLb3hS9+IZGzEl
e5x30Vb4xLWxn2N+d/SWtu+j66skBoKgRp2FnKtX9ev5B9FpJYV/IyLr2ShHVrqgsHvLiAr1rqvh
7OK3lnnT8uQcsS1blT+Dz1IynKcTELQkqobOqpNuvRdpIJrbcRovvgBQSwMEFAACAAgAqlsDSRWh
p1bFAAAA/gAAAD8AHABodHRwL3Rlc3RzL21pc2MvZGVsZXRlLWZyYW1lLWR1cmluZy1yZWFkeXN0
YXRlY2hhbmdlLXN0ZGVyci50eHRVVAkAAwA4olcAOKJXdXgLAAEE9QEAAAQUAAAATY5Na8JAFEX3
/oq7bKGWmYiNGaQbU1ehSD9WIjIkT32YzISXF0v76ztCS3vhLi4cuCcz9mFqFlMzg7UuK1xm7nNT
oBy7/oVCQ/ImRNvcznPj5jYrZosdNhJ7Ev1Ey4OCw8W33OAQ5drOq4M1Bjf9f2xA7UOIijoG9Rzw
/F5Vt5Pt36s1OyxTsC5Xm33FHSs1eEzBmo8/u+ThvPL1iZLDhZPe/pX018fhSSRZfAgrhyPimO6u
MA7c0h1UxlB7JWjEF0mcfANQSwMEFAACAAgAqlsDSXQEJ7jEAAAA/gAAAFsAHABodHRwL3Rlc3Rz
L21pc2MvZGVsZXRlLWZyYW1lLWR1cmluZy1yZWFkeXN0YXRlY2hhbmdlLXdpdGgtZ2MtYWZ0ZXIt
dmlkZW8tcmVtb3ZhbC1zdGRlcnIudHh0VVQJAAMAOKJXADiiV3V4CwABBPUBAAAEFAAAAE2OTWvC
QBRF9/6Ku2yhlplI/BikG1NXoYitKxEZkqd9NJkJLy+W9td3hApeuIsLB+7JjJ2OzXxsJrDWZQuX
mec8NyiGtttSqEk+hGg/s/nMuNxmi8n8gI3EjkR/0HCv4HDxDdc4Rbm29epgjcFDd4/1qHwIUVHF
oJ4D3nZl+Tja373aA5YpWBerzbHklpVqvKRgzef/XXD/tfLVJyWHCye94zvpzcfhVSRZfAsrhzPi
kO6uME7c0BNUhlB5JWjEL0kc/QFQSwMEFAACAAgAylsDSRU1NZJ6AAAAvAAAACoAHABodHRwL3Rl
c3RzL21pc2MveHNsdC1iYWQtaW1wb3J0LXN0ZGVyci50eHRVVAkAAzw4olc8OKJXdXgLAAEE9QEA
AAQUAAAAjY5BDsMgDATveYU/QCDtoRW/IcRVLBmMjJH6/BLlA9VeVjuH2SylEScjqYCqohE+xAin
WYveb4/XGma2+A4h+EI9e8UuQzN2/+1sbk+Ho9JEzQ2ldW7AVBGegIwFq8FNl0niXSHCqGmfGhNg
Scd/uip95PO6lywxLz9QSwMECgAAAAAAwFsDSQAAAAAAAAAAAAAAABQAHABodHRwL3Rlc3RzL3Nl
Y3VyaXR5L1VUCQADJziiV78+old1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAo1sDSYE0+MDKAAAA
3QEAAFUAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NhbnZhcy1yZW1vdGUtcmVhZC1yZW1vdGUtdmlk
ZW8tYmxvY2tlZC1uby1jcm9zc29yaWdpbi1zdGRlcnIudHh0VVQJAAPyN6JX8jeiV3V4CwABBPUB
AAAEFAAAAKWQsW4CMRBE69xXbBmaEyYkKBZCIkcBUigRBaLYsxdj4ayRvacof4+P0KWKrtyR5s3O
LDsH8AJK6cm7Hr8BfWelpnWIBgMkMYmuMYlnd5ip19n0CPMNn+JCQ4jOFRmyYJJc13W1/DdqRW3n
CiuTbClndPT5S/0opouGYgxkh4D755rIJ++6hOIj772cm/h1DdRfa2QbKGlo0JzJwhiIsS2Z0KK5
ENs8rNUuU+r3Wnkj+g9bw3P1NBqUwPYx3L0XCrmYfgqXuxBG1Q1QSwMEFAACAAgAo1sDSQq8rfra
AAAArAIAAEgAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NhbnZhcy1yZW1vdGUtcmVhZC1yZW1vdGUt
dmlkZW8tbG9jYWxob3N0LXN0ZGVyci50eHRVVAkAA/I3olfyN6JXdXgLAAEE9QEAAAQUAAAAzZFB
SwNBDIXP9lfkWC/S0WpxEKHdHhQUBBGF4iE7m06HjkmZySr+e7PizeMieEzI+/LysuwjwBk4508v
/ewC6KM6Nz/JEjBD0VDoIEUTx83CnS/mr3C1praP1x4qcXdPtWKk56S7BpWilE8PU+5zPp4s/yE5
cdIB+Wj0JHzLW/Hw8tBAEGYKaj2bececulH+9cf+ncRoEysT7T2YMNMosGLRRnibYl9wcPudj7wd
Mg3VDXKXqXhoMOyogxkQY2s7ocWwt1TruKueKpUhs3UK6n+x7T+To7/8+xdQSwMEFAACAAgApFsD
SaNOekviAAAArAIAAEcAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NhbnZhcy1yZW1vdGUtcmVhZC1y
ZW1vdGUtdmlkZW8tcmVkaXJlY3Qtc3RkZXJyLnR4dFVUCQAD8zeiV/M3old1eAsAAQT1AQAABBQA
AADNkUFLA0EMhc/2V+TYXqSj1cVBhHZ7ULAgiCiIh+xsOh06ZspMtqX/3qx4UhBkLx4Tku+9vMw7
D3AOxtizKzu9BDoUY2anMTmMkMVl2qUsgf1rZS6q2RtcL6np/I2FQtyuqBT09BxkU6OQT/loYcxd
jJPR/B+SAwfpkY9KD4nveJ0svDzU4BIzOdGezuwxhvabSvUn//Jl/z55rxMLXdpa0MVIg8CCWerE
6+C7jL3bz3zS+y5SX90it5GyhRrdhlqYAjE2qgkNuq2mWoZd9VQo95ktgxP7g63/GZ1MBin8/vcP
UEsDBAoAAAAAALZbA0kAAAAAAAAAAAAAAAAqABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50
U2VjdXJpdHlQb2xpY3kvVVQJAAMXOKJXvz6iV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAACjWwNJ
AAAAAAAAAAAAAAAALgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5
LzEuMS9VVAkAA/E3ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAAKNbA0kAAAAAAAAAAAAA
AAA+ABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvMS4xL2ZyYW1l
LWFuY2VzdG9ycy9VVAkAA/E3ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAKNbA0mQp79G
gwAAAMAAAABwABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvMS4x
L2ZyYW1lLWFuY2VzdG9ycy9mcmFtZS1hbmNlc3RvcnMtaW4tbWV0YS1lbGVtZW50LWlnbm9yZWQt
c3RkZXJyLnR4dFVUCQAD8TeiV/E3old1eAsAAQT1AQAABBQAAACdzDEKAjEQQNF+TzGlNmI0ooZF
WNbGQhAsFMQiZsc4ECaSTBRvb7yC7efzuuIB5qCUma3NVAO+s1J6EqKzAZK4hM+YhNhflmqx0ldo
t3grfmMgIw97zNl6PJE8eivoY/oYGHEJYdx0f8vEJD/yWHWKvON7NHA+9OAiMzqprT4vG2hovlBL
AwQUAAIACACiWwNJMVP7zNcAAAD4AQAASwAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNl
Y3VyaXR5UG9saWN5L2F1ZGlvLXJlZGlyZWN0LWFsbG93ZWQtc3RkZXJyLnR4dFVUCQAD8DeiV/A3
old1eAsAAQT1AQAABBQAAAClkEFLAzEQhc/ur5ijXmSjFWkohbo9KLQgiChID7PJNA2NMyWZVfz3
ZsWbN/f44L3v8d5qCADXYIy9mtt2BvRZjJldJnGYIKvLdJKskcPbrbmZtztYrKkfwtJCId1SKRho
IyFUx10NHS3UYCLfrP4PVszaCe9jGDJqFH6Jeujk/ZRoVPfIPlG20KE7kIcWiLGvndCjOxL7MqWc
9LlQfuC9rKNT+4dt4bw5u5jUwP73uJ9dqBQkf1UuDylNIUeOOiKfKr3+NG6w8PrYgRNmcuN31fOB
KfrmG1BLAwQUAAIACACiWwNJnluAwOcAAACdAgAATAAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29u
dGVudFNlY3VyaXR5UG9saWN5L2F1ZGlvLXJlZGlyZWN0LWFsbG93ZWQyLXN0ZGVyci50eHRVVAkA
A/A3olfwN6JXdXgLAAEE9QEAAAQUAAAAzdHBSgMxEAbgs/sUc7SXZWMr0iBC3R4UKggiCuJhNpmm
oemkJLOKb2+i3jzJXjwmZL7J/LMaHcAclNJnS90tgN6zUos2RIMBkphEx5jEs3u5UOfL7hUub3kb
rzSE6Fy5hiyYJLdt26z+TK1pGF2xMskd5YyONt/qdSnaayiFgewUuH6uj7z1bkwoPvKTl10fD8dA
9XSDbAMlDT2aHVnogBiH0hMGNHtim6dN9Zgp1bzW3oj+ZWs4bU5mkzqw/Qnuay4UcjF9FJfHEP6n
7NlLJR+KXjZQ09HwfN+Dicxk6lbKmzcM3jafUEsDBBQAAgAIAKJbA0mkS+JopwAAAIoBAABYABwA
aHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvYmxvYi11cmwtZG9lcy1u
b3QtbWF0Y2gtc291cmNlLXNlbGYtc3RkZXJyLnR4dFVUCQAD8DeiV/A3old1eAsAAQT1AQAABBQA
AADdj7EOgjAURXe/oiMOUFoBhcRBiSYORhJGY8izvGC1UvKoJvy9GAf9Brdzp3PuUYhMplkYBUkq
Tkw7vEM/tKoq0RVkOyQ3sF43LRiDNUOipS/kfBEz77bVzRp6PJyvqNyGyFK1a59gdA0O6ynz9O8C
x3hpH6QwB3VBnlvCPdYavuSLOJGBjEI+qp11Q4c9LwwMSHyUfahavfsCxYxukUmZzibHfzjxAlBL
AwQKAAAAAACkWwNJAAAAAAAAAAAAAAAARAAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNl
Y3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvVVQJAAP0N6JXvz6iV3V4CwAB
BPUBAAAEFAAAAFBLAwQUAAIACACkWwNJGOfqlOkAAAAmAwAAeQAcAGh0dHAvdGVzdHMvc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvdXBncmFk
ZS1pbnNlY3VyZS1hdWRpby12aWRlby1pbi1tYWluLWZyYW1lLXN0ZGVyci50eHRVVAkAA/Q3olf0
N6JXdXgLAAEE9QEAAAQUAAAAzVE9T8MwEN35FTfCQGKnURu8VSmoAwOKylR1MM61WMR2ONsM/Hqu
pUIMCCSGgrzc+d6X9NZSqupKiaZoKrGB5Wp11+Fzxphga3ef1pZQJ7wmCtQG59AnBehNyD4hYQ/a
A+6PCrInNGHn7St/P6Y0AmEcg48ItRBn6+8dGX9cF7bv0KB9we7Ib/UwPGjzpFjxcPhCH84PMeBS
VtPp7AK2PO9BqixlNSsEP6maup6UzAqZDMYysVvhxvqnbLwushtvrNfDfXc79xzQhYTzvmexqEC/
D/DhxDTGQqbhdyHkySuR/7gS+VeVvAFQSwMECgAAAAAApFsDSQAAAAAAAAAAAAAAAD0AHABodHRw
L3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS91c2VyQWdlbnRTaGFkb3dET00v
VVQJAAP0N6JXvz6iV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACACjWwNJJLRdYtcAAAD4AQAAUwAc
AGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VzZXJBZ2VudFNoYWRv
d0RPTS9hbGxvdy1hdWRpby1zdGRlcnIudHh0VVQJAAPxN6JX8TeiV3V4CwABBPUBAAAEFAAAAKWQ
QUsDMRCFz+6vmKO9SKNdxSBC3R5aUBBEFIqH2WSahsaZkswq/nuz4s2be3zw3vd4bzkEgAswxp5f
23kL9FmMWZwlcZggq8t0lKyRw/bKtO3lG9ysqB/CrYVC+kClYKB7CaE67mroYKEGE/lm+X+wYtZO
eBfDkFGj8EvUfSfvx0SjWiP7RNlCh25PHuZAjH3thB7dgdiXKeWkz4Xyhneyik7tH7aF0+ZkNqmB
/e9xP7tQKUj+qlweUppCjhx1RD5Vev1p3GDh9bEDJ8zkxu+q5wNT9M03UEsDBBQAAgAIAKRbA0nr
2ylYuwAAAJIBAABTABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kv
dXNlckFnZW50U2hhZG93RE9NL2FsbG93LXZpZGVvLXN0ZGVyci50eHRVVAkAA/M3olfzN6JXdXgL
AAEE9QEAAAQUAAAApZA9i0IxEEXrfb9iSm3E+MmGZUGfhYKWYrFsMS+ZF4NxIsk8xH9vlO220/LC
3HOYu+gcwBiU0qNPPZwDXbNSk0GIBgMkMYkuMYln9zNX0+nsF75W1HTuW0Mm2VHO6GgbnSsXy1I6
aSjFQLZavA4WTFJHbr3rEoqPfPByrOP5EuiR1sg2UNJQozmShSEQY1Oc0KA5Edv8jpxknyltuI0r
b0T/Y2voVR/9twxs/4Z7/oVCLqZb4XIXQr+6A1BLAwQUAAIACACkWwNJJkDBSIQAAADAAAAAawAc
AGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VzZXJBZ2VudFNoYWRv
d0RPTS9kZWZhdWx0LXNyYy1vYmplY3QtZGF0YS11cmwtYWxsb3dlZC1zdGRlcnIudHh0VVQJAAP0
N6JX9DeiV3V4CwABBPUBAAAEFAAAAJ3MPQoCMRBA4X5PMaU2YtT1J4iwrI2FIFgoiEXMjnEgzEgy
Uby96xVsH4+vKQFgCsbYycqOl4DvbMxsFMW7CEl9wqckJQ6Xhanr+RXWW7yVsLGQkbs95uwCnkgf
rVMMkj4WBlxiHFbN3zIx6Y889joJ7/guFs6HFrwwo9e+9c/LReqqL1BLAwQUAAIACACzWwNJVrvY
qt4AAABSAgAASwAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3Zp
ZGVvLXJlZGlyZWN0LWFsbG93ZWQtc3RkZXJyLnR4dFVUCQADEjiiVxI4old1eAsAAQT1AQAABBQA
AAClkUFLA0EMhc/2V+TYXqTTKtpBhLo9KCgIIgriITubToeOSZnJKv57s+JN8OAeE/K+l7ys+wiw
BOf8YuWX50Af1bmT4ywBMxQNhQ5SNHF8OXOnq/krXGyo7eOlh0rc3VGtGOkp6a5BpSjl08OU+5xn
k/W/yYmTDsgHoyfhG96Kh+f7BoIwU1Dr2cw75tSNcKmkP+vfSow2cWWivQcTZhoFVizaCG9T7AsO
237nI2+HTEN1jdxlKh4aDDvqYA7E2JontBj2lmodd9VjpTJktklB/S+2/WdyNBvl8PffvwBQSwME
FAACAAgAs1sDSQ+Hlte6AAAAkgEAAEwAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1
cml0eVBvbGljeS92aWRlby1yZWRpcmVjdC1hbGxvd2VkMi1zdGRlcnIudHh0VVQJAAMSOKJXEjii
V3V4CwABBPUBAAAEFAAAAKWQPYtCMRBFa9+vmFKbxfiBGETQZ6HglmIhFvOSMQbjRJJ5iP9+o9ht
p+WFuecwd9E6gCEopQdTPZwA3bNSo58QDQZIYhLdYhLP7jBR42n/CLMVNa2ba8gkv5QzOtpG58rF
spQuGkoxkK0Wn4MFk9SRT961CcVH3ns51/F6C/RMa2QbKGmo0ZzJQh+IsSlOaNBciG3+Rk6yy5Q2
fIorb0T/Y2voVp3eVwa27+Fef6GQi+lRuNyG0Kv+AFBLAwQUAAIACACzWwNJVrvYqt4AAABSAgAA
ZgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3ZpZGVvLXdpdGgt
aHR0cC11cmwtYWxsb3dlZC1ieS1jc3AtbWVkaWEtc3JjLXN0YXItc3RkZXJyLnR4dFVUCQADEjii
VxI4old1eAsAAQT1AQAABBQAAAClkUFLA0EMhc/2V+TYXqTTKtpBhLo9KCgIIgriITubToeOSZnJ
Kv57s+JN8OAeE/K+l7ys+wiwBOf8YuWX50Af1bmT4ywBMxQNhQ5SNHF8OXOnq/krXGyo7eOlh0rc
3VGtGOkp6a5BpSjl08OU+5xnk/W/yYmTDsgHoyfhG96Kh+f7BoIwU1Dr2cw75tSNcKmkP+vfSow2
cWWivQcTZhoFVizaCG9T7AsO237nI2+HTEN1jdxlKh4aDDvqYA7E2JontBj2lmodd9VjpTJktklB
/S+2/WdyNBvl8PffvwBQSwMEFAACAAgAtFsDSalzvX2EAAAAwAAAAFkAHABodHRwL3Rlc3RzL3Nl
Y3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS93b3JrZXItYmxvYi1pbmhlcml0cy1jc3AtYmxv
Y2tzLWV2YWwtc3RkZXJyLnR4dFVUCQADEziiVxM4old1eAsAAQT1AQAABBQAAACdzLEKwjAQgOG9
T3GjLmKsog0ilLo4CIKDgjjE9IwH4U6Si+LbW1/B9efna0sAqMEYO2tsvQJ8Z2PmkyjeRUjqEz4l
KXG4LM2imV5hvcVbCRsLGbnfY84u4In00TnFIOljYcQlxnHV/i0Tk/7I46CT8I7vYuF86MALM3od
2vC8XKS++gJQSwMEFAACAAgAtVsDSWOqrGyCAAAAqAAAAEAAHABodHRwL3Rlc3RzL3NlY3VyaXR5
L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtYWxsb3dlZC1zdGRlcnIudHh0VVQJAAMWOKJXFjii
V3V4CwABBPUBAAAEFAAAAC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1NKXtahtnNcrbC
mxepBFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h
0A/YAfg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgAtlsDSWOqrGyCAAAAqAAA
AFIAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtdW5hZmZl
Y3RlZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0VVQJAAMXOKJXFziiV3V4CwABBPUBAAAEFAAA
AC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1NKXtahtnNcrbCmxepBFXRRHth0OHeUgjL
bZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqd
ljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgApFsDSZV8hTeEAAAAGgEAADUAHABodHRwL3Rlc3Rz
L3NlY3VyaXR5L2NvcnMtcG9zdC1yZWRpcmVjdC0zMDEtc3RkZXJyLnR4dFVUCQAD8zeiV/M3old1
eAsAAQT1AQAABBQAAADNzDEKAjEQQNF+TzGlNmJ0JRhEWNbGQhAsFMQiZmdjIMxIMlG8vfEWtp/P
64oHWIJSZrE2cw34zkq1s8jORkjiEj45SSB/1Wql2xtsdngvfmsgIw0HzNl6PAd59FbQc/oYmFCJ
cdp0fygHCvIjT1UPTHsa2cDl2INjInRSW31eNoah+QJQSwMEFAACAAgArFsDSat4+6G1AAAA3AEA
ADoAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi13ZWJzcWwtYWxsb3dlZC1zdGRl
cnIudHh0VVQJAAMDOKJXAziiV3V4CwABBPUBAAAEFAAAAOXPsQrCQAwG4N2nyCQtqCd0kdtE6yJS
aLXOd20qhWtS0jvFt7cVnXwEt/zk+yFJ8zzLNVzIWIfgGXwQAiZoqRLskLxxYILn5d1UIXQQrYHY
gyFAEZZ4pkp2ocNB7Y03Kr0W6or22HpVcJAKp7RjQXXiOriRPdDWo7RmwHdlGlZV30fJJolBg2V2
8Clp/RVa9ygNS5f1SFuqS5S2eUYTXvzqdDoN5uPmfNC68NLSDebxLP2rb19QSwMEFAACAAgArFsD
Sd79uumvAAAA7gAAADIAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi13ZWJzcWwt
c3RkZXJyLnR4dFVUCQADAziiVwM4old1eAsAAQT1AQAABBQAAABlzkELgkAQBeC7v2JOolBt4CX2
FmWXCEFLz7s6hbDOyLRb9O/TqFO3ebzvweRlWZQaLmSsQ/AMPggBE/TUCg5I3jgwwfPyYdoQBkjW
QOzBEKAISxqpml0Y8K72xhuVN5Vq0B57ryoO0uKcdiyoTtwFN7En2m6S1tzxM5mPVTuOSbbJUtBg
mR18R1r/hNYjypVlKEakLXU1Sn99JTNe/Ot8fg3iqTkftK689HSDOI3eUEsDBBQAAgAIAK9bA0mS
g+fr/wAAAPsBAAA9ABwAaHR0cC90ZXN0cy9zZWN1cml0eS9sb2NhbC12aWRlby1zb3VyY2UtZnJv
bS1yZW1vdGUtc3RkZXJyLnR4dFVUCQADCTiiVwk4old1eAsAAQT1AQAABBQAAAClkE1rwzAMhs/L
r9BxPazUTUI2Mwptethgg9Eydgg9OLbshHp28Qf7+PXTynbpNUIXgfQ+et+OMb68o57XZXmAeypo
d+vNHlZUoG2Owws6NTqzQ4si4h4Th27x2Whxy2q9bGq1OMDGenmEBQwigvPu5huDh4AapM8uQVWs
swEo4R8H+BEZq+Z0JiyEJAOefEiE6RpWNxW9ssU+mxWHiOkZYxQGn7wxtHFmcaBDi2qKcBIhtd7p
0eQg0ujd25iG1r+fLP5OD8Ipi4FDK+SAityhEz0xoRfySKHEaa5eI4ZHp/12lBTppTaH6+JqNong
1F9wZ18iofHhi3RdtnZW/ABQSwMEFAACAAgAr1sDSVhm1gCEAAAAwAAAADoAHABodHRwL3Rlc3Rz
L3NlY3VyaXR5L2xvY2FsLXZpZGVvLXNyYy1mcm9tLXJlbW90ZS1zdGRlcnIudHh0VVQJAAMKOKJX
CjiiV3V4CwABBPUBAAAEFAAAAJ3MsQrCMBCA4b1PcaMuYmylGEQodXEQBAcFcYjpGQ/CnSQXxbe3
voLrz8/XlQBQgzF2sbL1HPCdjWlmUbyLkNQnfEpS4nBpzbJtrrDe4q2EjYWMPOwxZxfwRPronWKQ
9LEw4RLjtOr+lolJf+Rx1El4x3excD704IUZvY5tfF4u0lB9AVBLAwQKAAAAAACnWwNJAAAAAAAA
AAAAAAAAIQAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50L1VUCQAD+jeiV78+old1
eAsAAQT1AQAABBQAAABQSwMEFAACAAgAp1sDSSIfiSFBAQAA8gQAAE4AHABodHRwL3Rlc3RzL3Nl
Y3VyaXR5L21peGVkQ29udGVudC9pbnNlY3VyZS1hdWRpby12aWRlby1pbi1tYWluLWZyYW1lLXN0
ZGVyci50eHRVVAkAA/o3olf6N6JXdXgLAAEE9QEAAAQUAAAA5ZJPTwIxEMXP7qeYoxzcsNAFaQwJ
LAdNNCEQownhULqz3Ybakrbrv0/vLHLSk0Hiwbm16fxm3nudNAqgD1nGeyOe9QFfQpax1DgpDPgo
Pe6cj9qq1TDLc7aGqxtbuTEH45SiawhR+BjSNE0mP0bNcNMoYgWMdxiCUHj7SZ1S05YDNRosjwG3
yxXOVlo1XkTt7IOOdeGedgbb07WwpUHPoRCyxhK6gFZsaCZshNyiLcNxqu4D+tavmZaRf2NzOE/O
OkdNsOXBuL0uEVE5/0Zc2xjTSVYHJkvzXk59VFAsJtMljKmgMk2o58Qg9gINioBLpD1X3ddhVY0G
OBiJwWV3Dfs4yJxaBLDOXryjd+CxAukaG4F9kcBOFT37y+jZyaNnvxj9/yJrq2OLXBKdsm195/A4
L+iDWouyzZvePAujy+QDUEsDBBQAAgAIAKdbA0kIlVC+gwAAAMAAAABCABwAaHR0cC90ZXN0cy9z
ZWN1cml0eS9taXhlZENvbnRlbnQvaW5zZWN1cmUtY3NzLWluLWlmcmFtZS1zdGRlcnIudHh0VVQJ
AAP6N6JX+jeiV3V4CwABBPUBAAAEFAAAAJ3MMQoCMRBA0X5PMaU2QjSLGERY1sZCECwUxCJmxzgQ
ZiSZKN7e9Qq2n8/ragRYgDFuvnLGAr6LMXaWJPgEWUPGp2QljpelaVt7hfUWbzVuHBTkYY+l+Ign
0kfvFaPkj4MJ15SmTfe3TEz6I4+jTsI7vouD86GHIMwYdGzj8/KJhuYLUEsDBBQAAgAIALdbA0ne
/brprwAAAO4AAAA/ABwAaHR0cC90ZXN0cy9zZWN1cml0eS9zdG9yYWdlLWJsb2NraW5nLWxvb3Nl
bmVkLXdlYnNxbC1zdGRlcnIudHh0VVQJAAMaOKJXGjiiV3V4CwABBPUBAAAEFAAAAGXOQQuCQBAF
4Lu/Yk6iUG3gJfYWZZcIQUvPuzqFsM7ItFv079OoU7d5vO/B5GVZlBouZKxD8Aw+CAET9NQKDkje
ODDB8/Jh2hAGSNZA7MEQoAhLGqmaXRjwrvbGG5U3lWrQHnuvKg7S4px2LKhO3AU3sSfabpLW3PEz
mY9VO45JtslS0GCZHXxHWv+E1iPKlWUoRqQtdTVKf30lM17863x+DeKpOR+0rrz0dIM4jd5QSwME
FAACAAgAuFsDSd79uumvAAAA7gAAAEMAHABodHRwL3Rlc3RzL3NlY3VyaXR5L3N0b3JhZ2UtYmxv
Y2tpbmctc3RyZW5ndGhlbmVkLXdlYnNxbC1zdGRlcnIudHh0VVQJAAMbOKJXGziiV3V4CwABBPUB
AAAEFAAAAGXOQQuCQBAF4Lu/Yk6iUG3gJfYWZZcIQUvPuzqFsM7ItFv079OoU7d5vO/B5GVZlBou
ZKxD8Aw+CAET9NQKDkjeODDB8/Jh2hAGSNZA7MEQoAhLGqmaXRjwrvbGG5U3lWrQHnuvKg7S4px2
LKhO3AU3sSfabpLW3PEzmY9VO45JtslS0GCZHXxHWv+E1iPKlWUoRqQtdTVKf30lM17863x+DeKp
OR+0rrz0dIM4jd5QSwMEFAACAAgAuVsDSZ8bGy3lAAAAmAQAADkAHABodHRwL3Rlc3RzL3NlY3Vy
aXR5L3ZpZGVvLWNyb3NzLW9yaWdpbi1jYWNoaW5nLXN0ZGVyci50eHRVVAkAAx04olcdOKJXdXgL
AAEE9QEAAAQUAAAA7ZJBSwNBDIXP9lfkWC/i6ErtIEK7PSgoCCIK4iE7k06HjkmZySr+e2fFmzdX
T3oMvPc9kpdFHwCOwRh7NLfNKdBrMaY5SOIwQVaXaSdZI4fHmTmZNU9wtqKuD+cWCuk1lYKBriSE
qlhW09ZCNSbyk8X3wYpZW+F1DH1GjcL3UTetPO8SDdMFsk+ULbToNuThEIixq5nQodsS+zImnPSu
UL7ktayiU/uFbWE62dsflcD+83Afe6FSkPxWudyn9NfIkaMOyNtKr90Od7fwcNOCE2ZyQ99V84Ip
+nGt/v/qr/c+/0HyO1BLAwQUAAIACAC5WwNJDya8VxMBAADnAQAAPwAcAGh0dHAvdGVzdHMvc2Vj
dXJpdHkvdmlkZW8tcG9zdGVyLWNyb3NzLW9yaWdpbi1jcmFzaDItc3RkZXJyLnR4dFVUCQADHTii
Vx04old1eAsAAQT1AQAABBQAAACdTk1LAzEQvfdXzLE9uLtpI9sNIiwtUkGhrBWF0kOanW6D6WTN
R6X/3pSqV1Hm8t68N29eHTuACTAmxpXgFeCHZ4xnxippwAXlsLcuaOrWJbsu+QZu5riN3a0Aj9Q+
oveywxcd9jMZsLPuJGBI0ZjRoP53siYdzpFPKV1buqedFfC6nIGyRKhC2iXPURrdDtbf+dmEVxtY
rFbLBt8j+gA73S1C6L/oXLcNKtRHbND3ljzOpDFbqd4EuIvQwj75E7vowAsOQ3TOOrhi42oyHcEu
4bNJ5Dkbl1mRholpURS5RxWdDqecLKGPap8dev5bvUTn8dDfaZLmuXmoKXU82IB126YWXoC8APh5
ls6SF6Izf+rxCVBLAwQUAAIACADAWwNJYEtmEJEAAAD7AQAARQAcAGh0dHAvdGVzdHMvc2VjdXJp
dHkveHNzLURFTklFRC14c2wtZG9jdW1lbnQtc2VjdXJpdHlPcmlnaW4tc3RkZXJyLnR4dFVUCQAD
JziiVyc4old1eAsAAQT1AQAABBQAAADtjjEOgzAMRXdO4QuEBJZWmWHo0p4BBVMimSSynQpuXzr0
Bh2rv76v90LeSqRJY06AzJk9LJEQVtXire36S+vOdf7qnLOCoXLUw+4iZhjvt3Ewu5CZc6gbJjVf
4MHxGVO7bwQUE0IPSPghQPQglBVRm/PpX8hyuj3kRAd0rYMFJ62MAhMjSC0ls+LchH/oj0PfUEsD
BAoAAAAAAKhbA0kAAAAAAAAAAAAAAAATABwAaHR0cC90ZXN0cy9zdG9yYWdlL1VUCQAD+zeiV78+
old1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAqFsDSd79uumvAAAA7gAAAEUAHABodHRwL3Rlc3Rz
L3N0b3JhZ2UvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXN0ZGVyci50
eHRVVAkAA/s3olf7N6JXdXgLAAEE9QEAAAQUAAAAZc5BC4JAEAXgu79iTqJQbeAl9hZllwhBS8+7
OoWwzsi0W/Tv06hTt3m878HkZVmUGi5krEPwDD4IARP01AoOSN44MMHz8mHaEAZI1kDswRCgCEsa
qZpdGPCu9sYblTeVatAee68qDtLinHYsqE7cBTexJ9puktbc8TOZj1U7jkm2yVLQYJkdfEda/4TW
I8qVZShGpC11NUp/fSUzXvzrfH4N4qk5H7SuvPR0gziN3lBLAwQKAAAAAAC3WwNJAAAAAAAAAAAA
AAAAGgAcAGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvVVQJAAMZOKJXvz6iV3V4CwABBPUBAAAE
FAAAAFBLAwQUAAIACAC3WwNJfn/tF7EAAAABAQAAQQAcAGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvcG9zdC1ibG9iLWNvbnRlbnQtdHlwZS1hc3luYy1zdGRlcnIudHh0VVQJAAMZOKJXGTiiV3V4
CwABBPUBAAAEFAAAAGWNsQrCQBBE+3zFVqKgHjaCB1YmglgoiZhCLC7JKoe522OzUfx7DQRULGd4
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
9WB8Pjz9hr6MR73+YBs40sqdt8hG92ePJeOfqVAZjnWvgd5+6B4dvcsN723hzIR7tfHmuLXFB3Vv
rDeoB0tCbJkSjwbUM7dsuZCKJCgVXOW3TweQq96qIaTw/o8Waqu91A2b8/bBeXB0/+QHcAn+Lxa2
esV/AVBLAwQKAAAAAACrWwNJAAAAAAAAAAAAAAAADQAcAGlldGVzdGNlbnRlci9VVAkAAwI4ole/
PqJXdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAAKtbA0kAAAAAAAAAAAAAAAASABwAaWV0ZXN0Y2Vu
dGVyL2NzczMvVVQJAAMCOKJXvz6iV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAACrWwNJAAAAAAAA
AAAAAAAAJQAcAGlldGVzdGNlbnRlci9jc3MzL2JvcmRlcnNiYWNrZ3JvdW5kcy9VVAkAAwI4ole/
PqJXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAKtbA0mkhri2gwAAAMAAAABVABwAaWV0ZXN0Y2Vu
dGVyL2NzczMvYm9yZGVyc2JhY2tncm91bmRzL2JhY2tncm91bmQtYXR0YWNobWVudC1sb2NhbC1z
Y3JvbGxpbmctc3RkZXJyLnR4dFVUCQADAjiiVwI4old1eAsAAQT1AQAABBQAAACdzD0KwkAQQOE+
p5hSG2ESMbiIEGJjIQgWCmKxbibrwDIj+6N4e+MVbB+PryseoAFEU69NjUDvhLhcBHU2QMwu0lNj
ZvHXFldNe4PNju7Fbw0kkuFAKVlPZ86P3mbyGj8GZlJCmFfd3zIL5x95mnRW2cuoBi7HHpyKkMtT
m56XDTxUX1BLAwQKAAAAAADKWwNJAAAAAAAAAAAAAAAACQAcAGltcG9ydGVkL1VUCQADPDiiV78+
old1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAylsDSQAAAAAAAAAAAAAAAA0AHABpbXBvcnRlZC93
M2MvVVQJAAM8OKJXvz6iV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAADPWwNJAAAAAAAAAAAAAAAA
IAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvVVQJAANGOKJXvz6iV3V4CwABBPUB
AAAEFAAAAFBLAwQKAAAAAADKWwNJAAAAAAAAAAAAAAAAJQAcAGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvaHRtbC9VVAkAAzw4ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAAMpb
A0kAAAAAAAAAAAAAAAAvABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3Nl
bWFudGljcy9VVAkAAzw4ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAAM1bA0kAAAAAAAAA
AAAAAABAABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9l
bWJlZGRlZC1jb250ZW50L1VUCQADQTiiV78+old1eAsAAQT1AQAABBQAAABQSwMECgAAAAAA3VsD
SQAAAAAAAAAAAAAAAE8AHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2Vt
YW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvVVQJAANiOKJXvz6iV3V4CwAB
BPUBAAAEFAAAAFBLAwQUAAIACADKWwNJORutuvQAAADxBQAAZwAcAGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVt
ZW50cy9ldmVudF9jYW5wbGF5LXN0ZGVyci50eHRVVAkAAzw4olc8OKJXdXgLAAEE9QEAAAQUAAAA
7dPBSgMxEAbgs32KOdbLsmkVNYhQtwcFBUFEoXiYTaZpaJyUZFbx7U3UmycpUpAeEzJfMj+Z2eAA
pqCUnrZanQG9ZaWOmhANBkhiEm1iEs9ucaKOT9tnOL/mZbzQEKJzZRuyYJLcNM1o9mtqTv3gipVJ
bilndHTzpV6WorWGUhjIbgPXx3WRl94NCcVHfvSy6uLLJlBdXSHbQElDh2ZFFlogxr7cCT2aNbHN
23X1kCnVvObeiP5haxiPDg73ue0gN7bfwX32hUIupvfi8hDCXt6JPGn/uezZSyXvi15mqP5vDU93
HZjITKbOVTnzisHbP3z/B1BLAwQUAAIACADLWwNJlRGY7+oAAACkBAAAcgAcAGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRp
YS1lbGVtZW50cy9ldmVudF9jYW5wbGF5X25vYXV0b3BsYXktc3RkZXJyLnR4dFVUCQADPTiiVz04
old1eAsAAQT1AQAABBQAAADtk8FKA0EMhs/2KXJsL7LTKspQhLo9KCgIIgrSQ3Y2nQ4dM2Umq/j2
ZktvnmpBeugxIfmSPz+ZdR5gAsbYSWXHFdBXMebiPCaHEbK4TJuUJbB/vzKX19UCpnNqOn9joRC3
j1QKenoNsqpRyKf8bWHIXYyjwezP5MBBeuSz0kPie14mC29PNbjETE40pzWfGEN7wJRCslv/IXmv
FbfatLagjZGOEyyYpU68DL7L2J9he/j0sYnUR3fIbaRsoUa3ohaUzdjoTGjQrdWucpiql0K5N2Me
nNhfbDV+cDY6yfv/f9mPbI6CvM+P/wBQSwMEFAACAAgAy1sDSZy5m3jxAAAADAYAAG4AHABpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRl
bnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfY2FucGxheXRocm91Z2gtc3RkZXJyLnR4dFVUCQADPjii
Vz44old1eAsAAQT1AQAABBQAAADtlMFKA0EMhs/2KXK0F9lpFWUohbo9KCgIIgriITubToeOSZnJ
Kr69s6U3T7YKCj1mSL78+cNk1nmAMRhjx5UdGaD3bMzpSRSHEZK6RGtJGtg/n5uzi+oFJnNqOj+1
kInbW8oZPT0GXdao5CV9WDjmLsbhYLYzOXDQHnlf6EH4mhdi4emuBifM5LS8lZw3jKHdo0sm3cq/
Ee9LxmUpWlkohZH2AismrYUXwXcJe7Ubf+R1HamPrpDbSMlCjW5JLVRAjE3pCQ26VXE1/8mpSB8y
pX4Z8+DUfhFdFj84Gv5j33YYb/Rr/+VAPpB/gvydW/oJUEsDBBQAAgAIAMxbA0mMOUS27QAAAKQE
AAB5ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJl
ZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2NhbnBsYXl0aHJvdWdoX25vYXV0b3Bs
YXktc3RkZXJyLnR4dFVUCQADPziiVz84old1eAsAAQT1AQAABBQAAADdk8FKA0EMhs/2KXJsL7LT
VZRBhLo9KCgIIgriITubTodOM2Umq/j2ZsWTnlYR1GNC8uXPH7LoPUANxti6svM50HMx5mA/JocR
srhMu5QlsH84MofH1SOcLKnt/amFQtxdUSno6S7IukEhn/KLhSn3Mc4miy+TAwcZkDdKD4kveJUs
3F834BIzOdGc1jxhDN2HKfUo/fIu/zJ5rxVn2rSxoI2RvgUWzNIkXgXfZxzUvvmTtrtIQ3SO3EXK
Fhp0a+qgAmJsdSa06DbqavmVW5HcFsrDMZbBif0kWg8/2Zv9Yd9+er1R//LfyWN+/BVQSwMEFAAC
AAgAzFsDSSQmkDbwAAAADAYAAGoAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfbG9hZGVk
ZGF0YS1zdGRlcnIudHh0VVQJAANAOKJXQDiiV3V4CwABBPUBAAAEFAAAAO2UwUoDMRCGz/Yp5the
ZNOtKKEIdXuwUEEQUZAeZrPTNDROSjKr+PZmxZOe1gq97DFh5ps/X0gWrQUoQSldFnpaAr0npWbn
Phj0EMVEOoQoju3Lpbq4KjYwX1Ld2msNibi5o5TQ0pOTXYVCNsQPDWNuvZ+MFn8mO3bSIR8y3QVe
8TZoeL6vwARmMpL3cs0betf8mDLrlV++46+DtbniJjftNeRGT0eBBaNUgbfOthG7tF9+wuvBU7e6
RW48RQ0Vmh01UAAx1nkm1Gj22Wo67lSPiWLnbOmM6F/sfD+js8ng7QTe+ryXgTyQ/4Pc5y/9BFBL
AwQUAAIACADNWwNJFGXVt+0AAACkBAAAdQAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9s
b2FkZWRkYXRhX25vYXV0b3BsYXktc3RkZXJyLnR4dFVUCQADQjiiV0I4old1eAsAAQT1AQAABBQA
AADtk0FLA0EMhc/2V+RoL7JjW5VBhLo9tFBBEFEQD9nZdDp0zJSZrOK/NyvePOmiePCYkHwv8x4z
7zzABIyxk8oez4BeijHTo5gcRsjiMu1TlsD+4dTMzqpHOF9Q0/kLC4W4vaJS0NNdkG2NQj7lVwuH
3MU4Hs2/TQ4cpEfeKD0kXvEmWbi/rsElZnKiPZ15xhjaASqF5OP8dfJeJy51aWdBFyMNAgtmqRNv
gu8y9te++5Oe9pH6aoncRsoWanRbaqECYmxUExp0O3W1DHvVbaHce7YITuwntuYzOhgPUvip3P8T
+Y1ETv4E+St//A1QSwMEFAACAAgAzlsDSdMJVlnqAAAApAQAAG4AHABpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxl
bWVudHMvZXZlbnRfbG9hZGVkbWV0YWRhdGEtc3RkZXJyLnR4dFVUCQADQziiV0M4old1eAsAAQT1
AQAABBQAAADtk8FKA0EMhs/2KXK0F9mx1cogQrs9VFAQRBSKh+xsOh06TcpMVvHtnRVPeqp6EPGY
kHzJn59MOw8wAmPsqLLHp0DP2ZjxURSHEZK6RDtJGtgvJ+bkrHqE8zk1nb+wkInba8oZPd0HXdeo
5CW9WDjkLsbhYPplcuCgPfK20IPwJa/EwsNNDU6YyWnJlZonjKH9MGWy1/76vv6VeF8qZqVpY6E0
RvqdYMWktfAq+C5hf4a3w8t2F6mPFshtpGShRremFiogxqbMhAbdptiVv6fqLlPqzZgHp/YTuxg/
OBj+y/uZf/nr5H1+/BVQSwMEFAACAAgAzlsDSaXcTw7sAAAApAQAAHkAHABpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEt
ZWxlbWVudHMvZXZlbnRfbG9hZGVkbWV0YWRhdGFfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQJAANE
OKJXRDiiV3V4CwABBPUBAAAEFAAAAO2TwUoDMRCGz/Yp5theZNMqLUGEuj0oKAgiCtLDbHaahsaZ
kswqvr1Z8aSntQdBPCbMfPPnC7PsPMAMjLGzyk7nQK/ZmJPjKA4jJHWJ9pI0sH+am9NFtYazFTWd
P7eQidsbyhk9PQTd1qjkJb1ZGHMX42S0/DE5cNAeeVfoQfiKN2Lh8bYGJ8zktNyVmheMof0yZTEo
v37GvxbvS8VFadpZKI2RDgIrJq2FN8F3Cfu0H37keR+pP10it5GShRrdllqogBibMhMadLtiNR/2
qvtMqXe2Ck7tN3b5n9HR5N/bL3gbsi9/nTxkx98BUEsDBBQAAgAIAM9bA0lejsFF6gAAAKQEAABp
ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRl
ZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRzdGFydC1zdGRlcnIudHh0VVQJAANF
OKJXRTiiV3V4CwABBPUBAAAEFAAAAO2TwUoDQQyGz/YpcrQX2bEV6yBCuz1UUBBEFIqH7Gw6HTpN
ykxW8e2dFU96qnoQ8ZiQfMmfn0w7DzACY+yosscToOdszPgoisMISV2inSQN7Jen5mRSPcL5nJrO
X1jIxO015Yye7oOua1Tykl4sHHIX43Aw/TI5cNAeeVvoQfiSV2Lh4aYGJ8zktORKzRPG0H6YcrbX
/vq+/pV4XypmpWljoTRG+p1gxaS18Cr4LmF/hrfDy3YXqY8WyG2kZKFGt6YWKiDGpsyEBt2m2JW/
p+ouU+rNmAen9hO7GD84GP7L+5l/+evkfX78FVBLAwQUAAIACADPWwNJj+MXke4AAACkBAAAdAAc
AGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQt
Y29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9sb2Fkc3RhcnRfbm9hdXRvcGxheS1zdGRlcnIu
dHh0VVQJAANGOKJXRjiiV3V4CwABBPUBAAAEFAAAAN2TwUoDQQyGz/YpcrQX2ekq6iCFuj0oKAgi
CuIhO5tOh46ZMpNVfHuz4kU8rSKox4Tky58/ZNF7gBqMsXVlZ8dAz8WY/b2YHEbI4jJtU5bA/v7Q
HBxVD3CypLb3cwuFuLukUtDTbZB1g0I+5RcLu9zHOJ0svkwOHGRAXis9JD7nVbJwd9WAS8zkRHNa
84QxdB+n1NUo/fIu/yJ5rxWn2rSxoI2RvgUWzNIkXgXfZxzUvvmTHreRhugMuYuULTTo1tSBshlb
nQktuo26Wn7lViQ3hfJwjGVwYj+J1sNPdqZ/2LefXm/Mv/x78pgffwVQSwMEFAACAAgA0FsDSUTm
r6/qAAAADAYAAHwAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfb3JkZXJfY2FucGxheV9j
YW5wbGF5dGhyb3VnaC1zdGRlcnIudHh0VVQJAANHOKJXRziiV3V4CwABBPUBAAAEFAAAAO2UwUoE
MQxAz+5X5Lh7kSmjKEWEdfagoCCIKIiHTCfbLdtNlzaj+PdmxJs3R9nLHBuSl/SVdNl7gBqMsXVl
awP0Xow5OY7JYYQsLtM+ZQnsX87M6Xn1Chcrant/aaEQd3dUCnp6CrJpUMin/GFhzn2Mi9ny1+TA
QQbkg9JD4hteJwvP9w24xExONKY5bxhDN6JLIfke/zZ5rxlXWrS1oIWRRoEFszSJ18H3GYdpv/yk
3T7ScLpG7iJlCw26DXVQATG22hNadFu1Wsbd6rFQHpytghP7g63vMztaTN4O4O2/9mUiT+S/+Es/
AVBLAwQUAAIACADRWwNJ9DeQ3O4AAAAMBgAAdQAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVu
dF9vcmRlcl9jYW5wbGF5X3BsYXlpbmctc3RkZXJyLnR4dFVUCQADSTiiV0k4old1eAsAAQT1AQAA
BBQAAADtlMFKA0EMhs/2KXK0F9lxK8ogQt0eWqggiCiIh+xsOh06JmUmq/j2zoo3b9aCQo8Zki9/
/jCZ9h6gBmNsXdn6FOgtGzM5ieIwQlKXaCtJA/unc3N2UT3D5Yza3l9ZyMTdDeWMnh6CrhtU8pLe
LRxzH+N4NP0xOXDQAXlX6EF4wSux8HjbgBNmclreSs4rxtDt0CWTfslfivcl47oUbSyUwkg7gRWT
NsKr4PuEg9pPf+RlG2mI5shdpGShQbemDiogxrb0hBbdpria/+RUpPeZ0rCMWXBqv4kuix8djf+x
b/seb2//5UA+kH/jln4AUEsDBBQAAgAIANFbA0nTzgpt8AAAAAwGAAB/ABwAaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlh
LWVsZW1lbnRzL2V2ZW50X29yZGVyX2xvYWRlZG1ldGFkYXRhX2xvYWRlZGRhdGEtc3RkZXJyLnR4
dFVUCQADSjiiV0o4old1eAsAAQT1AQAABBQAAADtlEFLBDEMhc/ur8jRvciUWVGKCOvsQUFBEFEQ
D5lOtlu2JkubUfz3dsSbJx0G9rDHhOR76XvQZe8BajDG1pWta6CPbMziJIrDCEldop0kDexfzszp
efUKFytqe39pIRN3d5QzenoKumlQyUv6tHDMfYzz2fLf5MBBB+RDoQfhG16Lhef7Bpwwk9PSKzPv
GEM3QiWT/px/K96XiauytLVQFiONAismbYTXwfcJh2u//ZG3XaShukbuIiULDboNdVABMbZFE1p0
2+JqHveqx0xp8GwVnNpf7JLP7Gg+SmGq3KckH7KePpHFgbx35L/8pV9QSwMEFAACAAgA0lsDSU3W
ebXwAAAADAYAAHgAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfb3JkZXJfbG9hZHN0YXJ0
X3Byb2dyZXNzLXN0ZGVyci50eHRVVAkAA0s4oldLOKJXdXgLAAEE9QEAAAQUAAAA7ZTBSgMxEIbP
9inmaC+yYVuUIELdHlpoQRBREA+z2Wkamk5KMlvx7c2KJz2tLXjZY8LMN3++kMxaC1CCUrosdDkB
ek9KTa58MOghiol0CFEc29drNb0p3uB2TnVr7zQk4mZNKaGlZyfbCoVsiB8aLrn1fjya/Zns2EmH
fMx0F3jJm6Dh5aECE5jJSN7LNUf0rvkxZdorv3zHXwVrc8V9btppyI2eTgILRqkCb5xtI3Zpv/yE
/cFTt1ogN56ihgrNlhoogBjrPBNqNLtsNZ12qqdEsXM2d0b0L3a+n9HFePD2D976vJeBPJDPQe7z
l34CUEsDBBQAAgAIANJbA0lXnv9U8AAAAAwGAABlABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2
ZW50X3BhdXNlLXN0ZGVyci50eHRVVAkAA0w4oldMOKJXdXgLAAEE9QEAAAQUAAAA7ZTBSgMxEIbP
9inm2F5kw7YqQQrt9lBBQRBRkB5ms9M0NJ2UZFbx7c2KJz2tFbzsMWHmmz9fSBatBShBKV0WupwB
vSWlpuc+GPQQxUQ6hiiO7culml0VG7heUd3auYZE3NxRSmjpycmuQiEb4ruGMbfeT0aLX5MdO+mQ
D5nuAt/wNmh4vq/ABGYykvdyzSt613ybctErv3zFvw3W5oplbtpryI2eTgILRqkCb51tI3ZpP/2E
w9FTt1ojN56ihgrNjhoogBjrPBNqNPtsNZ12qsdEsXO2ckb0D3a+n9HZZPD2D976vJeBPJD/gtzn
L/0AUEsDBBQAAgAIANNbA0lGLT206wAAAKQEAABwABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2
ZW50X3BhdXNlX25vYXV0b3BsYXktc3RkZXJyLnR4dFVUCQADTTiiV004old1eAsAAQT1AQAABBQA
AADtk8FKAzEQhs/2KeZoL2XDqpUgQt0eFBQEKQriYTY7TUPjpCSzim/vrHjS09qDIB4TZr7584VZ
9B6gBmNsXdn6BOi1GHM0i8lhhCwu0y5lCewf5+b4tHqCsyW1vT+3UIi7GyoFPd0H2TQo5FN+s3DI
fYzTyeLH5MBBBuSd0kPiK14nCw+3DbjETE70TmteMIbuy5T5qPzyGf86ea8VF9q0taCNkfYCC2Zp
Eq+D7zMOaT/8pOddpOF0idxFyhYadBvqoAJibHUmtOi2arXs96pVoTw4WwYn9htb/2dyMP339gve
xuzLXyeP2fF3UEsDBBQAAgAIANNbA0na/9ah8AAAAAwGAABkABwAaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1l
bnRzL2V2ZW50X3BsYXktc3RkZXJyLnR4dFVUCQADTjiiV044old1eAsAAQT1AQAABBQAAADtlMFK
AzEQhs/2KeZoL7JhLS1BCnV7qFBBEFEQD7PZaRqaTkoyq/j2ZsWTntYWetljwsw3f76QLFoLUIJS
uix0OQX6SEpdX/lg0EMUE+kQoji2r1M1mRVvcLOkurVzDYm4uaeU0NKzk22FQjbETw2X3Ho/Hi3+
TXbspEM+ZroLfMeboOHloQITmMlI3ss17+hd82vKrFd++Ym/DtbmitvctNOQGz0dBRaMUgXeONtG
7NJ++wn7g6dutUJuPEUNFZotNVAAMdZ5JtRodtlqOu5UT4li52zpjOg/7Hw/o4vx4O0M3vq8l4E8
kE9B7vOXfgFQSwMEFAACAAgA1FsDSbMEnxrrAAAApAQAAG8AHABpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVu
dHMvZXZlbnRfcGxheV9ub2F1dG9wbGF5LXN0ZGVyci50eHRVVAkAA084oldPOKJXdXgLAAEE9QEA
AAQUAAAA7ZPBSgMxEIbP9inmaC9lwyrWIELdHhQUBCkK4mE2O01D46Qks4pv76x40tPagyAeE2a+
+fOFWfQeoAZjbF3Zeg70Wow5msXkMEIWl2mXsgT2jyfmeF49wdmS2t6fWyjE3Q2Vgp7ug2waFPIp
v1k45D7G6WTxY3LgIAPyTukh8RWvk4WH2wZcYiYneqc1LxhD92XK6aj88hn/OnmvFRfatLWgjZH2
AgtmaRKvg+8zDmk//KTnXaThdIncRcoWGnQb6qACYmx1JrTotmq17PeqVaE8OFsGJ/YbW/9ncjD9
9/YL3sbsy18nj9nxd1BLAwQUAAIACADUWwNJChN1QO0AAAAMBgAAZwAcAGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1l
bGVtZW50cy9ldmVudF9wbGF5aW5nLXN0ZGVyci50eHRVVAkAA1A4oldQOKJXdXgLAAEE9QEAAAQU
AAAA7ZTBSgNBDIbP9ilytJeyQ1uUQYS6PbRQQRBREA/Z2XQ6dMyUmazi25st3rxZCwo9Zki+/PnD
ZNZ5gDEYY8eVnVRA78WYySgmhxGyuEy7lCWwf74w08vqBa7m1HT+2kIhbm+pFPT0GGRTo5BP+cPC
OXcxDgezH5MDB+mR90oPiZe8Thae7mpwiZmc6JvmvGEM7QFdCsmX/FXyXjNutGhrQQsjHQQWzFIn
XgffZezV7v1Jr7tIfbRAbiNlCzW6DbWgbMZGe0KDbquulj85FclDodwvYx6c2G+idfGDs+E/9u3Y
4x3tv5zIJ/Jv3NJPUEsDBBQAAgAIANVbA0mqIXxv6gAAAAwGAAByABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVs
ZW1lbnRzL2V2ZW50X3BsYXlpbmdfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQJAANROKJXUTiiV3V4
CwABBPUBAAAEFAAAAO2UwUoDMRBAz/Yr5mgvsqEtShChbg8WWhBEFMTDbHaahsZJSWYV/95Z8ebN
VbzsMcPMm8kLk2XnAWZgjJ1Vdm6A3oox87OYHEbI4jIdU5bA/uncLC6qZ7hcUdP5KwuFuN1SKejp
Ici+RiGf8ruFU+5inE6WPyYHDtIj75QeEq95lyw83tbgEjM50ZjmvGIM7YAuheRr/E3yXjOutehg
QQsjDQILZqkT74LvMvbTfvpJL8dI/ekGuY2ULdTo9tRCBcTYaE9o0B3Uahl2q/tCuXe2Ck7sN7a+
z+RkOnr7B29/tS8jeST/xl/6AVBLAwQUAAIACADWWwNJUDvJSO8AAAAMBgAAaAAcAGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9t
ZWRpYS1lbGVtZW50cy9ldmVudF9wcm9ncmVzcy1zdGRlcnIudHh0VVQJAANTOKJXUziiV3V4CwAB
BPUBAAAEFAAAAO2UwUoDMRBAz/Yr5mgvsnErShChbg8KCoKIgvQwm52moXFSklnFv3dWvHnSReyh
xwwzbyYvTOa9B6jBGFtXdnYM9FaMmR3F5DBCFpdpm7IE9s+n5uSsWsL5gtreX1goxN0tlYKeHoOs
GxTyKb9bOOQ+xulk/mty4CAD8l7pIfE1r5KFp7sGXGImJxrTnFeMoRvRpZB8jX+TvNeMSy3aWNDC
SKPAglmaxKvg+4zDtJ9+0ss20nC6Qu4iZQsNujV1UAExttoTWnQbtVrG3eqhUB6cLYIT+42t7zM5
mO69/YO3v9qXPXkXyfVOkH/yl34AUEsDBBQAAgAIANZbA0lYGvfn7QAAAKQEAABzABwAaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50
L21lZGlhLWVsZW1lbnRzL2V2ZW50X3Byb2dyZXNzX25vYXV0b3BsYXktc3RkZXJyLnR4dFVUCQAD
VDiiV1Q4old1eAsAAQT1AQAABBQAAADVk8FKA0EMhs/2KXK0F9lhV5RBhLo9VFAQRBTEQ3Y2nQ6d
ZspMVvHtzYo3T7UU6jEh+fLnD5kNHqAGY2xd2aYG+ijGNGcxOYyQxWXapiyB/euFOb+s3uBqTt3g
ry0U4v6eSkFPz0FWLQr5lD8tnPIQ43Qy+zM5cJAR+aj0kPiWl8nCy0MLLjGTE81pzTvG0O8xpZD8
yL9L3mvFjTatLWhjpL3AglnaxMvgh4yj2m9/0mYbaYwWyH2kbKFFt6IeKiDGTmdCh26trpaj3Irk
qVAejzEPTuwv0Xr4ycn0H/t26PUO9i+7kZujIO/y419QSwMEFAACAAgA11sDSd6t4ADuAAAADAYA
AGoAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfdGltZXVwZGF0ZS1zdGRlcnIudHh0VVQJ
AANVOKJXVTiiV3V4CwABBPUBAAAEFAAAAO2UwUoDMRBAz/Yr5mgvsqFblCBC3R4UFAQRBfEwm52m
oXGmJLOKf29WvHmyixSkxwwzbyYvTBa9B5iBMXZW2boGes/G1CdRHEZI6hJtJWlg/3xq5mfVC5wv
qe39hYVM3N1SzujpMei6QSUv6cPCMfcxTieLncmBgw7I+0IPwte8EgtPdw04YSanJVZy3jCGbkSX
TPo9/o14XzIuS9HGQimMNAqsmLQRXgXfJxym/fIjr9tIw+kKuYuULDTo1tRBBcTYlp7QotsUq3nc
rR4ypcHZMji1P9jlfSZH04O3PXj7q335/+T5gbwj+Td/6SdQSwMEFAACAAgA11sDSe7WR9vyAAAA
ZgYAAHUAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2Vt
YmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfdGltZXVwZGF0ZV9ub2F1dG9wbGF5
LXN0ZGVyci50eHRVVAkAA1Y4oldWOKJXdXgLAAEE9QEAAAQUAAAA7ZTBSgMxEIbP9inmaC+yoa1K
EKFuDwoKgoiCeJjNTtPQOCnJrOLbOyueFIRa0cseE2a++fOFZN55gAkYYyeVnc6AXoox04OYHEbI
4jJtUpbA/uHIzI6rRzhZUNP5UwuFuL2iUtDTXZBVjUI+5VcL+9zFOB7Nf0wOHKRH3ig9JL7gZbJw
f12DS8zkRPe05hljaD9NOdwqv3zEv0zea8WZNq0taGOkncCCWerEy+C7jH3adz/paROpX50jt5Gy
hRrdilqogBgbnQkNurVaLbud6rZQ7p0tghP7ha33M9obD97+wds272UgD+TfIP/VX/p9/jdQSwME
FAACAAgA2FsDSRWR/+CEAAAAwAAAAGwAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfdm9s
dW1lY2hhbmdlLXN0ZGVyci50eHRVVAkAA1c4oldXOKJXdXgLAAEE9QEAAAQUAAAAncy/CsIwEIDx
vU9xoy7S0PqHIEKpi4MgOCiIQ0zPeBDuJLkovr31FVw/Pn5dCQANGGOb2rYLwHc2pp1F8S5CUp/w
KUmJw2Vp5qv6Cust3krYWMjIwx5zdgFPpI/eKQZJHwsTLjFOq+5vmZj0Rx5HnYR3fBcL50MPXpjR
69jG5+UiDdUXUEsDBAoAAAAAAMpbA0kAAAAAAAAAAAAAAABaABwAaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1l
bnRzL2ludGVyZmFjZXMvVVQJAAM8OKJXvz6iV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAADLWwNJ
AAAAAAAAAAAAAAAAZAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1h
bnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9pbnRlcmZhY2VzL1RleHRUcmFj
ay9VVAkAAz04ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAMpbA0lFNEReugAAAJIBAAB5
ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRl
ZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2ludGVyZmFjZXMvVGV4dFRyYWNrL2FjdGl2ZUN1ZXMt
c3RkZXJyLnR4dFVUCQADPDiiVzw4old1eAsAAQT1AQAABBQAAAClkD2LAjEQhuvbXzGlNmL8QAiH
oLuFgpZicVwxm4wxbJxIMov4741id91ZvjDv8zDvqncAU1BKT8d6Mga6ZaVmoxANBkhiEl1jEs/u
Z6Hm89kvfDfU9m6pIZPsKWd0tIvOlYt1KXUaSjGQrVb/BwsmqSOfvOsTio989HKu4+Ua6Jk2yDZQ
0lCjOZOFwmZsixNaNB2xzZ/ISQ6Z0pZPsfFG9B+2hkH1NfzIwPY93OsvFHIx3QuX+xCG1QNQSwME
FAACAAgAy1sDSZJjkDSDAAAAwAAAAHUAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvaW50ZXJmYWNl
cy9UZXh0VHJhY2svYWRkQ3VlLXN0ZGVyci50eHRVVAkAAz04olc9OKJXdXgLAAEE9QEAAAQUAAAA
ncyxCsIwEIDhvU9xoy7S2BYhiFDq4iAIDgriENMzHoQ7SS6Kb299Bdefn68vAaABY2xT22UN+M7G
tIso3kVI6hM+JSlxuKxM17VXWG/xVsLGQkYe95izC3gifQxOMUj6WJhxiXFe9X/LxKQ/8jjpJLzj
u1g4HwbwwoxepzY9LxdprL5QSwMEFAACAAgA2FsDSYJQelfeAAAA5AMAAHcAHABpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVk
aWEtZWxlbWVudHMvbmV0d29ya1N0YXRlX2R1cmluZ19sb2Fkc3RhcnQtc3RkZXJyLnR4dFVUCQAD
WDiiV1g4old1eAsAAQT1AQAABBQAAADtkUFLAzEQhc/ur5ijXsqGtliCCHV7UKggiCiIh9lkmobG
mZLMKv57s8Wbt/aox4H3vse8txwCwBSMsdPWzhZAn8WY2SSJwwRZXaa9ZI0cXi/NfNG+wdWK+iFc
Wyik91QKBlpLCFVxU007C9WYyDfL48GKWTvhTQxDRo3Cz1G3nbzvE43XLbJPlC106LbkoQVi7Gsm
9Oh2xL6cEk76VCjf8UZW0an9xbZw3pxdnJbw39tRCex/ijv8hUpB8lfl8pDSXyNHjjoiHyu9bjv2
buHloQMnzOTGvavmA1P0zTdQSwMEFAACAAgA2VsDSduTEnmDAAAAwAAAAG4AHABpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVk
aWEtZWxlbWVudHMvbmV0d29ya1N0YXRlX2luaXRpYWwtc3RkZXJyLnR4dFVUCQADWTiiV1k4old1
eAsAAQT1AQAABBQAAACdzLEKwjAQgOG9T3GjLtLQiiWIUOriIAgOCuIQ0zMehDtJLopvb30F15+f
ry8BoAFjbFPbtgN8Z2PaRRTvIiT1CZ+SlDhcVmbZ1VdYb/FWwsZCRh73mLMLeCJ9DE4xSPpYmHGJ
cV71f8vEpD/yOOkkvOO7WDgfBvDCjF6nNj0vF2msvlBLAwQUAAIACADZWwNJ5hRxOegAAABMBQAA
cgAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRk
ZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9wYXVzZWRfZmFsc2VfZHVyaW5nX3BsYXktc3RkZXJy
LnR4dFVUCQADWjiiV1o4old1eAsAAQT1AQAABBQAAADt08FKAzEQBuCz+xRztBfZ0BY1iFC3hxZa
EEQUpIfZZJqGppOSzCq+vVnx5kXb6x4DM99PhplZ5wDGoJQe13pyC/SRlZpchWgwQBKT6BiTeHZv
12p6U2/gbk5t5+41ZJI15YyOVtG5UvFQmvYaSmMgW81OhwWTNJG33nUJxUd+8bJr4uEYqH8tkG2g
pKFBsyMLNRBjWzKhRbMntvmccJLnTGnJ2zj3RvQvW8NldTE6L2GY20kJbH8G9/0vFHIxfRaXuxAG
eZD/KE/rf8ievfTkU9HLDfX7reH1sQETmcn0d1Vq3jF4W30BUEsDBBQAAgAIANpbA0kUpvq26gAA
AKQEAAByABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9l
bWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3BhdXNlZF90cnVlX2R1cmluZ19wYXVzZS1z
dGRlcnIudHh0VVQJAANbOKJXWziiV3V4CwABBPUBAAAEFAAAANWTwUoDQQyGz/YpcmwvZYdalEGE
uj0oWBBEFMRDdjadDp1myky24tubLd48aSm0x4Tky58/ZNZ5gAkYYyeVnVZAn8WYy3FMDiNkcZm2
KUtg/35lptfVB9zMqen8rYVC3C6oFPT0GmRVo5BP+cvCkLsYR4PZv8mBg/TIZ6WHxA+8TBbenmpw
iZmcaE5rdhhDe8CUQvIj/zF5rxV32rS2oI2RDgILZqkTL4PvMvZq9/6kzTZSH90jt5GyhRrdilpQ
NmOjM6FBt1ZXy0luRfJSKPfHmAcn9pdoPfzgYnTGvh17vaP9yzmS//Lj31BLAwQKAAAAAADNWwNJ
AAAAAAAAAAAAAAAAagAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1h
bnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9wbGF5aW5nLXRoZS1tZWRpYS1y
ZXNvdXJjZS9VVAkAA0I4ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAM1bA0nGAEuYvAAA
AOwBAACRABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9l
bWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3BsYXlpbmctdGhlLW1lZGlhLXJlc291cmNl
L3BhdXNlLW1vdmUtdG8tb3RoZXItZG9jdW1lbnQtc3RkZXJyLnR4dFVUCQADQTiiV0E4old1eAsA
AQT1AQAABBQAAAC1kDGLAjEQhevzV0ypjRhdEcIh6G5xB1rKFWIxm4wxGCdLMov4743Hddcplg/m
fR/zVr0DmIFSejbR0wrompWqxiEaDJDEJOpiEs9uv1DzeXWAz4ba3i01ZJIt5YyONtG5crEupbOG
UgxkB6vnwYJJ6shH7/qE4iP/eDnV8dIFeqQvZBsoaajRnMjCBIixLU5o0ZyJbX5FTrLLlL75GBtv
RP9jaxgOPkYvGdj+Dff7Fwq5mG6Fy30I7yTfAVBLAwQUAAIACADNWwNJ6WFWuCUBAAC7AgAAjwAc
AGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQt
Y29udGVudC9tZWRpYS1lbGVtZW50cy9wbGF5aW5nLXRoZS1tZWRpYS1yZXNvdXJjZS9wYXVzZS1t
b3ZlLXdpdGhpbi1kb2N1bWVudC1zdGRlcnIudHh0VVQJAANBOKJXQTiiV3V4CwABBPUBAAAEFAAA
AKWSTU/DMAyGz+xX+MgOTP3YqIjQpK07gATStAkNadohTd00WnCmJOXr1+NOcOHAgfqWyH5e+7UX
nQbIIU1FnohsBvgW0nQ6sU5JCz4qjyfnoyG9L9LZbHqA2xVWnZ4LCEj1I4YgNe5MbEsZUTv/IeCS
OmvHo8W/yYZM7JFbphtH99Q4Ac/rEpQjQhX5j3NepTX1aP/Dn+R5xgwOKDeL5RbmHNDYLrRr7pR1
NmhRBtxiFLBP3oumuSmypriusuQAS+7rCAm0MgA5uvpE78Bjw5odRcgHjBMwfvv04LTmjLOWAC60
WA8BR+lj6agxuvOyt+W8CPdysti/7iTVFr2AUqoWa54OSVasCZVURzYlDJvqKaDvl7Myii39zeZD
GF2MByn8fWBfUEsDBBQAAgAIAM1bA0mqld/Y3QAAAAYDAACPABwAaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1l
bnRzL3BsYXlpbmctdGhlLW1lZGlhLXJlc291cmNlL3BhdXNlLXJlbW92ZS1mcm9tLWRvY3VtZW50
LXN0ZGVyci50eHRVVAkAA0E4oldBOKJXdXgLAAEE9QEAAAQUAAAAzZFBSwNBDIXP9lfkqBfp2C7C
IIW6PSgoCCIK4iE7m06HjkmZySr+e7PizYOHvfSYkPfl5WU9RIAFOOcXc3/RAH1W55bnWQJmKBoK
HaRo4vh66Zpm+QZXG+qGuPJQift7qhUjPSfdtagUpXx5OOUh57PZ+gjJiZOOyEejJ+Fb3oqHl4cW
gjBTUOvZzAfm1E/yr7/27yRGm7g20d6DCTNNAisWbYW3KQ4FR7c/+cj7IdNY3SD3mYqHFsOOepgD
MXa2EzoMe0u1TrvqqVIZM9ukoP4P2/4zOznOv/9H/gZQSwMEFAACAAgAzVsDSbE5O3yHAAAAwAAA
AIEAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGxheWluZy10aGUtbWVkaWEtcmVzb3VyY2UvcGxh
eWJhY2tSYXRlLXN0ZGVyci50eHRVVAkAA0I4oldCOKJXdXgLAAEE9QEAAAQUAAAAlcw9C8IwEIDh
vb/iRl3E2EYhiFDq4iAIDgriENNrPAh3kg/Ff28dHV1fXp62eIAalDL13Cw04Csp1cyCOBsgZhfx
ITET+8tKad1cYb3FW/EbAwm532NK1uOJ8r2zGb3Et4EJlxCmVfsjL/+QiSl/yeOok/COBzFwPnTg
hBldHtv4PG2gvvoAUEsDBBQAAgAIANpbA0kXp/HCgwAAAMAAAAB4ABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVs
ZW1lbnRzL3ByZWxvYWRfcmVmbGVjdHNfbm9uZV9hdXRvcGxheS1zdGRlcnIudHh0VVQJAANbOKJX
WziiV3V4CwABBPUBAAAEFAAAAJ3MsQrCMBCA4b1PcaMu0lCLEkQodXEQBAcFcYjpNR6EO0kuim9v
fQXXn5+vKwGgAWNsU9vWAL6zMctFFO8iJPUJn5KUOFxXpl3XN9js8F7C1kJGHg6Yswt4Jn30TjFI
+liYcYlxXnV/y8SkP/I06SS851EsXI49eGFGr1ObnpeLNFRfUEsDBBQAAgAIANpbA0mWaoU/4wAA
AEwFAABzABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9l
bWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5U3RhdGVfZHVyaW5nX2NhbnBsYXkt
c3RkZXJyLnR4dFVUCQADXDiiV1w4old1eAsAAQT1AQAABBQAAADtk0FLA0EMhc/ur8hRL7JjLcog
Qt0eFBQEEQXpITuTToeOSZnJKv57Z8WbtxZvewy89z3ySBZDAJiBMXbW2vkZ0Gcx5vw0icMEWV2m
nWSNHN4uzPyyXcHVkvohXFsopA9UCga6lxCq4qaathaqMZFvFvuDFbN2wusYhowahV+ibjp53yUa
p1tknyhb6NBtyEMLxNjXTOjRbYl9OSSc9LlQvuO1LKNT+4dt4bg5OjksYeptrwT2v8X97IVKQfJX
5fKQ0kSeyP9Bjhx1RD5Vev2h8b4tvD524ISZ3PhXVfOBKfrmG1BLAwQUAAIACADbWwNJLNJvYfAA
AAAMBgAAegAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3Mv
ZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9yZWFkeVN0YXRlX2R1cmluZ19jYW5wbGF5
dGhyb3VnaC1zdGRlcnIudHh0VVQJAANdOKJXXTiiV3V4CwABBPUBAAAEFAAAAO2UwUoDMRCGz/Yp
5theZNNtUUIR6vZgQUEQUZAeZrPTNDROSjKr+PZmxZOe1gq97DFh5ps/X0iWrQUoQSldFno+BXpP
Ss3OfTDoIYqJdAhRHNuXCzW/LDawWFHd2isNibi5o5TQ0pOTXYVCNsQPDWNuvZ+Mln8mO3bSIR8y
3QVe8zZoeL6vwARmMpL3cs0betf8mFL2yi/f8W+DtbniOjftNeRGT0eBBaNUgbfOthG7tF9+wuvB
U7e6QW48RQ0Vmh01UAAx1nkm1Gj22Wo67lSPiWLnbOWM6F/sfD+js8ng7QTe+ryXgTyQ/4Pc5y/9
BFBLAwQUAAIACADbWwNJyuFD9vAAAAAMBgAAdgAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9yZWFk
eVN0YXRlX2R1cmluZ19sb2FkZWRkYXRhLXN0ZGVyci50eHRVVAkAA144oldeOKJXdXgLAAEE9QEA
AAQUAAAA7ZTBSgMxEIbP9inmaC+yYVuUIELdHlpoQRBREA+z2Wkamk5KMlvx7c2KJz2tLXjZY8LM
N3++kMxaC1CCUros9LQEek9KTa58MOghiol0CFEc29drNb0p3uB2TnVr7zQk4mZNKaGlZyfbCoVs
iB8aLrn1fjya/Zns2EmHfMx0F3jJm6Dh5aECE5jJSN7LNUf0rvkxZdIrv3zHXwVrc8V9btppyI2e
TgILRqkCb5xtI3Zpv/yE/cFTt1ogN56ihgrNlhoogBjrPBNqNLtsNZ12qqdEsXM2d0b0L3a+n9HF
ePD2D976vJeBPJDPQe7zl34CUEsDBBQAAgAIANxbA0kGUGHS5wAAAKQEAAB6ABwAaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21l
ZGlhLWVsZW1lbnRzL3JlYWR5U3RhdGVfZHVyaW5nX2xvYWRlZG1ldGFkYXRhLXN0ZGVyci50eHRV
VAkAA2A4oldgOKJXdXgLAAEE9QEAAAQUAAAA7ZPBSgNBDIbP9ilybC+yQ12UQYS6PVhoQRBREA/Z
2XQ6dJqUmWzFt3dWvHnSgih4TEi+5M9PZr0HmIIxdlrZugZ6ycacnUZxGCGpS7SXpIH907mpL6pn
uJxT2/srC5m4W1HO6Okh6KZBJS/p1cKY+xgno9m3yYGDDsi7Qg/CC16LhcfbBpwwk9OSKzUHjKE7
Ykom/Vh/Kd6XiuvStLVQGiP9TrBi0kZ4HXyfcDjD++Flt480RDfIXaRkoUG3oQ4qIMa2zIQW3bbY
lY9TdZ8pDWbMg1P7iV2MH51M/uX9/L/8RfJXfvwNUEsDBBQAAgAIAN1bA0kXdXhZ8gAAAAwGAABz
ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRl
ZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5U3RhdGVfZHVyaW5nX3BsYXlpbmctc3RkZXJy
LnR4dFVUCQADYTiiV2E4old1eAsAAQT1AQAABBQAAADtlMFKA0EMhs/2KXJsL7JDrZVBhHZ7UFAQ
RBSkh+xsOh06ZspMVvHtzYo3T7YUVDxmSL78+cNk1nmAMRhjx5WdnAK9FmNOjmNyGCGLy7RNWQL7
p6mZnFVLOF9Q0/kLC4W4vaFS0NNDkHWNQj7lNwtD7mIcDWY7kwMH6ZF3Sg+Jr3iVLDze1uASMznR
N815wRjaPboUkk/518l7zZhr0caCFkbaCyyYpU68Cr7L2Kv98Cc9byP10SVyGylbqNGtqYUKiLHR
ntCg26ir5UdORXJfKPfLWAQn9otoXfzgaPSLfTv0eAf7L//k3cnTP07+zi19B1BLAwQUAAIACADd
WwNJ56S2HYMAAADAAAAAbAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9z
ZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9yZWFkeVN0YXRlX2luaXRp
YWwtc3RkZXJyLnR4dFVUCQADYTiiV2E4old1eAsAAQT1AQAABBQAAACdzLEKwjAQgOG9T3GjLtJQ
SyWIUOriIAgOCuIQ0zMehDtJLopvb30F15+fry8BoAFjbFPbtgN8Z2OWiyjeRUjqEz4lKXG4dKZd
1VdYb/FWwsZCRh73mLMLeCJ9DE4xSPpYmHGJcV71f8vEpD/yOOkkvOO7WDgfBvDCjF6nNj0vF2ms
vlBLAwQUAAIACADdWwNJlmHxLNkAAADCAgAAhAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9zcmNf
cmVmbGVjdHNfYXR0cmlidXRlX25vdF9zb3VyY2VfZWxlbWVudHMtc3RkZXJyLnR4dFVUCQADYTii
V2E4old1eAsAAQT1AQAABBQAAADVkDtvwzAMhPf+Co7t4EjKo3a0BQmCDBkKI52CDopEx0L1cCS5
v78snLHoVqAFlzvcEfjIsxByweWqntXPzRscTqeXFm8j5gKdvR5KGe52Z02LGu0HtpiHGDJulXMX
pd8lpCkw0FOf3JTDki/hEVOKCSoxXy+aJ+hIf5UkYy5q5fqYi2wazllfvGMZvQrF6szQX9AYNJWO
oWAozKOxqkKHnlxmXYwP55/Zye5GP+xtUO61PW4CHeBjwY0xhJglqEmAmNczTiNojbowJvcrkPX6
/z74O/a/8eBPUEsDBAoAAAAAAM1bA0kAAAAAAAAAAAAAAABVABwAaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1l
bnRzL3RyYWNrL1VUCQADQTiiV78+old1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAzVsDSQAAAAAA
AAAAAAAAAGMAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNz
L2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvdHJhY2svdHJhY2stZWxlbWVudC9VVAkA
A0E4ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAM1bA0lQ3ea8/QAAAPsBAACCABwAaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250
ZW50L21lZGlhLWVsZW1lbnRzL3RyYWNrL3RyYWNrLWVsZW1lbnQvdHJhY2stYXBpLXRleHR0cmFj
a3Mtc3RkZXJyLnR4dFVUCQADQTiiV0E4old1eAsAAQT1AQAABBQAAAClkD9rwzAQxef6U9zYDA1W
ncYgQiBxhhZaKAmlg8kgSyfZRD0FSaZ/Pn2voV26+raDe+9377VCyKqUt3fzsloeYcUDzX6zPcCa
B6wfU/+MZAZye/SoEh4wS2jLj9pagRoXqjLlEbY+6BOU0KsEFOjmC2OAiBZ0GCmDKDajA6jgDwf4
noRYzFmmPMSsI55DzIxpa7Gsan5lh93o1hIS5idMSTl8DM7xxYUlgYUezRTjrGJuAtnBjVHlIdDr
kPsmvJ09/mz3iozHKKFRukfD6ZBUx0zolD5xKWlaqpeE8YFs2A2aK/3vLeG6uJpNIpD5Le6SS2V0
IX6yL43ez4pvUEsDBBQAAgAIAN1bA0ngSOAOvQAAAOwBAABjABwAaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1l
bnRzL3ZpZGVvXzAwOC1zdGRlcnIudHh0VVQJAANiOKJXYjiiV3V4CwABBPUBAAAEFAAAALWQMWvD
MBCF5+ZX3NgswSI1NaIEXHtIIR1LhtLhLJ0VYeUUpDOl/75KyNYtoeODe9/HvXZ2AGtQSq8rXTdA
31mpp1WIBgMkMYlOMYln9/ms6qb6gpeehtltNGSSd8oZHe2ic+XitZQmDaUYyC7a28GCSbrIo3dz
QvGR914OXTyeAp3TFtkGSho6NAeyUAExDsUJA5qJ2OZ75CQfmdIbj7H3RvQftobHxcPyLgPb63CX
v1DIxfRTuDyH8J/kX1BLAwQUAAIACADdWwNJviTqF4MAAADAAAAAbAAcAGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1l
bGVtZW50cy92aWRlb192b2x1bWVfY2hlY2stc3RkZXJyLnR4dFVUCQADYjiiV2I4old1eAsAAQT1
AQAABBQAAACdzLEKwjAQgOG9T3GjLtJQiyWIUOriIAgOCuIQ0zMehDtJLopvb30F15+fry8BoAFj
bFPbtgN8Z2OWiyjeRUjqEz4lKXG4rEzb1VdYb/FWwsZCRh73mLMLeCJ9DE4xSPpYmHGJcV71f8vE
pD/yOOkkvOO7WDgfBvDCjF6nNj0vF2msvlBLAwQKAAAAAADNWwNJAAAAAAAAAAAAAAAAUgAcAGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29u
dGVudC90aGUtYXVkaW8tZWxlbWVudC9VVAkAA0I4ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBBQA
AgAIAM1bA0n43D7UGgEAACgGAABmABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9o
dG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L3RoZS1hdWRpby1lbGVtZW50L2F1ZGlvXzAw
MS1zdGRlcnIudHh0VVQJAANBOKJXQTiiV3V4CwABBPUBAAAEFAAAAO2PTUsDMRCG7/0Vc2wP3W2y
/VgXFeqq0ENxoQeFUkqaHdNoTJZJVtl/b0oRe/DkTentnWF43nnmrQLIgLEiGxV8AvjhGRsnxklh
gIIkbBwFbdV6xqbZbAOXt7hr1XUBHm29RO+Fwkcd9qUIqBx1BfRta8ygN/81WVsdDshVpGtnF/bZ
FfBUlSCdtShD3MWbd2F03Vt/8RPO+AZ0wDfhOyu3KwwVuQYpdOC1ssIYrAGJroaMz/IJ9F/vtboR
Hh92LxF6R+Rouzhio0s9gL4+nUSAdOVaklgKuce0dIRLrLX4TkM2mfKEj0dprA4udA36tDKiQ0pj
2TFt54f/EglGWwTOL7J/J5GPTyVK13R/wmKU52eLs8XZ4geLT1BLAwQUAAIACADNWwNJ9FcfON4A
AADQAgAAbgAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3Mv
ZW1iZWRkZWQtY29udGVudC90aGUtYXVkaW8tZWxlbWVudC9hdWRpb19jb25zdHJ1Y3Rvci1zdGRl
cnIudHh0VVQJAANCOKJXQjiiV3V4CwABBPUBAAAEFAAAANWQP08DMQzFdz6FRxiuSe4KXLNVrVAH
BnQqU8WQJi4XNX+OxOHzk3LMMCGBvLxnP0s/+yCE7Lhs7xbdLX+B3X7/NOBbwUxwsq87ounLbq0Z
UKN9xwHzFEPGjXLuqPRZQpoHBsaar26ew5Iv4RpTigka0a66/gZOVV9CkjEXtXJjzCT7nnM2kncs
o1eBrM4M/RGNQdPoGAgDMRqxUcXY2KBDf+nkpK8O3+NXuy1+erBBuefhcR3qDT4Sro2plFmCmgWI
9n7Ba4m6VrNQkvs1TvG/3hyKcz/x/4k/f4J+AFBLAwQKAAAAAADjWwNJAAAAAAAAAAAAAAAAKgAc
AGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL1VUCQADajiiV78+old1
eAsAAQT1AQAABBQAAABQSwMEFAACAAgAz1sDScIX9RWiAAAATwIAAEYAHABpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJmYWN0b3J5X29wZW4xMS1zdGRlcnIudHh0
VVQJAANGOKJXRjiiV3V4CwABBPUBAAAEFAAAAO2PsQrCMBRF937FG9vFgIiUbNp2EBWxBTtKmrwh
kPaF9KX4+dbSyS9wcLxwzuXeqq5vtYQDM/aegQmUmdSgERRo6r1DRgM6hpFCIh7kYo+jKBUrUbWN
aLE7WxYNxaDxkwoKKK5kopsxOxh8oTGdGDFMGERzv1jGU3kslsKN9j7d5nkGEjoiB2uBlDPSLIqU
X46U68A02oH3uydnSfU/8SMn3lBLAwQUAAIACADQWwNJvHFs1ZkAAADFAAAAQwAcAGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYmluZGV4X2NvdW50LXN0ZGVyci50
eHRVVAkAA0g4oldIOKJXdXgLAAEE9QEAAAQUAAAAXY6xCsIwFEX3fsUb28WAiJRs2nYQFbEBO0qa
vCGQ9oX0pfj51tLJ8cI5h9u07aOVcGLGITAwgbazHg2CBkND8MhowaQ4UczEi3wacBK1Zi2aTokO
+6tjoShFg79VUURxJ5v8grnR4get7cWEccYo1PPmGC/1uVqDOxNCvi/LAiT0RB62gJQLolZFyj9H
yu1gntzIx8Obi+wLUEsDBBQAAgAIANBbA0m8cWzVmQAAAMUAAABEABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiaW5kZXhfY291bnQyLXN0ZGVyci50eHRVVAkA
A0c4oldHOKJXdXgLAAEE9QEAAAQUAAAAXY6xCsIwFEX3fsUb28WAiJRs2nYQFbEBO0qavCGQ9oX0
pfj51tLJ8cI5h9u07aOVcGLGITAwgbazHg2CBkND8MhowaQ4UczEi3wacBK1Zi2aTokO+6tjoShF
g79VUURxJ5v8grnR4get7cWEccYo1PPmGC/1uVqDOxNCvi/LAiT0RB62gJQLolZFyj9Hyu1gntzI
x8Obi+wLUEsDBBQAAgAIANBbA0m8cWzVmQAAAMUAAABEABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiaW5kZXhfY291bnQzLXN0ZGVyci50eHRVVAkAA0g4oldI
OKJXdXgLAAEE9QEAAAQUAAAAXY6xCsIwFEX3fsUb28WAiJRs2nYQFbEBO0qavCGQ9oX0pfj51tLJ
8cI5h9u07aOVcGLGITAwgbazHg2CBkND8MhowaQ4UczEi3wacBK1Zi2aTokO+6tjoShFg79VUURx
J5v8grnR4get7cWEccYo1PPmGC/1uVqDOxNCvi/LAiT0RB62gJQLolZFyj9Hyu1gntzIx8Obi+wL
UEsDBBQAAgAIANVbA0m8cWzVmQAAAMUAAABJABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9JbmRleGVkREIvaWRib2JqZWN0c3RvcmVfY291bnQtc3RkZXJyLnR4dFVUCQADUjiiV1I4
old1eAsAAQT1AQAABBQAAABdjrEKwjAURfd+xRvbxYCIlGzadhAVsQE7Spq8IZD2hfSl+PnW0snx
wjmH27Tto5VwYsYhMDCBtrMeDYIGQ0PwyGjBpDhRzMSLfBpwErVmLZpOiQ77q2OhKEWDv1VRRHEn
m/yCudHiB63txYRxxijU8+YYL/W5WoM7E0K+L8sCJPREHraAlAuiVkXKP0fK7WCe3MjHw5uL7AtQ
SwMEFAACAAgA1VsDSbxxbNWZAAAAxQAAAEoAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL0luZGV4ZWREQi9pZGJvYmplY3RzdG9yZV9jb3VudDItc3RkZXJyLnR4dFVUCQADUjiiV1I4
old1eAsAAQT1AQAABBQAAABdjrEKwjAURfd+xRvbxYCIlGzadhAVsQE7Spq8IZD2hfSl+PnW0snx
wjmH27Tto5VwYsYhMDCBtrMeDYIGQ0PwyGjBpDhRzMSLfBpwErVmLZpOiQ77q2OhKEWDv1VRRHEn
m/yCudHiB63txYRxxijU8+YYL/W5WoM7E0K+L8sCJPREHraAlAuiVkXKP0fK7WCe3MjHw5uL7AtQ
SwMEFAACAAgA1VsDSQSK6QOfAAAAigEAAEoAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL0luZGV4ZWREQi9pZGJvYmplY3RzdG9yZV9jb3VudDMtc3RkZXJyLnR4dFVUCQADUjiiV1I4
old1eAsAAQT1AQAABBQAAADdj7EKwjAURfd+xRvtYkBESjZtO4iK2IAdJU3eEEj7QvpS/Hxr6eQn
OF4493Bv3TT3RsKRGfvAwATaTnowCBoM9cEjowWT4kgxE0/yqcdRVJq1qFslWuwujoWiFA1+U0kR
xY1s8jPmBotvtLYTI8YJo1CPq2M8V6dyEW5NCJtdUeQgoSPysAqknBG1VKT86Ui5DtwkN/Bh/+I8
q//hxAdQSwMEFAACAAgA11sDSbxxbNWZAAAAxQAAAEsAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL0luZGV4ZWREQi9pZGJvYmplY3RzdG9yZV9kZWxldGU1LXN0ZGVyci50eHRVVAkA
A1Y4oldWOKJXdXgLAAEE9QEAAAQUAAAAXY6xCsIwFEX3fsUb28WAiJRs2nYQFbEBO0qavCGQ9oX0
pfj51tLJ8cI5h9u07aOVcGLGITAwgbazHg2CBkND8MhowaQ4UczEi3wacBK1Zi2aTokO+6tjoShF
g79VUURxJ5v8grnR4get7cWEccYo1PPmGC/1uVqDOxNCvi/LAiT0RB62gJQLolZFyj9Hyu1gntzI
x8Obi+wLUEsDBBQAAgAIANtbA0m8cWzVmQAAAMUAAABOABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRidHJhbnNhY3Rpb24tb25jb21wbGV0ZS1zdGRlcnIudHh0
VVQJAANeOKJXXjiiV3V4CwABBPUBAAAEFAAAAF2OsQrCMBRF937FG9vFgIiUbNp2EBWxATtKmrwh
kPaF9KX4+dbSyfHCOYfbtO2jlXBixiEwMIG2sx4NggZDQ/DIaMGkOFHMxIt8GnAStWYtmk6JDvur
Y6EoRYO/VVFEcSeb/IK50eIHre3FhHHGKNTz5hgv9blagzsTQr4vywIk9EQetoCUC6JWRco/R8rt
YJ7cyMfDm4vsC1BLAwQUAAIACADiWwNJBIrpA58AAACKAQAAWAAcAGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL3RyYW5zYWN0aW9uLWNyZWF0ZV9pbl92ZXJzaW9uY2hh
bmdlLXN0ZGVyci50eHRVVAkAA2c4oldnOKJXdXgLAAEE9QEAAAQUAAAA3Y+xCsIwFEX3fsUb7WJA
REo2bTuIitiAHSVN3hBI+0L6Uvx8a+nkJzheOPdwb90090bCkRn7wMAE2k56MAgaDPXBI6MFk+JI
MRNP8qnHUVSatahbJVrsLo6FohQNflNJEcWNbPIz5gaLb7S2EyPGCaNQj6tjPFenchFuTQibXVHk
IKEj8rAKpJwRtVSk/OlIuQ7cJDfwYf/iPKv/4cQHUEsDBBQAAgAIAONbA0m8cWzVmQAAAMUAAABG
ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvd3JpdGVyLXN0YXJ2
YXRpb24tc3RkZXJyLnR4dFVUCQADajiiV2o4old1eAsAAQT1AQAABBQAAABdjrEKwjAURfd+xRvb
xYCIlGzadhAVsQE7Spq8IZD2hfSl+PnW0snxwjmH27Tto5VwYsYhMDCBtrMeDYIGQ0PwyGjBpDhR
zMSLfBpwErVmLZpOiQ77q2OhKEWDv1VRRHEnm/yCudHiB63txYRxxijU8+YYL/W5WoM7E0K+L8sC
JPREHraAlAuiVkXKP0fK7WCe3MjHw5uL7AtQSwMECgAAAAAA4FsDSQAAAAAAAAAAAAAAAAoAHABp
bnNwZWN0b3IvVVQJAANkOKJXvz6iV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAADgWwNJAAAAAAAA
AAAAAAAAEwAcAGluc3BlY3Rvci9kZWJ1Z2dlci9VVAkAA2Q4ole/PqJXdXgLAAEE9QEAAAQUAAAA
UEsDBBQAAgAIAOBbA0nEUzZjkgsAALjgAABBABwAaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9u
LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXN0ZGVyci50eHRVVAkAA2Q4oldkOKJXdXgLAAEE
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
IRoMkMQkOsUknt1urqbz2RcsVtR07lVDJvmknNHRR3SubLyVUKuhBAPZwfL3YMEkdeS9d11C8ZG3
Xg51PJ4C/UxrZBsoaajRHMjCCxBjU5zQoGmJbe4jJ9lkSu+8jytvRD+wNQwHT8+9DGxvj7vehUIu
pnPhchdCP/J/I3fD7A8buQBQSwMEFAACAAgAF1wDSQBIYVyLAAAAgAEAADAAHABtZWRpYS9zdmct
YXMtaW1hZ2Utd2l0aC1tZWRpYS1ibG9ja2VkLXN0ZGVyci50eHRVVAkAA844olfOOKJXdXgLAAEE
9QEAAAQUAAAAcyxNV1AwVjA0tDI2sjIxU0gtLzY0NNHLyU9OzFEoKkkuSi3ILyrJzEuPNjc0NTeL
VbBxSU0qTbezUihOzUvxTS0uTkxPDc8syXBOLElNzy+qtFLQyCvNydHkciTb5My8zBKQkcFA0zPz
8zzz0vKtFCICnBWS8/PyUpNLgGJANWWJOZkpFNgyONwPAFBLAwQUAAIACAAZXANJz04p0pAAAAC9
AAAAIQAcAG1lZGlhL3Vuc3VwcG9ydGVkLXJ0c3Atc3RkZXJyLnR4dFVUCQAD0TiiV9E4old1eAsA
AQT1AQAABBQAAABtjkEOgjAUBfee4l9AUKIu2FYREkkIwgGa9kWbYD+2vyTeXl25cTWzmMXkV07B
QGlzR644oIV1+mfr7f5QZMVuk3eBheU1I+aVu9XD0H2pJgcvtfZ2glUpCj/G/vJpF2cRMkPmb6AC
tKBHnNlHHJ2RisMZ0uOZEKUkxWmy5FnIsF8QhMahIWFqm/ZE342SVm9QSwMEFAACAAgAXVwDSWkc
pqW8AAAAkgEAAB8AHABtZWRpYS92aWRlby1zcmMtYmxvYi1zdGRlcnIudHh0VVQJAANSOaJXUjmi
V3V4CwABBPUBAAAEFAAAAKWQTWsCMRCGz+6vmGO9iMGPlSCCXQ8W7LH0UDzMJrPZYJxIMkvx3zeW
3rx1jy/M+zzMux8cwAKU0oulXm2AvrNSy1mIBgMkMYluMYln91WrVb0+w/ZA7eB2GjLJO+WMjk7R
uXLxWkoXDaUYyFb7/4MFkzSRO++GhOIjf3rpm3i9BXqkI7INlDQ0aHqyMAdibIsTWjQXYpvHyEk+
MqU37uLBG9FPbA0v1WQ6ysD2b7jfv1DIxXQvXB5CmFY/UEsDBBQAAgAIAGBcA0k7RutigwAAAMAA
AAAhABwAbWVkaWEvdmlkZW8tc3JjLWNoYW5nZS1zdGRlcnIudHh0VVQJAANTOaJXUzmiV3V4CwAB
BPUBAAAEFAAAAJ3MsQrCMBCA4b1PcaMuQmhrMYhQ6uIgCA4K4hDTMx6EO0kuim9vfQXXn5+vLwGg
BmNs3dh2BfjOxjSLKN5FSOoTPiUpcbh0pu2WV1hv8VbCxkJGHveYswt4In0MTjFI+liYcYlxXvV/
y8SkP/I46SS847tYOB8G8MKMXqc2PS8Xaay+UEsDBAoAAAAAAPlbA0kAAAAAAAAAAAAAAAAIABwA
cGx1Z2lucy9VVAkAA5Y4ole/PqJXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAPlbA0l8ULaargAA
APEAAAAvABwAcGx1Z2lucy9tb3VzZS1jbGljay1pZnJhbWUtdG8tcGx1Z2luLXN0ZGVyci50eHRV
VAkAA5Y4oleWOKJXdXgLAAEE9QEAAAQUAAAATY9LC8IwEITv/oo9qqiBniRXLQgiQir2vCZrG0iy
JQ/9+z5axOPMNwMztVJnJaG3GRAUBUOxtaajDE+bey4fW3OMlAYOxoYORrwCTxjSm94jegKboEd3
X2sOKceiM5mZuLIrnpLYY0ZRt41o6Xa0WTRcoqaP2nEkMWBHwqMW9YNCPmAwjuIJ9cb7eVVtFyDh
xuxgykv5n5NywJROXBLt+Rm+6MLjyPmvMX1aLmYvUEsDBAoAAAAAAO9eA0kAAAAAAAAAAAAAAAAa
ABwAcHl3ZWJzb2NrZXQud3MubG9nLWVyci50eHRVVAkAAyI+olciPqJXdXgLAAEE9QEAAAQUAAAA
UEsDBAoAAAAAAO9eA0kAAAAAAAAAAAAAAAAaABwAcHl3ZWJzb2NrZXQud3MubG9nLW91dC50eHRV
VAkAAyI+olciPqJXdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAAPBeA0kAAAAAAAAAAAAAAAAbABwA
cHl3ZWJzb2NrZXQud3NzLmxvZy1lcnIudHh0VVQJAAMjPqJXIz6iV3V4CwABBPUBAAAEFAAAAFBL
AwQKAAAAAADwXgNJAAAAAAAAAAAAAAAAGwAcAHB5d2Vic29ja2V0Lndzcy5sb2ctb3V0LnR4dFVU
CQADIz6iVyM+old1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAQ18DSUUmHTnRJwAAy6oAAAwAHABy
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
lXqeSPmzkXI5uIm258P+xWlSrhKrxP8kPlBLAwQUAAIACABEXANJvHFs1ZkAAADFAAAALQAcAHN0
b3JhZ2UvaW5kZXhlZGRiL2luZGV4LXBvcHVsYXRpb24tc3RkZXJyLnR4dFVUCQADHzmiVx85old1
eAsAAQT1AQAABBQAAABdjrEKwjAURfd+xRvbxYCIlGzadhAVsQE7Spq8IZD2hfSl+PnW0snxwjmH
27Tto5VwYsYhMDCBtrMeDYIGQ0PwyGjBpDhRzMSLfBpwErVmLZpOiQ77q2OhKEWDv1VRRHEnm/yC
udHiB63txYRxxijU8+YYL/W5WoM7E0K+L8sCJPREHraAlAuiVkXKP0fK7WCe3MjHw5uL7AtQSwME
FAACAAgAR1wDSY3jMdS5BQAATDAAAEUAHABzdG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLW9w
ZW4taW4tdXBncmFkZW5lZWRlZC1wcml2YXRlLXN0ZGVyci50eHRVVAkAAyY5olcmOaJXdXgLAAEE
9QEAAAQUAAAA7VpLc6M4EL7n5J+go6maVIHBPHxz7ElNDjuemmTmjkFOmGDhBRJPLvvbtwUGC5AE
fq09tT4ksaFb/VB/3a1WHqZ3966XRvHHaOTjEKd46qbu3E0wukW9m4fp3SQiBHtpEJGn6BHH7zgW
UUre/iDB328YaIqno1HjUV9BffW3tVgshtrCcXRfVYCzv3QDoiDOAi8u8UM8zYS1k22+z1Y4dqkx
Cej19IJjjFz40XRrqGvawFbRChM/IM83uy31LVqtsI9cgqLi8SdEojVKZTLatJ68xTEmaSlJwgAk
iyhebjhyr5R82R70/TmXM9+uO9d7BZUeIRRk3vQDf9qkZzbfC6MENxh53vynLQI0M4sAUQwWmpQy
gBAsJtO77xjWTdLRKM4/TKLlilL6HJKIVFd5fPM8nCSgyi3ycmcikJdQLwYJ0gzV0o2haZuO7TgD
umC5lB8kKzf1Xj6/UyZwOWuNrc9VhZKXcINAISLj6DsWQKjfA98Ypm0bjm4ZhsK6nCXeC2k48zOH
k115q+axwOaYpwcbI+NkYKMRtYVaxbM67LkId9S5LIooJ2QHA5tDi7LJMDir8R5lS1RnoJ3TXfZc
k9qdpG6c/syxOAElnvFT7JLEzYOywbANWMhKMXZTLOLNEHbLYttUVVW4cXP8HBCG/aG6FRyOgLxH
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
W64fkoohz5u/6xjQ0WMGiDiYjSTvA4AzNjRGoyCNEX+9oUibA/G9YitPW8siYQhDuUJW4ky0SwQC
OSHq9DWj1x/opj40h8MubTBvynbCDY6s1bcdNQKXF8KtNy+FGw1j0eTiEGcCCLUuwTd93TT7w57R
77creiBxdG2kkdjPHEu25cMwTxVsQ/39g43p492CjTLqEGoFz/ZgzUVxR53LRhG1BHXoE31gUDNZ
DM5KtidZEm3Y7Xyku8x5RzrvMMJBJErWVQodCAuqFBAcEVmihz8mtnVN04QLNydLx2PMp8Wl4Fg4
3s7/efD9tWcz5nF6brUv/iZr0AWwY1ur9iZxkC/pIM7/p6GJDjKU00SszjNWlppp82E4zAcYwZgu
H/SG7KzsEu2daJUrMyvLRk9HVj4kdBBNyjUILRh/t9sfWBb8v9e+aE6xJBcV9ljFz9lGqJJivm+W
AbbJPSE2sRullq4Jikb2nPJXpJzD/JI4mM3/BeckonMFqQVdtiszqyDjiR0+ZoipZ5MXjmeY2orl
ZhvNgmu7umVNOfHA1CtDZfi1DI+Kq1d945MH+sxLRFwk7VxlEFdWck2NzIhTFAcryNDZhqNiIMix
PFnENs1vaPaU5ZrpBPWHRqcz7JlGN22JbaYwL7C+J3umxTzBy0y+vTghzXPVIRcYsg+ciLV9ollL
mt0hHT+IfHLkAqGWhV13DrNoy/dc0OeYRxXBdoGLLQyFB2LJeqpYiIOrWRTkccgrbuLYBFnH+RTV
hO0JVMpzFiJSnmb8jqFHMbtuvmWiHunJ48mZr6CUlny9LVaflopZ+qjjIZtmKmVyv+UwyTe3HCLn
Xp7MBMRbEo/6gPxFft1v13OYjgCYHEY90p03j6HNqonlB8KhABkLgEID5cp4YWGWgb9z6D4duzDT
uBBm0ojGD8etBUtgMSkfRHsLpo4lDvNVJD3fOuJbRL/DoafitOK04rTitOK04rTitOK04rTitOK0
4rTitOK04rTitOK04rTitOK04vQ7cVrxVfFVabDitOK04rTitOK04rTitOK04rTitOK04rT6+edJ
fv4pp5fCfEaM+knvR/2k1/LXaycqXsjaO647jsvlF83e0GGtlJW7LwhapbJm4ZI5ShStMlnZ3fRM
27hGIpWTgIV8Toxy3kuvWySvRzS9b8EdTRMnHkV8Xi/FK61G19RefTdVEkw89lRCisN87qgvBRjY
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
MaaE5IXYim5YSiiKouIN860cN9xb