<?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>158719</bug_id>
          
          <creation_ts>2016-06-13 19:37:53 -0700</creation_ts>
          <short_desc>We should be able to generate more types of ICs inline</short_desc>
          <delta_ts>2016-07-05 11:37:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>159408</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>sukolsak</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1202060</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-13 19:37:53 -0700</bug_when>
    <thetext>i.e, we should have support for loads off butterfly, array length,
and maybe a few others. We can architect this by using LinkBuffer
to generate code inline. We can give StructureStubInfo a pointer
and a size into where it generates code. (Maybe we can just get away
with a pointer, and the size will be implied by platform).
This will help when we can emit some things inline instead of using PolymorphicAccess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1202414</commentid>
    <comment_count>1</comment_count>
      <attachid>281305</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-14 18:00:08 -0700</bug_when>
    <thetext>Created attachment 281305
WIP

It works for most tests. But there is a lot more work and refactoring to do to make it nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1202749</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-06-15 16:30:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/26825641&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1202797</commentid>
    <comment_count>3</comment_count>
      <attachid>281418</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-15 17:52:58 -0700</bug_when>
    <thetext>Created attachment 281418
WIP

it&apos;s getting better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1202967</commentid>
    <comment_count>4</comment_count>
      <attachid>281465</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-16 11:49:35 -0700</bug_when>
    <thetext>Created attachment 281465
WIP

Works on arm64 now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203061</commentid>
    <comment_count>5</comment_count>
      <attachid>281496</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-16 15:51:40 -0700</bug_when>
    <thetext>Created attachment 281496
WIP

more ARM64 stuff. Need to do 32-bit arm and x86</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203105</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-16 16:54:21 -0700</bug_when>
    <thetext>Attachment 281496 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/InlineAccess.cpp:55:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/InlineAccess.cpp:59:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:157:  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/jit/Repatch.cpp:512:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:106:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:107:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:108:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:81:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:105:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 9 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203185</commentid>
    <comment_count>7</comment_count>
      <attachid>281525</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-16 19:50:49 -0700</bug_when>
    <thetext>Created attachment 281525
WIP

appears to work on armv7, arm64, x86-32bit.
Going to run perf and clean things up, then I will put up for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203186</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-16 19:51:52 -0700</bug_when>
    <thetext>Attachment 281525 did not pass style-queue:


ERROR: Source/JavaScriptCore/jsc.cpp:37:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/InlineAccess.cpp:60:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/InlineAccess.cpp:64:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:157:  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/jit/Repatch.cpp:509:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:107:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:108:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:85:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:103:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 9 in 26 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>1203252</commentid>
    <comment_count>9</comment_count>
      <attachid>281541</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-17 00:19:51 -0700</bug_when>
    <thetext>Created attachment 281541
WIP

Close to done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203253</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-17 00:21:02 -0700</bug_when>
    <thetext>Attachment 281541 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/Repatch.cpp:511:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:107:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:108:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:85:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:103:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 5 in 24 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>1203444</commentid>
    <comment_count>11</comment_count>
      <attachid>281594</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-17 15:20:47 -0700</bug_when>
    <thetext>Created attachment 281594
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203445</commentid>
    <comment_count>12</comment_count>
      <attachid>281594</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-17 15:21:46 -0700</bug_when>
    <thetext>Comment on attachment 281594
patch

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

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        This makes it much simpler to patch inline ICs. All that&apos;s
&gt; +        needed to patch an inline IC is to memcpy the code from
&gt; +        a macro assembler inline using LinkBuffer.

Also, I will also write here that I think this architecture will extend naturally into us
doing ICs for other things in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203446</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-17 15:22:17 -0700</bug_when>
    <thetext>Attachment 281594 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:107:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:108:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:85:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:103:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 25 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>1203450</commentid>
    <comment_count>14</comment_count>
      <attachid>281594</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-17 15:25:58 -0700</bug_when>
    <thetext>Comment on attachment 281594
patch

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

&gt; Source/JavaScriptCore/bytecode/InlineAccess.cpp:167
&gt; +    CCallHelpers replacementJIT(jit.vm());
&gt; +    auto jumpToSlowPath = replacementJIT.jump();
&gt; +    // We don&apos;t need a nop sled because nobody should jump into the middle of an IC.
&gt; +    bool needsBranchCompaction = false;
&gt; +    LinkBuffer linkBuffer(replacementJIT, stubInfo.patch.start.dataLocation(), replacementJIT.m_assembler.buffer().codeSize(), JITCompilationMustSucceed, needsBranchCompaction);
&gt; +    RELEASE_ASSERT(linkBuffer.isValid());
&gt; +    linkBuffer.link(jumpToSlowPath, stubInfo.slowPathStartLocation());
&gt; +
&gt; +    FINALIZE_CODE(linkBuffer, (&quot;InlineAccess linking a jump to slow path because we ran out of room inline&quot;));

What&apos;s the limiting principle?

Say that we attempt to emit inline code and fail because of size.  Clearly, what we should do, is use PolymorphicAccess instead.  Can you fix this so that this happens?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203451</commentid>
    <comment_count>15</comment_count>
      <attachid>281594</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-17 15:29:10 -0700</bug_when>
    <thetext>Comment on attachment 281594
patch

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

&gt; Source/JavaScriptCore/bytecode/InlineAccess.cpp:136
&gt; +        while (jit.m_assembler.buffer().codeSize() &lt; stubInfo.patch.inlineSize)
&gt; +            jit.nop();

Why are you doing this?  Isn&apos;t this the LinkBuffer&apos;s responsibility?

Also, this is grossly inefficient.  You should be emitting a sled of large nops.  For example, x86 supports up to like 13 byte nops, so even if you are off by a lot, you can still have just one nop instrjuction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203452</commentid>
    <comment_count>16</comment_count>
      <attachid>281594</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-17 15:34:56 -0700</bug_when>
    <thetext>Comment on attachment 281594
patch

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

&gt; Source/JavaScriptCore/jit/Repatch.cpp:365
&gt; +                InlineAccess::generateSelfPropertyReplace(vm, stubInfo, structure, slot.cachedOffset());

Per discussion on IRC, this method and its friends should return false if you fail to generate so you can fall back on addAccessCase code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203488</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-17 17:35:59 -0700</bug_when>
    <thetext>*** Bug 158888 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203620</commentid>
    <comment_count>18</comment_count>
      <attachid>281621</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-19 11:51:37 -0700</bug_when>
    <thetext>Created attachment 281621
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203621</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-19 11:54:47 -0700</bug_when>
    <thetext>Attachment 281621 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/ARM64Assembler.h:1487:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/assembler/ARMv7Assembler.h:2033:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:108:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:109:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:85:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:103:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 28 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>1203622</commentid>
    <comment_count>20</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-19 11:55:33 -0700</bug_when>
    <thetext>Going to run performance tests now and post numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203623</commentid>
    <comment_count>21</comment_count>
      <attachid>281621</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-19 12:30:13 -0700</bug_when>
    <thetext>Comment on attachment 281621
patch

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203624</commentid>
    <comment_count>22</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-19 12:31:22 -0700</bug_when>
    <thetext>Perf numbers:

Benchmark report for SunSpider, V8Spider, Octane, Kraken, and AsmBench on Saams-MacBook-Pro (MacBookPro11,3).

VMs tested:
&quot;og&quot; at /Volumes/Data/WK/b/OpenSource/WebKitBuild/Release/jsc (r202153)
&quot;InlineAccess&quot; at /Volumes/Data/WK/a/OpenSource/WebKitBuild/Release/jsc (r202153)

Collected 15 samples per benchmark/VM, with 15 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.

                                                    og                   InlineAccess                                   
SunSpider:
   3d-cube                                    4.5174+-0.1883            4.5023+-0.2013        
   3d-morph                                   4.7473+-0.0291            4.7390+-0.0278        
   3d-raytrace                                5.1235+-0.1647            5.1196+-0.2577        
   access-binary-trees                        1.8918+-0.0332     ?      1.9480+-0.1582        ? might be 1.0297x slower
   access-fannkuch                            5.4174+-0.1556     ?      5.4567+-0.3207        ?
   access-nbody                               2.3266+-0.0344            2.3078+-0.0301        
   access-nsieve                              3.1924+-0.1498            3.0143+-0.0571          might be 1.0591x faster
   bitops-3bit-bits-in-byte                   1.0071+-0.0191     ?      1.0128+-0.0187        ?
   bitops-bits-in-byte                        2.4539+-0.0169     ?      2.4689+-0.0273        ?
   bitops-bitwise-and                         1.8488+-0.0852            1.8108+-0.0279          might be 1.0210x faster
   bitops-nsieve-bits                         2.9048+-0.1080     ?      2.9717+-0.1847        ? might be 1.0230x slower
   controlflow-recursive                      2.1209+-0.0092     ?      2.2629+-0.1830        ? might be 1.0669x slower
   crypto-aes                                 4.2479+-0.0339     ?      4.2876+-0.0590        ?
   crypto-md5                                 2.4719+-0.0584     ?      2.5302+-0.1734        ? might be 1.0236x slower
   crypto-sha1                                2.5351+-0.0315     ?      2.6102+-0.1912        ? might be 1.0296x slower
   date-format-tofte                          6.3338+-0.1818            6.2670+-0.2319          might be 1.0107x faster
   date-format-xparb                          4.5485+-0.1386            4.4919+-0.0976          might be 1.0126x faster
   math-cordic                                2.5905+-0.0203     ?      2.6733+-0.1568        ? might be 1.0320x slower
   math-partial-sums                          3.7992+-0.1284            3.7858+-0.1069        
   math-spectral-norm                         1.8097+-0.0158     ?      1.8127+-0.0295        ?
   regexp-dna                                 6.1001+-0.1342     ?      6.1028+-0.1047        ?
   string-base64                              3.8417+-0.2196            3.7851+-0.1688          might be 1.0149x faster
   string-fasta                               5.2342+-0.1242            5.1984+-0.0398        
   string-tagcloud                            7.7245+-0.0723     ?      7.9308+-0.1935        ? might be 1.0267x slower
   string-unpack-code                        17.9480+-0.4844     ?     18.3292+-0.7727        ? might be 1.0212x slower
   string-validate-input                      3.9070+-0.1197            3.8222+-0.0804          might be 1.0222x faster

   &lt;arithmetic&gt;                               4.2555+-0.0320     ?      4.2785+-0.0339        ? might be 1.0054x slower

                                                    og                   InlineAccess                                   
V8Spider:
   crypto                                    33.7267+-0.1982     ?     33.9083+-0.2841        ?
   deltablue                                 46.9386+-0.6550           46.6275+-0.8295        
   earley-boyer                              36.8774+-0.2159           36.7914+-0.1981        
   raytrace                                  19.6028+-0.8618           19.1805+-0.3196          might be 1.0220x faster
   regexp                                    51.0353+-0.9752           49.8716+-0.2763          might be 1.0233x faster
   richards                                  40.0663+-0.3924           39.9014+-0.7316        
   splay                                     27.6875+-0.2232           27.6486+-0.3807        

   &lt;geometric&gt;                               35.0198+-0.2977           34.7580+-0.1803          might be 1.0075x faster

                                                    og                   InlineAccess                                   
Octane:
   encrypt                                   0.15017+-0.00075    ?     0.15145+-0.00128       ?
   decrypt                                   2.63250+-0.03544    ^     2.53343+-0.00820       ^ definitely 1.0391x faster
   deltablue                        x2       0.12257+-0.00102          0.12231+-0.00084       
   earley                                    0.27383+-0.00167          0.27264+-0.00123       
   boyer                                     4.72874+-0.07408          4.71461+-0.06944       
   navier-stokes                    x2       4.67139+-0.01427          4.67029+-0.01919       
   raytrace                         x2       0.75466+-0.00320    ?     0.75631+-0.00305       ?
   richards                         x2       0.07840+-0.00097    ?     0.07876+-0.00070       ?
   splay                            x2       0.32159+-0.00115          0.32041+-0.00491       
   regexp                           x2      14.61364+-0.06893    ?    14.62196+-0.08089       ?
   pdfjs                            x2      36.64102+-0.19913         36.58593+-0.19661       
   mandreel                         x2      39.23289+-0.09777         39.20329+-0.10489       
   gbemu                            x2      29.92250+-1.29925    ^    26.91634+-0.61312       ^ definitely 1.1117x faster
   closure                                   0.46720+-0.00292          0.46482+-0.00203       
   jquery                                    6.28531+-0.02468    ?     6.30203+-0.03186       ?
   box2d                            x2       8.78905+-0.05368          8.70978+-0.03516       
   zlib                             x2     344.12271+-3.79571        341.08419+-2.26744       
   typescript                       x2     600.10041+-3.10070    ^   590.34425+-3.74688       ^ definitely 1.0165x faster

   &lt;geometric&gt;                               4.77255+-0.01595    ^     4.72230+-0.01083       ^ definitely 1.0106x faster

                                                    og                   InlineAccess                                   
Kraken:
   ai-astar                                   82.376+-0.920      ?      82.844+-0.851         ?
   audio-beat-detection                       35.772+-0.218      ?      35.781+-0.186         ?
   audio-dft                                  94.371+-0.998      ?      94.427+-1.074         ?
   audio-fft                                  28.351+-0.056      ?      28.365+-0.031         ?
   audio-oscillator                           46.137+-0.055      ?      46.208+-0.131         ?
   imaging-darkroom                           57.825+-0.713             57.477+-0.451         
   imaging-desaturate                         42.150+-0.683             41.907+-0.253         
   imaging-gaussian-blur                      57.918+-1.031             57.505+-0.671         
   json-parse-financial                       32.007+-0.492      ?      32.180+-0.484         ?
   json-stringify-tinderbox                   21.316+-0.479      !      22.790+-0.822         ! definitely 1.0692x slower
   stanford-crypto-aes                        35.715+-0.310      ?      35.985+-0.305         ?
   stanford-crypto-ccm                        29.500+-0.740      ?      29.692+-0.716         ?
   stanford-crypto-pbkdf2                     87.890+-0.687             87.762+-0.528         
   stanford-crypto-sha256-iterative           28.654+-0.218      ?      29.358+-1.258         ? might be 1.0246x slower

   &lt;arithmetic&gt;                               48.570+-0.137      ?      48.734+-0.128         ? might be 1.0034x slower

                                                    og                   InlineAccess                                   
AsmBench:
   bigfib.cpp                               417.7846+-3.4057          416.5540+-1.5975        
   cray.c                                   349.0533+-1.8112          346.6231+-1.0857        
   dry.c                                    397.3668+-2.7515     ?    406.6632+-9.9195        ? might be 1.0234x slower
   FloatMM.c                                686.2389+-4.0255          683.7029+-1.7082        
   gcc-loops.cpp                           3483.5148+-11.5750    ?   3484.4261+-22.3973       ?
   n-body.c                                 766.8353+-3.2524          765.1171+-2.7197        
   Quicksort.c                              375.1290+-3.0965     ?    375.4340+-3.4105        ?
   stepanov_container.cpp                  3137.8769+-17.3410    ?   3148.3259+-19.7186       ?
   Towers.c                                 258.8826+-1.2048     ?    259.8901+-2.3399        ?

   &lt;geometric&gt;                              683.0330+-1.7220     ?    684.1502+-1.5998        ? might be 1.0016x slower

                                                    og                   InlineAccess                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                           29.8228+-0.0695           29.7773+-0.0518          might be 1.0015x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203625</commentid>
    <comment_count>23</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-19 12:32:11 -0700</bug_when>
    <thetext>Also, a --outer 100 run of sun spider.
Still noisy though:

Benchmark report for SunSpider on Saams-MacBook-Pro (MacBookPro11,3).

VMs tested:
&quot;og&quot; at /Volumes/Data/WK/b/OpenSource/WebKitBuild/Release/jsc (r202153)
&quot;InlineAccess&quot; at /Volumes/Data/WK/a/OpenSource/WebKitBuild/Release/jsc (r202153)

Collected 100 samples per benchmark/VM, with 100 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.

                                      og                   InlineAccess                                   

3d-cube                         4.5240+-0.0771            4.5005+-0.0725        
3d-morph                        4.8942+-0.0956     ?      4.9602+-0.1118        ? might be 1.0135x slower
3d-raytrace                     5.2819+-0.1646            5.1774+-0.1597          might be 1.0202x faster
access-binary-trees             2.0175+-0.0731            1.9259+-0.0502          might be 1.0476x faster
access-fannkuch                 5.5262+-0.0779     ?      5.6551+-0.1952        ? might be 1.0233x slower
access-nbody                    2.4586+-0.0777            2.4122+-0.0652          might be 1.0193x faster
access-nsieve                   3.1376+-0.0750     ?      3.1830+-0.0668        ? might be 1.0145x slower
bitops-3bit-bits-in-byte        1.0576+-0.0363            1.0293+-0.0263          might be 1.0275x faster
bitops-bits-in-byte             2.5642+-0.0490            2.5404+-0.0551        
bitops-bitwise-and              1.9002+-0.0340            1.8724+-0.0324          might be 1.0149x faster
bitops-nsieve-bits              2.9335+-0.0561     ?      2.9725+-0.0775        ? might be 1.0133x slower
controlflow-recursive           2.2924+-0.0968            2.2147+-0.0483          might be 1.0351x faster
crypto-aes                      4.4596+-0.0996            4.3827+-0.0700          might be 1.0176x faster
crypto-md5                      2.4925+-0.0474     ?      2.4952+-0.0574        ?
crypto-sha1                     2.6368+-0.0876            2.5865+-0.0589          might be 1.0194x faster
date-format-tofte               6.2944+-0.0908            6.2588+-0.1297        
date-format-xparb               4.5968+-0.0932     ?      4.6150+-0.0850        ?
math-cordic                     2.7359+-0.0768            2.6915+-0.0702          might be 1.0165x faster
math-partial-sums               3.9326+-0.0719            3.8637+-0.0553          might be 1.0178x faster
math-spectral-norm              1.8820+-0.0442     ?      1.9144+-0.1330        ? might be 1.0172x slower
regexp-dna                      6.3474+-0.1052            6.2623+-0.0896          might be 1.0136x faster
string-base64                   3.9416+-0.1063            3.9026+-0.1098          might be 1.0100x faster
string-fasta                    5.2489+-0.0564     ?      5.4911+-0.2166        ? might be 1.0461x slower
string-tagcloud                 8.1685+-0.2024            8.1424+-0.1730        
string-unpack-code             17.5705+-0.2154     ?     17.8504+-0.3205        ? might be 1.0159x slower
string-validate-input           3.9607+-0.1161     ?      4.0558+-0.1246        ? might be 1.0240x slower

&lt;arithmetic&gt;                    4.3406+-0.0189     ?      4.3445+-0.0244        ? might be 1.0009x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203626</commentid>
    <comment_count>24</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-06-19 12:42:47 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/202214</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207658</commentid>
    <comment_count>25</comment_count>
      <attachid>281621</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-07-04 05:14:17 -0700</bug_when>
    <thetext>Comment on attachment 281621
patch

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

&gt; Source/JavaScriptCore/assembler/ARM64Assembler.h:1488
&gt; +    //template &lt;bool isCopyingToExecutableMemory&gt;
&gt; +    static void fillNops(void* base, size_t size, bool isCopyingToExecutableMemory)

Why did you add the new isCopyingToExecutableMemory parameter?
It is always called with constant false. Is it for future use?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207665</commentid>
    <comment_count>26</comment_count>
      <attachid>281594</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-07-04 06:42:49 -0700</bug_when>
    <thetext>Comment on attachment 281594
patch

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

&gt; Source/JavaScriptCore/bytecode/InlineAccess.h:58
&gt; +#if CPU(ARM_THUMB2)
&gt; +        return 48;
&gt; +#else
&gt; +        return 50;
&gt; +#endif

I don&apos;t think if 50 can be good on ARM traditional where all instructions are 4 bytes sized.

&gt; Source/JavaScriptCore/bytecode/InlineAccess.h:78
&gt; +#if CPU(ARM_THUMB2)
&gt; +        return 48;
&gt; +#else
&gt; +        return 50;
&gt; +#endif

ditto

&gt; Source/JavaScriptCore/bytecode/InlineAccess.h:97
&gt; +#if CPU(ARM_THUMB2)
&gt; +        return 30;
&gt; +#else
&gt; +        return 50;
&gt; +#endif

ditto

&gt; Source/JavaScriptCore/bytecode/InlineAccess.h:114
&gt; +    // This is helpful when determining the size of an IC on
&gt; +    // various platforms. When adding a new type of IC, implement
&gt; +    // its placeholder code here, and log the size. That way we
&gt; +    // can intelligently choose sizes on various platforms.
&gt; +    NO_RETURN_DUE_TO_CRASH void dumpCacheSizesAndCrash(VM&amp;);

We can determine the above numbers with this function, don&apos;t we?
Where and how should I call it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207728</commentid>
    <comment_count>27</comment_count>
      <attachid>281594</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-04 20:19:49 -0700</bug_when>
    <thetext>Comment on attachment 281594
patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/InlineAccess.h:114
&gt;&gt; +    NO_RETURN_DUE_TO_CRASH void dumpCacheSizesAndCrash(VM&amp;);
&gt; 
&gt; We can determine the above numbers with this function, don&apos;t we?
&gt; Where and how should I call it?

This function should be static. I made a mistake by not making it static. You can call it from anywhere that executes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207779</commentid>
    <comment_count>28</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-07-05 01:58:17 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Comment on attachment 281594 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=281594&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/bytecode/InlineAccess.h:114
&gt; &gt;&gt; +    NO_RETURN_DUE_TO_CRASH void dumpCacheSizesAndCrash(VM&amp;);
&gt; &gt; 
&gt; &gt; We can determine the above numbers with this function, don&apos;t we?
&gt; &gt; Where and how should I call it?
&gt; 
&gt; This function should be static. I made a mistake by not making it static.
&gt; You can call it from anywhere that executes.

I managed to get these numbers from dumpCacheSizesAndCrash():
array length size: 32
out of line offset cache size: 52
inline offset cache size: 48
replace cache size: 48
replace out of line cache size: 44

But we have these functions with magic numbers:
- sizeForPropertyAccess()
- sizeForPropertyReplace()
- sizeForLengthAccess()

Which belongs to which?
- sizeForPropertyAccess() == array length size ?
- sizeForPropertyReplace() == max(replace cache size,replace out of line cache size) ?
- sizeForLengthAccess() == max(out of line offset cache size, inline offset cache size) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207894</commentid>
    <comment_count>29</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-05 11:35:58 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; Comment on attachment 281594 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=281594&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/JavaScriptCore/bytecode/InlineAccess.h:114
&gt; &gt; &gt;&gt; +    NO_RETURN_DUE_TO_CRASH void dumpCacheSizesAndCrash(VM&amp;);
&gt; &gt; &gt; 
&gt; &gt; &gt; We can determine the above numbers with this function, don&apos;t we?
&gt; &gt; &gt; Where and how should I call it?
&gt; &gt; 
&gt; &gt; This function should be static. I made a mistake by not making it static.
&gt; &gt; You can call it from anywhere that executes.
&gt; 
&gt; I managed to get these numbers from dumpCacheSizesAndCrash():
&gt; array length size: 32
&gt; out of line offset cache size: 52
&gt; inline offset cache size: 48
&gt; replace cache size: 48
&gt; replace out of line cache size: 44
&gt; 
&gt; But we have these functions with magic numbers:
&gt; - sizeForPropertyAccess()
&gt; - sizeForPropertyReplace()
&gt; - sizeForLengthAccess()
&gt; 
&gt; Which belongs to which?
&gt; - sizeForPropertyAccess() == array length size ?
&gt; - sizeForPropertyReplace() == max(replace cache size,replace out of line
&gt; cache size) ?
&gt; - sizeForLengthAccess() == max(out of line offset cache size, inline offset
&gt; cache size) ?

- sizeForPropertyAccess() == max(inline access, out of line access). 
- sizeForPropertyReplace() == what you wrote
- sizeForLengthAccess() == max(array length size, inline access, out of line access). After looking at the code I committed again, I didn&apos;t express this properly in the function. I&apos;ll open a bug to do this. The mistake I made here is that some &quot;length&quot; accesses could be on non-arrays.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207897</commentid>
    <comment_count>30</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-05 11:37:25 -0700</bug_when>
    <thetext>opened a bug:
https://bugs.webkit.org/show_bug.cgi?id=159429</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281305</attachid>
            <date>2016-06-14 18:00:08 -0700</date>
            <delta_ts>2016-06-15 17:52:58 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>21143</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjAyMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsMTEgQEAKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0
Y2guaCIKIAorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUo
SklUKQpAQCAtNjMsNiArNjgsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5
SWRTZWxmKAogICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogfQogCit2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjppbml0QXJyYXlMZW5ndGgoKQoreworICAgIGNhY2hlVHlwZSA9IENhY2hl
VHlwZTo6QXJyYXlMZW5ndGg7Cit9CisKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRC
eUlkUmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgY2FjaGVUeXBlID0gQ2FjaGVU
eXBlOjpQdXRCeUlkUmVwbGFjZTsKQEAgLTg3LDYgKzk3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6ZGVyZWYoKQogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICBjYXNlIENhY2hl
VHlwZTo6R2V0QnlJZFNlbGY6CiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgor
ICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMTAyLDYgKzExMyw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmFib3V0VG9EaWUo
KQogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6CiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgIGNhc2UgQ2Fj
aGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjU3LDYg
KzI2OSw3IEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQKIHsKICAg
ICBzd2l0Y2ggKGNhY2hlVHlwZSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBj
YXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNh
c2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJl
cGxhY2U6CkBAIC0yNzUsNiArMjg4LDExMyBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpjb250
YWluc1BDKHZvaWQqCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdS5zdHViLT5j
b250YWluc1BDKHBjKTsKIH0KLSNlbmRpZgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+
Cit2b2lkIGxpbmtJbmxpbmVPckdvVG9TbG93UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAg
aWYgKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDw9IEpJVElubGluZUNhY2hl
R2VuZXJhdG9yOjpJQ19TSVpFKSB7CisgICAgICAgIHdoaWxlIChqaXQubV9hc3NlbWJsZXIuYnVm
ZmVyKCkuY29kZVNpemUoKSA8IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpJQ19TSVpFKQorICAg
ICAgICAgICAgaml0Lm5vcCgpOworICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKGppdCwgc3R1YkluZm8ucGF0Y2guc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3I6OklDX1NJWkUpOworICAgICAgICBmdW5jdGlvbihsaW5rQnVmZmVy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENDYWxsSGVscGVycyByZWFsSklUKGpp
dC52bSgpKTsKKyAgICBhdXRvIGp1bXBUb1Nsb3dQYXRoID0gcmVhbEpJVC5qdW1wKCk7CisgICAg
d2hpbGUgKHJlYWxKSVQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSA8IEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpJQ19TSVpFKQorICAgICAgICByZWFsSklULm5vcCgpOworCisgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKHJlYWxKSVQsIHN0dWJJbmZvLnBhdGNoLnN0YXJ0LmV4ZWN1
dGFibGVBZGRyZXNzKCksIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpJQ19TSVpFKTsKKyAgICBs
aW5rQnVmZmVyLmxpbmsoanVtcFRvU2xvd1BhdGgsIHN0dWJJbmZvLnBhdGNoLnNsb3dQYXRoKTsK
K30KKwordm9pZCBNb25vbW9ycGhpY0FjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Mo
Vk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwor
CisgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJh
c2VHUFIpOworICAgIEdQUlJlZyB2YWx1ZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2gudmFsdWVHUFIpOworCisgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LmJyYW5j
aDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7CisgICAg
R1BSUmVnIHN0b3JhZ2U7CisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAg
IHN0b3JhZ2UgPSBiYXNlOworICAgIGVsc2UgeworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLAorICAgICAgICAgICAgdmFsdWUpOworICAgICAgICBzdG9yYWdlID0gdmFsdWU7Cisg
ICAgfQorCisgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIHZhbHVlKTsKKworICAgIGxp
bmtJbmxpbmVPckdvVG9TbG93UGF0aChqaXQsIHN0dWJJbmZvLCBbJl0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGJyYW5jaFRvU2xvd1BhdGgsIHN0
dWJJbmZvLnBhdGNoLnNsb3dQYXRoKTsKKyAgICB9KTsKKworICAgIC8vZGF0YUxvZygiUmVwYXRj
aGluZyBzZWxmIGFjY2VzcyFcbiIpOworICAgIC8vZGF0YUxvZygiT2Zmc2V0IHJlbGF0aXZlIHRv
IGJhc2U6ICIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCksICJcbiIpOworICAgIC8vZGF0
YUxvZygiU3RydWN0dXJlIElEOiAiLCBzdHJ1Y3R1cmUtPmlkKCksICJcbiIpOworICAgIC8vZGF0
YUxvZygiSUMgaW5saW5lIHNpemU6ICIsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8u
cGF0Y2guZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pihz
dHViSW5mby5wYXRjaC5zdGFydC5leGVjdXRhYmxlQWRkcmVzcygpKSwgIlxuIik7CisgICAgLy9k
YXRhTG9nKCItLS0tLS0tLS0tXG4iKTsKKyAgICAvL0pJVERpc2Fzc2VtYmxlciBkaXMoY29kZUJs
b2NrKTsKKyAgICAvL2Rpcy5kdW1wRGlzYXNzZW1ibHkoV1RGOjpkYXRhRmlsZSgpLCBzdHViSW5m
by5wYXRjaC5zdGFydCwgc3R1YkluZm8ucGF0Y2guZW5kKTsKKyAgICAvL2RhdGFMb2coIi0tLS0t
LS0tLS1cbiIpOworICAgIHJldHVybjsKK30KKworYm9vbCBNb25vbW9ycGhpY0FjY2Vzczo6aXND
YWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkq
IGFycmF5KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIElz
QXJyYXkpOworCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5m
by5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICBHUFJSZWcgYmFzZSA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CisgICAgR1BSUmVnIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7CisgICAgYWxsb2NhdG9yLmxv
Y2soYmFzZSk7CisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWUpOworICAgIGFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhcnJheS0+aW5kZXhpbmdUeXBl
KCkgPT0gQXJyYXlXaXRoSW50MzIKKyAgICAgICAgfHwgYXJyYXktPmluZGV4aW5nVHlwZSgpID09
IEFycmF5V2l0aERvdWJsZQorICAgICAgICB8fCBhcnJheS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJy
YXlXaXRoQ29udGlndW91czsKK30KKwordm9pZCBNb25vbW9ycGhpY0FjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSog
YXJyYXkpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHVi
SW5mbywgYXJyYXkpKTsKKworICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVy
cyk7CisgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LmJhc2VHUFIpOworICAgIEdQUlJlZyB2YWx1ZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2gudmFsdWVHUFIpOworICAgIGFsbG9jYXRvci5sb2NrKGJhc2UpOworICAgIGFsbG9j
YXRvci5sb2NrKHZhbHVlKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICBBU1NFUlQoIWFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygp
KTsKKworICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5hbmQzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoKTsK
KyAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQuYnJhbmNoMzIoCisgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFy
cmF5LT5pbmRleGluZ1R5cGUoKSkpOworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgaml0
LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgaml0LmJveEludDMyKHZhbHVlLCBKU1ZhbHVlUmVncyh2
YWx1ZSkpOworCisgICAgLy9kYXRhTG9nKCJMZW5ndGggc2l6ZSBnZW5lcmF0ZWQ6ICIsIGppdC5t
X2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICBsaW5rSW5saW5lT3JH
b1RvU2xvd1BhdGgoaml0LCBzdHViSW5mbywgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CisgICAgICAgIGxpbmtCdWZmZXIubGluayhicmFuY2hUb1Nsb3dQYXRoLCBzdHViSW5mby5wYXRj
aC5zbG93UGF0aCk7CisgICAgfSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyMDIwNTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNyArNTcsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgVW5z
ZXQsCiAgICAgR2V0QnlJZFNlbGYsCiAgICAgUHV0QnlJZFJlcGxhY2UsCi0gICAgU3R1YgorICAg
IFN0dWIsCisgICAgQXJyYXlMZW5ndGgKIH07CiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsK
QEAgLTY4LDYgKzY5LDcgQEAgcHVibGljOgogICAgIH5TdHJ1Y3R1cmVTdHViSW5mbygpOwogCiAg
ICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoQ29kZUJsb2NrKiwgU3RydWN0dXJlKiBiYXNlT2JqZWN0
U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgdm9pZCBpbml0QXJyYXlMZW5ndGgoKTsK
ICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqIGJhc2VP
YmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGluaXRTdHViKENvZGVC
bG9jayosIHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4pOwogCkBAIC0xNjUsNiAr
MTY3LDkgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCBidWZmZXJlZFN0cnVjdHVyZXM7CiAg
ICAgCiAgICAgc3RydWN0IHsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQ7CisgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGVuZDsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xv
d1BhdGg7CiAgICAgICAgIGludDhfdCBiYXNlR1BSOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAg
ICAgICAgIGludDhfdCB2YWx1ZVRhZ0dQUjsKQEAgLTE5NSw2ICsyMDAsMTQgQEAgcHVibGljOgog
ICAgIGJvb2wgZXZlckNvbnNpZGVyZWQgOiAxOwogfTsKIAorY2xhc3MgTW9ub21vcnBoaWNBY2Nl
c3MgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgLy9zdGF0aWMgYm9vbCBnZW5lcmF0ZU91dE9mTGluZVByb3BlcnR5QWNjZXNzKFZNJiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGlj
IHZvaWQgZ2VuZXJhdGVBcnJheUxlbmd0aChWTSYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJh
eSopOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mLCBKU0FycmF5Kik7Cit9OworCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRTdHJ1Y3R1cmVT
dHViSW5mb0NvZGVPcmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKQog
ewogICAgIHJldHVybiBzdHJ1Y3R1cmVTdHViSW5mby5jb2RlT3JpZ2luOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjAy
MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDExIEBAIHZvaWQgSklURGlzYXNzZW1ibGVyOjpk
dW1wRGlzYXNzZW1ibHkoUHIKIHsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmcm9tTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZnJvbSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdG9M
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZih0byk7CisgICAgZHVtcERpc2Fzc2VtYmx5
KG91dCwgZnJvbUxvY2F0aW9uLCB0b0xvY2F0aW9uKTsKK30KKwordm9pZCBKSVREaXNhc3NlbWJs
ZXI6OmR1bXBEaXNhc3NlbWJseShQcmludFN0cmVhbSYgb3V0LCBDb2RlTG9jYXRpb25MYWJlbCBm
cm9tTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsIHRvTG9jYXRpb24pCit7CiAgICAgZGlzYXNz
ZW1ibGUoZnJvbUxvY2F0aW9uLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0b0xvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbUxvY2F0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpLCAiICAgICAgICAiLCBvdXQpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwMjA1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDYgKzYzLDggQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYsIExpbmtCdWZmZXImKTsKICAgICB2b2lkIHJlcG9ydFRvUHJvZmlsZXIoUHJvZmlsZXI6
OkNvbXBpbGF0aW9uKiwgTGlua0J1ZmZlciYpOwogCisgICAgdm9pZCBkdW1wRGlzYXNzZW1ibHko
UHJpbnRTdHJlYW0mLCBDb2RlTG9jYXRpb25MYWJlbCBmcm9tLCBDb2RlTG9jYXRpb25MYWJlbCB0
byk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBkdW1wSGVhZGVyKFByaW50U3RyZWFtJiwgTGlua0J1
ZmZlciYpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmaXJzdFNsb3dMYWJlbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDIwMjA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw4ICs3
Niw5IEBAIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmYKICAgICBtX3N0
dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0p1bXAgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKAogICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxv
Y2F0aW9uT2YobV9zdHJ1Y3R1cmVDaGVjaykpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbV9z
dHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFz
dFBhdGgubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CisgICAgaWYgKG1fbG9hZE9yU3RvcmUu
aXNTZXQoKSkKKyAgICAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9y
ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAg
ICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkp
OwogI2Vsc2UKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3Jl
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKICAgICAgICAgY2Fs
bFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fdGFnTG9hZE9yU3RvcmUpKTsK
QEAgLTg4LDYgKzg5LDEyIEBAIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1
ZmYKICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aC5sb2NhdGlvbk9mKG1fc2xv
d1BhdGhCZWdpbikpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCiAgICAgICAgIGNhbGxSZXR1
cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2RvbmUpKTsKKworICAgIGlmIChtX3N0
YXJ0LmlzU2V0KCkpIHsKKyAgICAgICAgbV9zdHViSW5mby0+cGF0Y2guc3RhcnQgPSBmYXN0UGF0
aC5sb2NhdGlvbk9mKG1fc3RhcnQpOworICAgICAgICBtX3N0dWJJbmZvLT5wYXRjaC5lbmQgPSBm
YXN0UGF0aC5sb2NhdGlvbk9mKG1fZG9uZSk7CisgICAgICAgIG1fc3R1YkluZm8tPnBhdGNoLnNs
b3dQYXRoID0gZmFzdFBhdGgubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4pOworICAgIH0KIH0K
IAogdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KQpAQCAtMTE0LDYgKzEyMSwxNiBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2Vu
ZXJhdG9yCiAKIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNy
b0Fzc2VtYmxlciYgaml0KQogeworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBzaXpl
X3Qgc2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpOworICAgIG1fc2xv
d1BhdGhKdW1wID0gaml0Lmp1bXAoKTsKKyAgICAvL21fbG9hZE9yU3RvcmUgPSBqaXQubGFiZWwo
KTsKKyAgICB3aGlsZSAoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgLSBzaXpl
IDwgSUNfU0laRSkKKyAgICAgICAgaml0Lm5vcCgpOworCisgICAgbV9kb25lID0gaml0LmxhYmVs
KCk7CisgICAgcmV0dXJuOworCiAgICAgZ2VuZXJhdGVGYXN0UGF0aENoZWNrcyhqaXQpOwogICAg
IAogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDIwNTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgcHJvdGVjdGVkOgogcHVibGljOgogICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KIAor
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgSUNfU0laRSA9IDMwOworCiBwcm90ZWN0ZWQ6CiAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5m
bzsKQEAgLTcyLDcgKzc0LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgc2xvd1BhdGhCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvd1BhdGhCZWdp
bjsgfQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlQ2hlY2subV9qdW1wOyB9CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd1BhdGhKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UGF0aEp1bXAuaXNTZXQoKSA/IG1f
c2xvd1BhdGhKdW1wIDogbV9zdHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0KIAogICAgIHZvaWQgZmlu
YWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0
aExpbmtCdWZmZXIpOwogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYpOwpAQCAtODksOSAr
OTEsMTEgQEAgcHJvdGVjdGVkOgogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgQXNzZW1ibGVy
TGFiZWwgbV90YWdMb2FkT3JTdG9yZTsKICNlbmRpZgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBtX2NhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9Owog
CiBjbGFzcyBKSVRHZXRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMDIwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAjaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxs
VGFyZ2V0KENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsIGNhbGwpCkBAIC05
MCw2ICs5Miw2MSBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCCiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsK
IH0KIAorc3RhdGljIHZvaWQgZHVtcFNpemVzKFZNJiB2bSkKK3sKKyAgICBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworCisg
ICAgeworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSB2YWx1ZTsKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBq
aXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4aW5nU2hh
cGVNYXNrKSwgdmFsdWUpOworICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCB2YWx1ZSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNB
cnJheSB8IEludDMyU2hhcGUpKTsKKyAgICAgICAgLy9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAg
ICAvLyAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1
ZSk7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAvL2ppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigwKSk7CisgICAgICAgIGppdC5ib3hJbnQzMihzY3JhdGNoR1BSLCBKU1ZhbHVlUmVn
cyh2YWx1ZSkpOworCisgICAgICAgIGRhdGFMb2coImFycmF5IGxlbmd0aCBzaXplOiAiLCBqaXQu
bV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgIlxuIik7CisgICAgfQorCisgICAgewor
ICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICAgICAgaml0LmJyYW5jaDMyKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMTEyMjIxMTEpKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAgICAgICAgICAgIHZhbHVlKTsKKyAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSB2YWx1ZTsKKyAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCAxMTIyMjExMSksIHZhbHVl
KTsKKworICAgICAgICBkYXRhTG9nKCJvdXQgb2YgbGluZSBvZmZzZXQgY2FjaGUgc2l6ZTogIiwg
aml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksICJcbiIpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworCisgICAgICAgIGppdC5icmFuY2gz
MigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDExMjIyMTExKSk7Cisg
ICAgICAgIGppdC5sb2FkNjQoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlLCAxMTIyMjExMSksIHZhbHVlKTsKKworICAgICAgICBkYXRhTG9nKCJpbmxpbmUgb2Zmc2V0
IGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4i
KTsKKyAgICB9CisKK30KKwogc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rp
b25QdHImIHNsb3dQYXRoRnVuY3Rpb24sCkBAIC05OCw2ICsxNTUsOSBAQCBzdGF0aWMgdm9pZCBy
ZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQogICAgIHJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0
aEZ1bmN0aW9uKTsKIAorICAgIFJFTEVBU0VfQVNTRVJUKCFjb21wYWN0KTsKKworCiAgICAgLy8g
UGF0Y2ggdGhlIHN0cnVjdHVyZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCiAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMigKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5k
ZWx0YUNoZWNrSW1tVG9DYWxsKSwKQEAgLTE1OCw5ICsyMTgsMjcgQEAgc3RhdGljIHZvaWQgcmVz
ZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKFN0cgogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIHJlcGxh
Y2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciB0YXJnZXQpCitzdGF0aWMgdm9pZCByZXBsYWNlR2V0QnlJZFNhYW0oVk0mIHZt
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCkK
K3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICBhdXRvIGp1bXAgPSBqaXQuanVt
cCgpOworCisgICAgd2hpbGUgKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDwg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OklDX1NJWkUpCisgICAgICAgIGppdC5ub3AoKTsKKwor
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnBhdGNoLnN0YXJ0LmV4ZWN1
dGFibGVBZGRyZXNzKCksIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpJQ19TSVpFLCBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgdGFyZ2V0KTsK
K30KKworc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFZNJiB2bSwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQogewogICAg
IFJFTEVBU0VfQVNTRVJUKHRhcmdldCk7CisKKyAgICBpZiAoc3R1YkluZm8ucGF0Y2guc3RhcnQu
ZXhlY3V0YWJsZUFkZHJlc3MoKSkgeworICAgICAgICByZXBsYWNlR2V0QnlJZFNhYW0odm0sIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KICAgICAKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2goKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdp
dGhKdW1wKApAQCAtMjQwLDEwICszMTgsMjcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlR2V0QnlJRAogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7
CiAKKyAgICBVTlVTRURfUEFSQU0oZHVtcFNpemVzKTsKKyAgICAvL2R1bXBTaXplcygqY29kZUJs
b2NrLT52bSgpKTsKKwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkKLSAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6QXJyYXlMZW5ndGgpOwotICAgICAgICBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkp
CisgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgeworICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgJiYg
c2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQorICAgICAgICAgICAgICAgICYmICFzbG90Lndh
dGNocG9pbnRTZXQoKQorICAgICAgICAgICAgICAgICYmICFiYXNlVmFsdWUuYXNDZWxsKCktPnN0
cnVjdHVyZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAg
ICAmJiBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlVmFsdWUuYXNDZWxsKCkpID09IEF0dGVtcHRUb0Nh
Y2hlCisgICAgICAgICAgICAgICAgJiYgTW9ub21vcnBoaWNBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZVZhbHVlKSkKKyAgICAgICAg
ICAgICAgICApIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB3
ZSBuZWVkIHRvIHNldCBhIHdhdGNocG9pbnQgb3Igc29tZXRoaW5nPworICAgICAgICAgICAgICAg
IHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAg
IE1vbm9tb3JwaGljQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKCpjb2RlQmxvY2stPnZtKCks
IHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAg
IHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5
TGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpCiAgICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2RlQmxvY2ssIEFj
Y2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCk7CiAgICAgICAgIGVsc2UgaWYgKERpcmVjdEFyZ3VtZW50
cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihiYXNlVmFsdWUp
KSB7CiAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4g
aGFuZGxlIHRoaXMgYXMgYSBub3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKQEAgLTI3Niwy
MCArMzcxLDI0IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAg
ICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZUNl
bGwpOwogICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQogICAgICAgICAgICAg
cmV0dXJuIGFjdGlvbjsKKwogICAgICAgICAKICAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nl
c3MuCiAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAog
ICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKICAgICAgICAgICAgICYmIHNs
b3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9p
bnRTZXQoKQotICAgICAgICAgICAgJiYgaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQo
KSkKLSAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRk
cmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSkK
LSAgICAgICAgICAgICYmIGFjdGlvbiA9PSBBdHRlbXB0VG9DYWNoZQorICAgICAgICAgICAgLy8m
JiBpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgLy8mJiBN
YWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0
UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICYmICFs
b2FkVGFyZ2V0RnJvbVByb3h5KSB7CisKICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0
QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lKSk7CiAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50
cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
LCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIHRydWUpOworICAg
ICAgICAgICAgLy9yZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlk
RnVuY3Rpb24oa2luZCksIHRydWUpOworCisgICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0
QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgIE1vbm9tb3JwaGljQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcygqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRC
eUlkU2VsZihjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CkBAIC0zNzAsNyArNDY5
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OkdldEJ5SWRSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0lu
Zm9Pck51bGwoKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBy
ZXN1bHQuY29kZSgpKTsKKyAgICAgICAgcmVwbGFjZVdpdGhKdW1wKGV4ZWMtPnZtKCksIHN0dWJJ
bmZvLCByZXN1bHQuY29kZSgpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91
bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CkBAIC05NzMs
NiArMTA3MiwxMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiB2b2lkIHJlc2V0R2V0QnlJ
RChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRC
eUlES2luZCBraW5kKQogewogICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2lu
ZCkpOworICAgIGlmIChzdHViSW5mby5wYXRjaC5zdGFydC5leGVjdXRhYmxlQWRkcmVzcygpKSB7
CisgICAgICAgIHJlcGxhY2VHZXRCeUlkU2FhbSgqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywg
c3R1YkluZm8ucGF0Y2guc2xvd1BhdGgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIHJl
c2V0R2V0QnlJRENoZWNrQW5kTG9hZChzdHViSW5mbyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281418</attachid>
            <date>2016-06-15 17:52:58 -0700</date>
            <delta_ts>2016-06-16 11:49:35 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>65627</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDIwODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI3Miw2ICsxMjcyLDggQEAKIAkJNzBFQ0E2MDkxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzJBQUY3Q0QxRDBEMzFCMzAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJBQUY3Q0IxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb24uY3BwICovOyB9OwogCQk3MkFBRjdDRTFEMEQzMUIzMDA1RTYwQkUgLyogSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uaCAqLzsgfTsKKwkJNzkwNUJCNjgxRDEyMDUwRTAwMTlGRTU3IC8qIElu
bGluZUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLzsgfTsK
KwkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJCNjcxRDEyMDUwRTAwMTlG
RTU3IC8qIElubGluZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5MTYwREJEMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTE2MERC
QjFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwICovOyB9OwogCQk3OTE2MERCRTFD
OEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MTYwREJDMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJl
dm9rZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVFRDVD
MDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovOyB9OwpAQCAtMzQ1Myw2ICszNDU1
LDggQEAKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUg
LyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUFjY2Vzcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxp
bmVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQWNjZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYwREJCMUM4RTNFQzgwMDhDMDg1
QSAvKiBQcm94eVJldm9rZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcm94eVJldm9rZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYwREJD
MUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm94eVJldm9rZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjU3Nyw2ICs2NTgxLDggQEAKIAkJCQkwRjAzMzJD
MTE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuY3BwICovLAogCQkJCTBGMDMzMkMy
MThCMDE3NjMwMDVGOTc5QSAvKiBHZXRCeUlkVmFyaWFudC5oICovLAogCQkJCTBGMEI4M0E4MTRC
Q0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICovLAorCQkJCTc5MDVCQjY2MUQxMjA1MEUw
MDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3BwICovLAorCQkJCTc5MDVCQjY3MUQxMjA1MEUwMDE5
RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCAqLywKIAkJCQkxNDhBN0JFRDFCODI5NzVBMDAyRDkxNTcg
LyogSW5saW5lQ2FsbEZyYW1lLmNwcCAqLywKIAkJCQkxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcg
LyogSW5saW5lQ2FsbEZyYW1lLmggKi8sCiAJCQkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8q
IElubGluZUNhbGxGcmFtZVNldC5jcHAgKi8sCkBAIC03MzIxLDYgKzczMjcsNyBAQAogCQkJCTBG
MkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0M0MzOTJBQjFDM0JFQjA1MDAyNDFGNTMgLyogQXNzZW1ibGVy
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhERjgyMDAyQjJBRDcgLyog
REZHT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlG
RTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkUxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05MzAzLDYgKzkzMTAsNyBAQAogCQkJCTBGNkI4QUQ4MUM0RUREQTIw
MDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3
M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTc5MDVCQjY4MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMjcxQUE5MDk1NjAwRDMzQjMzIC8qIFNjb3BlZEFy
Z3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyRjFBQUE4MDY5MDBEMzNCMzMg
LyogU2NvcGVkQXJndW1lbnRzVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyQUJDRjkx
QkVBOUJEMjAwNjQwM0EwIC8qIFJlbW90ZUF1dG9tYXRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyLmgJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDM5ICs2Miw1
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgY2xhc3MgQXNzZW1ibGVyRGF0YSB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgSW5saW5lQ2FwYWNpdHkgPSAxMjg7CiAgICAg
cHVibGljOgogICAgICAgICBBc3NlbWJsZXJEYXRhKCkKLSAgICAgICAgICAgIDogbV9idWZmZXIo
bnVsbHB0cikKLSAgICAgICAgICAgICwgbV9jYXBhY2l0eSgwKQorICAgICAgICAgICAgOiBtX2J1
ZmZlcihtX2lubGluZUJ1ZmZlcikKKyAgICAgICAgICAgICwgbV9jYXBhY2l0eShJbmxpbmVDYXBh
Y2l0eSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQXNzZW1ibGVyRGF0YSh1bnNp
Z25lZCBpbml0aWFsQ2FwYWNpdHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fY2FwYWNpdHkg
PSBpbml0aWFsQ2FwYWNpdHk7Ci0gICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNo
YXIqPihmYXN0TWFsbG9jKG1fY2FwYWNpdHkpKTsKLSAgICAgICAgfQotCiAgICAgICAgIEFzc2Vt
YmxlckRhdGEoQXNzZW1ibGVyRGF0YSYmIG90aGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
X2J1ZmZlciA9IG90aGVyLm1fYnVmZmVyOwotICAgICAgICAgICAgb3RoZXIubV9idWZmZXIgPSBu
dWxscHRyOworICAgICAgICAgICAgaWYgKG90aGVyLmlzSW5saW5lQnVmZmVyKCkpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jYXBhY2l0eSA9PSBJbmxpbmVDYXBhY2l0eSk7Cisg
ICAgICAgICAgICAgICAgbWVtY3B5KG1faW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZl
ciwgSW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gbV9pbmxpbmVC
dWZmZXI7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IG90
aGVyLm1fYnVmZmVyOwogICAgICAgICAgICAgbV9jYXBhY2l0eSA9IG90aGVyLm1fY2FwYWNpdHk7
CisKKyAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgICAgIG90
aGVyLm1fY2FwYWNpdHkgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgQXNzZW1ibGVyRGF0YSYg
b3BlcmF0b3I9KEFzc2VtYmxlckRhdGEmJiBvdGhlcikKICAgICAgICAgewotICAgICAgICAgICAg
bV9idWZmZXIgPSBvdGhlci5tX2J1ZmZlcjsKLSAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChtX2J1ZmZlciAmJiAhaXNJbmxpbmVCdWZmZXIoKSkK
KyAgICAgICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChv
dGhlci5pc0lubGluZUJ1ZmZlcigpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1f
Y2FwYWNpdHkgPT0gSW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgICAgIG1lbWNweShtX2lu
bGluZUJ1ZmZlciwgb3RoZXIubV9pbmxpbmVCdWZmZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAg
ICAgICAgICAgICBtX2J1ZmZlciA9IG1faW5saW5lQnVmZmVyOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbV9idWZmZXIgPSBvdGhlci5tX2J1ZmZlcjsKICAgICAgICAgICAg
IG1fY2FwYWNpdHkgPSBvdGhlci5tX2NhcGFjaXR5OworCisgICAgICAgICAgICBvdGhlci5tX2J1
ZmZlciA9IG51bGxwdHI7CiAgICAgICAgICAgICBvdGhlci5tX2NhcGFjaXR5ID0gMDsKICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCiAgICAgICAgIH5Bc3NlbWJsZXJEYXRh
KCkKICAgICAgICAgewotICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgICAgICAg
ICAgaWYgKG1fYnVmZmVyICYmICFpc0lubGluZUJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIGZh
c3RGcmVlKG1fYnVmZmVyKTsKICAgICAgICAgfQogCiAgICAgICAgIGNoYXIqIGJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CkBAIC0xMDQsMTkgKzExNSwyNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBncm93KHVuc2lnbmVkIGV4dHJhQ2FwYWNpdHkgPSAwKQogICAg
ICAgICB7CiAgICAgICAgICAgICBtX2NhcGFjaXR5ID0gbV9jYXBhY2l0eSArIG1fY2FwYWNpdHkg
LyAyICsgZXh0cmFDYXBhY2l0eTsKLSAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgICAgICAgICBp
ZiAoaXNJbmxpbmVCdWZmZXIoKSkgeworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MobV9jYXBhY2l0eSkpOworICAgICAgICAgICAgICAgIG1l
bWNweShtX2J1ZmZlciwgbV9pbmxpbmVCdWZmZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CiAgICAgICAgIH0KIAogICAgIHBy
aXZhdGU6CisgICAgICAgIGJvb2wgaXNJbmxpbmVCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1
ZmZlciA9PSBtX2lubGluZUJ1ZmZlcjsgfQogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICAg
ICAgY2hhciBtX2lubGluZUJ1ZmZlcltJbmxpbmVDYXBhY2l0eV07CiAgICAgICAgIHVuc2lnbmVk
IG1fY2FwYWNpdHk7CiAgICAgfTsKIAogICAgIGNsYXNzIEFzc2VtYmxlckJ1ZmZlciB7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgaW5pdGlhbENhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoK
ICAgICAgICAgQXNzZW1ibGVyQnVmZmVyKCkKLSAgICAgICAgICAgIDogbV9zdG9yYWdlKGluaXRp
YWxDYXBhY2l0eSkKKyAgICAgICAgICAgIDogbV9zdG9yYWdlKCkKICAgICAgICAgICAgICwgbV9p
bmRleCgwKQogICAgICAgICB7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDM5LDYgKzQzOSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygK
ICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgb3V0LnByaW50Zigi
dW5zZXQiKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJBcnJheUxlbmd0aCIpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lQWNj
ZXNzLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisj
aW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNp
bmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCBzdGF0aWMgdm9pZCBkdW1wQ2FjaGVTaXplc0FuZENyYXNoKFZNJiB2bSkKK3sKKyAgICBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJl
Z1QxOworCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSB2YWx1ZTsKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdmFsdWUpOwor
ICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8IElu
ZGV4aW5nU2hhcGVNYXNrKSwgdmFsdWUpOworICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCB2YWx1ZSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSXNBcnJheSB8IENvbnRpZ3VvdXNTaGFwZSkpOworICAgICAgICAvL2ppdC5icmFuY2hU
ZXN0MzIoCisgICAgICAgIC8vICAgIENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaEdQUiwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3ModmFsdWUsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAg
IC8vaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgaml0LmJveEludDMyKHNjcmF0Y2hH
UFIsIEpTVmFsdWVSZWdzKHZhbHVlKSk7CisKKyAgICAgICAgZGF0YUxvZygiYXJyYXkgbGVuZ3Ro
IHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBq
aXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAw
MGFiMjFjYSkpOworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAg
ICAgdmFsdWUpOworICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHZhbHVlOworICAgICAgICBq
aXQubG9hZDY0KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IDB4MDAwYWIyMWNhKSwgdmFsdWUpOworCisgICAgICAgIGRhdGFMb2coIm91dCBvZiBsaW5lIG9m
ZnNldCBjYWNoZSBzaXplOiAiLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwg
IlxuIik7CisgICAgfQorCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisK
KyAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMHgwMDBhYjIxY2EpKTsKKyAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIDB4MDAwYWIyMWNhKSwgdmFsdWUpOworCisgICAg
ICAgIGRhdGFMb2coImlubGluZSBvZmZzZXQgY2FjaGUgc2l6ZTogIiwgaml0Lm1fYXNzZW1ibGVy
LmJ1ZmZlcigpLmNvZGVTaXplKCksICJcbiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzIGppdCgmdm0pOworCisgICAgICAgIGppdC5icmFuY2gzMigKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MDAwYWIyMWNhKSk7CisKKyAgICAgICAgaml0
LnN0b3JlNjQoCisgICAgICAgICAgICB2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgMHgwMDBhYjIxY2EpKTsKKworICAgICAgICBkYXRhTG9nKCJyZXBsYWNlIGNhY2hlIHNpemU6
ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9CisK
KyAgICBDUkFTSCgpOworfQorCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK0FMV0FZ
U19JTkxJTkUgc3RhdGljIHZvaWQgbGlua0lubGluZU9yR29Ub1Nsb3dQYXRoKGNvbnN0IGNoYXIq
IG5hbWUsIENDYWxsSGVscGVycyYgaml0LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNv
bnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBjb25zdCBib29sIHNob3VsZER1bXBDYWNo
ZVNpemVzQW5kQ3Jhc2ggPSBmYWxzZTsKKyAgICBpZiAoc2hvdWxkRHVtcENhY2hlU2l6ZXNBbmRD
cmFzaCkKKyAgICAgICAgZHVtcENhY2hlU2l6ZXNBbmRDcmFzaCgqaml0LnZtKCkpOworCisgICAg
aWYgKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDw9IHN0dWJJbmZvLnBhdGNo
LmlubGluZVNpemUpIHsKKyAgICAgICAgd2hpbGUgKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5j
b2RlU2l6ZSgpIDwgc3R1YkluZm8ucGF0Y2guaW5saW5lU2l6ZSkKKyAgICAgICAgICAgIGppdC5u
b3AoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCku
Y29kZVNpemUoKSA9PSBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplKTsKKyAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8ucGF0Y2guc3RhcnQuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgc3R1YkluZm8ucGF0Y2guaW5saW5lU2l6ZSk7CisgICAgICAgIGZ1bmN0aW9uKGxpbmtC
dWZmZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgYm9vbCBmYWlsSWZD
YW50SW5saW5lID0gZmFsc2U7CisgICAgaWYgKGZhaWxJZkNhbnRJbmxpbmUpIHsKKyAgICAgICAg
ZGF0YUxvZygiRmFpbHVyZSBmb3I6ICIsIG5hbWUsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJy
ZWFsIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiIGlubGlu
ZSBzaXplOiIsIHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUsICJcbiIpOworICAgICAgICBDUkFT
SCgpOworICAgIH0KKworICAgIENDYWxsSGVscGVycyByZXBsYWNlbWVudEpJVChqaXQudm0oKSk7
CisgICAgYXV0byBqdW1wVG9TbG93UGF0aCA9IHJlcGxhY2VtZW50SklULmp1bXAoKTsKKyAgICAv
LyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgYmVjYXVzZSBub2JvZHkgc2hvdWxkIGp1bXAgaW50
byB0aGUgbWlkZGxlIG9mIGFuIElDLgorICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50SklU
Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPCBzdHViSW5mby5wYXRjaC5pbmxpbmVT
aXplKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIocmVwbGFjZW1lbnRKSVQsIHN0dWJJbmZv
LnBhdGNoLnN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlcGxhY2VtZW50SklULm1fYXNzZW1i
bGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkpOworICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9TbG93
UGF0aCwgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOworfQorCisvLyBGSVhNRTog
MzItYml0Lgordm9pZCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlUHJvcGVydHlBY2Nlc3MoVk0mIHZt
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworCisgICAg
R1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIp
OworICAgIEdQUlJlZyB2YWx1ZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
dmFsdWVHUFIpOworCisgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LmJyYW5jaDMyKAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7CisgICAgR1BSUmVn
IHN0b3JhZ2U7CisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHN0b3Jh
Z2UgPSBiYXNlOworICAgIGVsc2UgeworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LAorICAgICAgICAgICAgdmFsdWUpOworICAgICAgICBzdG9yYWdlID0gdmFsdWU7CisgICAgfQor
CisgICAgY29uc3QgYm9vbCBmb28gPSBmYWxzZTsgCisgICAgaWYgKGZvbykgeworICAgICAgICBk
YXRhTG9nKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkgPyAiaW5saW5lT2Zmc2V0OiAiIDogIm91dE9m
TGluZU9mZnNldDogIiwgb2Zmc2V0LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygic2lkOiAiLCBz
dHJ1Y3R1cmUtPmlkKCksICJcbiIpOworICAgIH0KKworICAgIGppdC5sb2FkNjQoCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2UsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9m
ZnNldCkpLCB2YWx1ZSk7CisKKyAgICBsaW5rSW5saW5lT3JHb1RvU2xvd1BhdGgoInByb3BlcnR5
IGFjY2VzcyIsIGppdCwgc3R1YkluZm8sIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoYnJhbmNoVG9TbG93UGF0aCwgc3R1YkluZm8uc2xvd1Bh
dGhTdGFydExvY2F0aW9uKCkpOworICAgIH0pOworfQorCit2b2lkIElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAg
IENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBHUFJSZWcgdmFsdWUgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKTsKKworICAgIGF1dG8gYnJh
bmNoVG9TbG93UGF0aCA9IGppdC5icmFuY2gzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHN0cnVjdHVyZS0+aWQoKSkpOworCisgICAgaml0LnN0b3JlNjQoCisgICAgICAgIHZhbHVlLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQp
KSk7CisKKyAgICBsaW5rSW5saW5lT3JHb1RvU2xvd1BhdGgoInByb3BlcnR5IHJlcGxhY2UiLGpp
dCwgc3R1YkluZm8sIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoYnJhbmNoVG9TbG93UGF0aCwgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0
aW9uKCkpOworICAgIH0pOworfQorCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJh
eUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworCisg
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2Vk
UmVnaXN0ZXJzKTsKKyAgICBHUFJSZWcgYmFzZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guYmFzZUdQUik7CisgICAgR1BSUmVnIHZhbHVlID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7CisgICAgYWxsb2NhdG9yLmxvY2soYmFzZSk7Cisg
ICAgYWxsb2NhdG9yLmxvY2sodmFsdWUpOworICAgIGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBhcnJheS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlX
aXRoSW50MzIKKyAgICAgICAgfHwgYXJyYXktPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERv
dWJsZQorICAgICAgICB8fCBhcnJheS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGln
dW91czsKK30KKwordm9pZCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoVk0mIHZt
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQoreworICAgIFJF
TEVBU0VfQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CisK
KyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOworICAgIEdQUlJlZyBi
YXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBH
UFJSZWcgdmFsdWUgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BS
KTsKKyAgICBhbGxvY2F0b3IubG9jayhiYXNlKTsKKyAgICBhbGxvY2F0b3IubG9jayh2YWx1ZSk7
CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Cisg
ICAgQVNTRVJUKCFhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSk7CisKKyAgICBqaXQubG9h
ZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaCk7CisgICAgYXV0byBicmFuY2hU
b1Nsb3dQYXRoID0gaml0LmJyYW5jaDMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhcnJheS0+aW5kZXhpbmdUeXBl
KCkpKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHZhbHVlLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgdmFsdWUp
OworICAgIGppdC5ib3hJbnQzMih2YWx1ZSwgSlNWYWx1ZVJlZ3ModmFsdWUpKTsKKworICAgIGxp
bmtJbmxpbmVPckdvVG9TbG93UGF0aCgiYXJyYXkgbGVuZ3RoIiwgaml0LCBzdHViSW5mbywgWyZd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhicmFu
Y2hUb1Nsb3dQYXRoLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CisgICAgfSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmxpbmVBY2Nlc3NfaAorI2RlZmluZSBJ
bmxpbmVBY2Nlc3NfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIlByb3BlcnR5T2Zm
c2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0FycmF5OworY2xhc3MgU3RydWN0
dXJlOworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CitjbGFzcyBWTTsKKworY2xhc3MgSW5saW5l
QWNjZXNzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzaXplRm9yUHJv
cGVydHlBY2Nlc3MoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4gMjM7
CisjZWxzZQorI2Vycm9yICJwbGF0Zm9ybSIKKyNlbmRpZgorICAgIH0KKworICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IHNpemVGb3JMZW5ndGhBY2Nlc3MoKQorICAgIHsKKyNpZiBDUFUoWDg2
XzY0KQorICAgICAgICByZXR1cm4gMjY7CisjZWxzZQorI2Vycm9yICJwbGF0Zm9ybSIKKyNlbmRp
ZgorICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemVGb3JQcm9wZXJ0eVJl
cGxhY2UoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4gMTk7CisjZWxz
ZQorI2Vycm9yICJwbGF0Zm9ybSIKKyNlbmRpZgorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdl
bmVyYXRlUHJvcGVydHlBY2Nlc3MoVk0mLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSos
IFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2UoVk0mLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0
KTsKKyAgICAvL3N0YXRpYyBib29sIGdlbmVyYXRlT3V0T2ZMaW5lUHJvcGVydHlBY2Nlc3MoVk0m
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBz
dGF0aWMgdm9pZCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBK
U0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIElubGluZUFjY2Vzc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAkocmV2aXNpb24gMjAyMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1MywxNCArMTc1Mywx
MSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgICAgIHJl
dHVybiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpHYXZlVXA7CiAgICAgfQogCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKTsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5kb25lTG9jYXRpb24o
KTsKICAgICAgICAgCiAgICAgbGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nlc3MsIHN1Y2Nlc3NM
YWJlbCk7CiAKLSAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgIGZhaWx1cmUsCi0gICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1
YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogICAgIAogICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwgIjog
R2VuZXJhdGluZyBwb2x5bW9ycGhpYyBhY2Nlc3Mgc3R1YiBmb3IgIiwgbGlzdER1bXAoY2FzZXMp
LCAiXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjAyMDg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNiArNjMsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxm
KAogICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogfQogCit2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjppbml0QXJyYXlMZW5ndGgoKQoreworICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6
QXJyYXlMZW5ndGg7Cit9CisKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVw
bGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQ
dXRCeUlkUmVwbGFjZTsKQEAgLTg3LDYgKzkyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
ZGVyZWYoKQogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICBjYXNlIENhY2hlVHlwZTo6
R2V0QnlJZFNlbGY6CiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgIGNh
c2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTAyLDYgKzEwOCw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmFib3V0VG9EaWUoKQogICAg
IGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
CiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgIGNhc2UgQ2FjaGVUeXBl
OjpBcnJheUxlbmd0aDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjU3LDYgKzI2NCw3
IEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQKIHsKICAgICBzd2l0
Y2ggKGNhY2hlVHlwZSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNlIENh
Y2hlVHlwZTo6QXJyYXlMZW5ndGg6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6
CkBAIC0yNzUsNiArMjgzLDcgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y29udGFpbnNQQyh2
b2lkKgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHUuc3R1Yi0+Y29udGFpbnNQ
QyhwYyk7CiB9Ci0jZW5kaWYKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1Nyw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBVbnNldCwKICAg
ICBHZXRCeUlkU2VsZiwKICAgICBQdXRCeUlkUmVwbGFjZSwKLSAgICBTdHViCisgICAgU3R1YiwK
KyAgICBBcnJheUxlbmd0aAogfTsKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewpAQCAtNjgs
NiArNjksNyBAQCBwdWJsaWM6CiAgICAgflN0cnVjdHVyZVN0dWJJbmZvKCk7CiAKICAgICB2b2lk
IGluaXRHZXRCeUlkU2VsZihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICB2b2lkIGluaXRBcnJheUxlbmd0aCgpOwogICAgIHZv
aWQgaW5pdFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQpOwogICAgIHZvaWQgaW5pdFN0dWIoQ29kZUJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPFBvbHltb3JwaGljQWNjZXNzPik7CiAKQEAgLTE0MywxMyArMTQ1LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2Nh
dGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOworICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBw
YykgY29uc3Q7CisKKyAgICAvL0NvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwog
CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleDsKIAotICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBwYykgY29uc3Q7Ci0KICAgICB1bmlv
biB7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKQEAgLTE2NSwyNSArMTY3LDQxIEBAIHB1YmxpYzoK
ICAgICBTdHJ1Y3R1cmVTZXQgYnVmZmVyZWRTdHJ1Y3R1cmVzOwogICAgIAogICAgIHN0cnVjdCB7
CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUg
c3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLCBvciB0aGUgbG9jYXRpb24g
b2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbicgY2FjaGVzLgorICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzOworICAgICAgICB1aW50MzJfdCBpbmxpbmVTaXplOyAvLyBPbmx5IHVzZWQg
Zm9yIGJ5SWQgY2FjaGVzLgorICAgICAgICBpbnQzMl90IGRlbHRhRnJvbVN0YXJ0VG9DYWxsTG9j
YXRpb247CisgICAgICAgIGludDMyX3QgZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQ7CisK
KyAgICAgICAgLy9Db2RlTG9jYXRpb25MYWJlbCBlbmQ7CisgICAgICAgIC8vQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd1BhdGg7CiAgICAgICAgIGludDhfdCBiYXNlR1BSOworICAgICAgICBpbnQ4X3Qg
dmFsdWVHUFI7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgaW50OF90IHZhbHVlVGFn
R1BSOwogICAgICAgICBpbnQ4X3QgYmFzZVRhZ0dQUjsKICNlbmRpZgotICAgICAgICBpbnQ4X3Qg
dmFsdWVHUFI7Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7Ci0gICAgICAgIGlu
dDMyX3QgZGVsdGFDYWxsVG9Eb25lOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvSnVtcDsK
LSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlOwotICAgICAgICBpbnQzMl90IGRl
bHRhQ2hlY2tJbW1Ub0NhbGw7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaW50MzJfdCBk
ZWx0YUNhbGxUb0xvYWRPclN0b3JlOwotI2Vsc2UKLSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxU
b1RhZ0xvYWRPclN0b3JlOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRP
clN0b3JlOwotI2VuZGlmCisgICAgICAgIC8vaW50MzJfdCBkZWx0YUNhbGxUb0RvbmU7CisgICAg
ICAgIC8vaW50MzJfdCBkZWx0YUNhbGxUb0p1bXA7CisgICAgICAgIC8vaW50MzJfdCBkZWx0YUNh
bGxUb1Nsb3dDYXNlOworICAgICAgICAvL2ludDMyX3QgZGVsdGFDaGVja0ltbVRvQ2FsbDsKKy8v
I2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICAgICAgLy9pbnQzMl90IGRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmU7CisvLyNlbHNlCisvLyAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1RhZ0xvYWRPclN0
b3JlOworLy8gICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmU7Cisv
LyNlbmRpZgogICAgIH0gcGF0Y2g7CiAKKyAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5M
b2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmNhbGxBdE9mZnNldChwYXRjaC5kZWx0YUZy
b21TdGFydFRvQ2FsbExvY2F0aW9uKTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsIGRvbmVMb2Nh
dGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQocGF0Y2guaW5saW5lU2l6
ZSk7IH0KKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFN0YXJ0TG9jYXRpb24oKSB7IHJl
dHVybiBwYXRjaC5zdGFydC5sYWJlbEF0T2Zmc2V0KHBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93
UGF0aFN0YXJ0KTsgfQorICAgIENvZGVMb2NhdGlvbkp1bXAgcGF0Y2hhYmxlSnVtcEZvckluKCkK
KyAgICB7IAorICAgICAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6
OkluKTsKKyAgICAgICAgcmV0dXJuIHBhdGNoLnN0YXJ0Lmp1bXBBdE9mZnNldCgwKTsKKyAgICB9
CisKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CiAgICAgQ2FjaGVUeXBlIGNhY2hlVHlwZTsK
ICAgICB1aW50OF90IGNvdW50ZG93bjsgLy8gV2UgcmVwYXRjaCBvbmx5IHdoZW4gdGhpcyBpcyB6
ZXJvLiBJZiBub3QgemVybywgd2UgZGVjcmVtZW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTgsMTEgKzI1OCwyMCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxp
bmtCCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSAqbV9pbnNbaV0ubV9zdHViSW5mbzsK
LSAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKTsKLSAgICAg
ICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9kb25l
KSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wID0gZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5z
W2ldLm1fanVtcCkpOwotICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1
cm5Mb2NhdGlvbjsKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKKworICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tp
XS5tX2p1bXApOworICAgICAgICBpbmZvLnBhdGNoLnN0YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAg
cHRyZGlmZl90IGlubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKAorICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tp
XS5tX2RvbmUpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lU2l6ZSA+PSAwKTsKKyAg
ICAgICAgaW5mby5wYXRjaC5pbmxpbmVTaXplID0gaW5saW5lU2l6ZTsKKworICAgICAgICBpbmZv
LnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9DYWxsTG9jYXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5jYWxsKCkpKTsKKworICAgICAg
ICBpbmZvLnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOwog
ICAgIH0KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUo
KTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Niw4ICsxODYsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0Nh
bGxIZWxwZXJzCiAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
LT5maW5kU3R1YkluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKIAotICAgICAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5kb25l
TG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRC
eUlkKAogICAgIAogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxs
U2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdp
biwgbV9zdHJlYW0tPnNpemUoKSk7CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVy
cywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2Vk
UmVnaXN0ZXJzLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpCiAgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VUYWdHUFJPck5vbmUsIGJhc2VQYXlsb2FkR1BSKSwKICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgdHlwZSk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw4ICsxNjgsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgICAgIHVzZWRSZWdpc3Rl
cnMuc2V0KHJlc3VsdEdQUiwgZmFsc2UpOwogICAgIH0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1
c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgdHlwZSk7CisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVy
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHR5cGUpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjAyMDg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MTM1LDIxICs2MTM1LDE5IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24g
PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Yoc2xvd1BhdGhDYWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNh
bGxUb0p1bXAgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9j
YXRpb25PZihqdW1wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHNsb3dQYXRoQmVnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihqdW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby0+cGF0Y2guc3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdHJkaWZmX3QgaW5saW5lU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlubGluZVNpemUgPj0g
MCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBh
dGNoLmlubGluZVNpemUgPSBpbmxpbmVTaXplOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9DYWxsTG9jYXRp
b24gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHNsb3dQYXRoQ2FsbCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0ID0g
TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihzbG93UGF0aEJlZ2luKSk7CisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKQEAgLTc1NjgsNyArNzU2Niw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBh
dXRvIGdlbmVyYXRvciA9IEJveDxKSVRHZXRCeUlkR2VuZXJhdG9yPjo6Y3JlYXRlKAogICAgICAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2Fs
bFNpdGVJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksCisgICAgICAgICAgICAgICAgICAg
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCB1aWQsIEpTVmFsdWVSZWdzKHBhcmFtc1sx
XS5ncHIoKSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIo
KSksIHR5cGUpOwogCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRo
KGppdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJs
ZXIuY3BwCShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VERpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsMTEgQEAgdm9p
ZCBKSVREaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseShQcgogewogICAgIENvZGVMb2NhdGlv
bkxhYmVsIGZyb21Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihmcm9tKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbCB0b0xvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHRvKTsK
KyAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBmcm9tTG9jYXRpb24sIHRvTG9jYXRpb24pOworfQor
Cit2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KFByaW50U3RyZWFtJiBvdXQs
IENvZGVMb2NhdGlvbkxhYmVsIGZyb21Mb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwgdG9Mb2Nh
dGlvbikKK3sKICAgICBkaXNhc3NlbWJsZShmcm9tTG9jYXRpb24sIGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHRvTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90Pihmcm9tTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksICIgICAgICAgICIsIG91
dCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJs
ZXIuaAkocmV2aXNpb24gMjAyMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRE
aXNhc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgTGlua0J1ZmZlciYpOwogICAgIHZvaWQgcmVwb3J0
VG9Qcm9maWxlcihQcm9maWxlcjo6Q29tcGlsYXRpb24qLCBMaW5rQnVmZmVyJik7CiAKKyAgICB2
b2lkIGR1bXBEaXNhc3NlbWJseShQcmludFN0cmVhbSYsIENvZGVMb2NhdGlvbkxhYmVsIGZyb20s
IENvZGVMb2NhdGlvbkxhYmVsIHRvKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIGR1bXBIZWFkZXIo
UHJpbnRTdHJlYW0mLCBMaW5rQnVmZmVyJik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZp
cnN0U2xvd0xhYmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjAyMDg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDggKzI5LDkgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIklubGluZUFj
Y2Vzcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC02
OSwyNSArNzAsMTkgQEAgSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKIAogdm9p
ZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1
ZmZlciYgc2xvd1BhdGgpCiB7Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRp
b24gPSBzbG93UGF0aC5sb2NhdGlvbk9mKG1fY2FsbCk7Ci0gICAgbV9zdHViSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgIG1fc3R1YkluZm8tPnBhdGNo
LmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKAotICAgICAgICBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1tKSwgY2Fs
bFJldHVybkxvY2F0aW9uKTsKLSAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0p1bXAg
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxs
UmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVDaGVjaykpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Mb2Fk
T3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2xvYWRPclN0b3Jl
KSk7Ci0jZWxzZQotICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3Rv
cmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBj
YWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV90YWdMb2FkT3JTdG9yZSkp
OwotICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0g
TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJl
dHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKLSNlbmRp
ZgotICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRp
b24sIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2luKSk7Ci0gICAgbV9zdHViSW5m
by0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlv
bk9mKG1fZG9uZSkpOworICAgIEFTU0VSVChtX3N0YXJ0LmlzU2V0KCkpOworICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHN0YXJ0ID0gZmFzdFBhdGgubG9jYXRpb25PZihtX3N0YXJ0KTsKKyAgICBtX3N0
dWJJbmZvLT5wYXRjaC5zdGFydCA9IHN0YXJ0OworCisgICAgaW50MzJfdCBpbmxpbmVTaXplID0g
TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgc3RhcnQs
IGZhc3RQYXRoLmxvY2F0aW9uT2YobV9kb25lKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5l
U2l6ZSA+IDApOworICAgIG1fc3R1YkluZm8tPnBhdGNoLmlubGluZVNpemUgPSBpbmxpbmVTaXpl
OworCisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb0NhbGxMb2NhdGlvbiA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIHN0YXJ0
LCBzbG93UGF0aC5sb2NhdGlvbk9mKG1fc2xvd1BhdGhDYWxsKSk7CisgICAgbV9zdHViSW5mby0+
cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBzdGFydCwgc2xvd1BhdGgubG9jYXRpb25P
ZihtX3Nsb3dQYXRoQmVnaW4pKTsKIH0KIAogdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6
ZShMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQpAQCAtOTUsMzggKzkwLDI5IEBAIHZvaWQgSklUQnlJ
ZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmYKICAgICBmaW5hbGl6ZShsaW5rQnVmZmVyLCBs
aW5rQnVmZmVyKTsKIH0KIAotdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRo
Q2hlY2tzKE1hY3JvQXNzZW1ibGVyJiBqaXQpCit2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdENvbW1vbihNYWNyb0Fzc2VtYmxlciYgaml0LCBzaXplX3QgaW5saW5lSUNTaXplKQog
ewotICAgIG1fc3RydWN0dXJlQ2hlY2sgPSBqaXQucGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2go
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwKLSAgICAgICAgbV9zdHJ1Y3R1cmVJbW0sIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMCkpOworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBzaXplX3Qgc3RhcnRTaXpl
ID0gaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCk7CisgICAgbV9zbG93UGF0aEp1
bXAgPSBqaXQuanVtcCgpOworICAgIHdoaWxlIChqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29k
ZVNpemUoKSAtIHN0YXJ0U2l6ZSA8IGlubGluZUlDU2l6ZSkKKyAgICAgICAgaml0Lm5vcCgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIC0g
c3RhcnRTaXplID09IGlubGluZUlDU2l6ZSk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CiB9
CiAKIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCi0gICAgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLSAgICA6IEpJ
VEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUs
IGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlKQorICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9j
aywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2Us
IHZhbHVlKQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUgPT0gY29kZUJsb2Nr
LT52bSgpLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KIAogdm9pZCBKSVRH
ZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7
Ci0gICAgZ2VuZXJhdGVGYXN0UGF0aENoZWNrcyhqaXQpOwotICAgIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgbV9sb2FkT3JTdG9yZSA9IGppdC5sb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZz
ZXRQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLnBheWxvYWRH
UFIoKSwgMCksIG1fdmFsdWUucGF5bG9hZEdQUigpKS5sYWJlbCgpOwotI2Vsc2UKLSAgICBtX3Rh
Z0xvYWRPclN0b3JlID0gaml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSwg
bV92YWx1ZS50YWdHUFIoKSkubGFiZWwoKTsKLSAgICBtX2xvYWRPclN0b3JlID0gaml0LmxvYWQz
MldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSwgbV92YWx1ZS5wYXlsb2FkR1BSKCkpLmxh
YmVsKCk7Ci0jZW5kaWYKLSAgICAKLSAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKKyAgICBnZW5l
cmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5lQWNjZXNzOjpzaXpl
Rm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2Vzcygp
KTsKIH0KIAogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKQEAgLTE0
MywxOSArMTI5LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcgog
CiB2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImIGppdCkKIHsKLSAgICBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKGppdCk7Ci0gICAgCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBtX2xvYWRPclN0b3JlID0gaml0LnN0b3JlNjRXaXRoQWRkcmVz
c09mZnNldFBhdGNoKAotICAgICAgICBtX3ZhbHVlLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgMCkpLmxhYmVsKCk7Ci0jZWxzZQotICAg
IG1fdGFnTG9hZE9yU3RvcmUgPSBqaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCi0g
ICAgICAgIG1fdmFsdWUudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5w
YXlsb2FkR1BSKCksIDApKS5sYWJlbCgpOwotICAgIG1fbG9hZE9yU3RvcmUgPSBqaXQuc3RvcmUz
MldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIG1fdmFsdWUucGF5bG9hZEdQUigpLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSkubGFiZWwoKTsK
LSNlbmRpZgotICAgIAotICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworICAgIGdlbmVyYXRlRmFz
dENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFjZSgpKTsKIH0K
IAogVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBKSVRQdXRCeUlkR2VuZXJhdG9yOjpzbG93UGF0aEZ1
bmN0aW9uKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NjgsMTcgKzY4LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydFNsb3dQYXRoQ2FsbChNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhCZWdpbiwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCkKICAgICB7CiAgICAgICAgIG1fc2xvd1BhdGhCZWdpbiA9IHNsb3dQYXRoQmVnaW47Ci0gICAg
ICAgIG1fY2FsbCA9IGNhbGw7CisgICAgICAgIG1fc2xvd1BhdGhDYWxsID0gY2FsbDsKICAgICB9
CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoQmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX3Nsb3dQYXRoQmVnaW47IH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93
UGF0aEp1bXAoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNoZWNrLm1fanVtcDsgfQorICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fc2xv
d1BhdGhKdW1wLmlzU2V0KCkgPyBtX3Nsb3dQYXRoSnVtcCA6IG1fc3RydWN0dXJlQ2hlY2subV9q
dW1wOyB9CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZl
ciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKICAgICB2b2lkIGZpbmFsaXplKExp
bmtCdWZmZXImKTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGhD
aGVja3MoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlRmFzdENvbW1vbihNYWNy
b0Fzc2VtYmxlciYsIHNpemVfdCBzaXplKTsKICAgICAKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7
CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKQEAgLTg5LDkgKzg5LDExIEBAIHByb3RlY3RlZDoK
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIEFzc2VtYmxlckxhYmVsIG1fdGFnTG9hZE9yU3Rv
cmU7CiAjZW5kaWYKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Ns
b3dQYXRoQmVnaW47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIAogY2xhc3MgSklUR2V0QnlJZEdlbmVyYXRvciA6IHB1Ymxp
YyBKSVRCeUlkR2VuZXJhdG9yIHsKQEAgLTk5LDEwICsxMDEsMTMgQEAgcHVibGljOgogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IoKSB7IH0KIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IoCi0gICAg
ICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVn
cyB2YWx1ZSwgQWNjZXNzVHlwZSk7CisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBVbmlxdWVkU3Ry
aW5nSW1wbCogcHJvcGVydHlOYW1lLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgQWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzTGVuZ3RoQWNjZXNz
OwogfTsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRCeUlkR2VuZXJh
dG9yIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBA
IEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXQKIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsKKyAgICAgICAgcHJvcGVydHlO
YW1lLmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vz
c1R5cGU6OkdldCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgZmFz
dERvbmVDYXNlID0ganVtcCgpOwpAQCAtNTcyLDYgKzU3Miw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3QKIHsKICAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwogCkBAIC01Nzks
NyArNTgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdAogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAg
ICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEFjY2Vzc1R5cGU6OkdldFB1cmUpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CkBAIC02MjAsNyArNjIxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKEluc3RydWN0aW9uKgogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nl
c3NUeXBlOjpHZXQpOworICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5j
bHVkZSAiSUNTdGF0cy5oIgorI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgogI2luY2x1ZGUgIkpJ
VC5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCkBA
IC05MCw5MyArOTEsODkgQEAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2Rl
QgogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLCBuZXdDYWxsZWVGdW5jdGlv
bik7CiB9CiAKLXN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyJiBz
bG93UGF0aEZ1bmN0aW9uLAotICAgIGJvb2wgY29tcGFjdCkKLXsKLSAgICAvLyBPbmx5IG9wdGlt
aXplIG9uY2UhCi0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOwotCi0gICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVy
ZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hJbnQzMigKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
KSwKLSAgICAgICAgYml0d2lzZV9jYXN0PGludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSkpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGNvbXBhY3QpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKLSAgICBlbHNlCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMy
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJl
bGF0aXZlVG9CYXNlKG9mZnNldCkpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAo
Y29tcGFjdCkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zm
c2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9m
ZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvUGF5bG9hZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwot
ICAgIH0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCByZXNldEdldEJ5SURDaGVja0FuZExvYWQo
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
MzJXaXRoUGF0Y2goKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0
dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZv
LnBhdGNoLmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7
Ci0gICAgfQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWws
IHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
b21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlKSwgMCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgcmVzZXRQdXRCeUlE
Q2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFD
aGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
dmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25B
ZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51
c2VkUG9pbnRlcikpOwotICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0
cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JT
dG9yZSksIDApOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJn
ZXQpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0KTsKLSAgICAKLSAgICBpZiAoTWFjcm9B
c3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcygK
LSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJB
dE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5k
ZWx0YUNoZWNrSW1tVG9DYWxsKSksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJn
ZXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc2V0R2V0QnlJRENoZWNrQW5k
TG9hZChzdHViSW5mbyk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAot
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAg
ICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwodGFyZ2V0KSk7CisvL3N0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygK
Ky8vICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLAorLy8gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25z
dCBGdW5jdGlvblB0ciYgc2xvd1BhdGhGdW5jdGlvbiwKKy8vICAgIGJvb2wgY29tcGFjdCkKKy8v
eworLy8gICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQorLy8gICAgcmVwYXRjaENhbGwoY29kZUJs
b2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOworLy8K
Ky8vICAgIFJFTEVBU0VfQVNTRVJUKCFjb21wYWN0KTsKKy8vCisvLworLy8gICAgLy8gUGF0Y2gg
dGhlIHN0cnVjdHVyZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCisvLyAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKAorLy8gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVs
dGFDaGVja0ltbVRvQ2FsbCksCisvLyAgICAgICAgYml0d2lzZV9jYXN0PGludDMyX3Q+KHN0cnVj
dHVyZS0+aWQoKSkpOworLy8jaWYgVVNFKEpTVkFMVUU2NCkKKy8vICAgIGlmIChjb21wYWN0KQor
Ly8gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKKy8vICAg
IGVsc2UKKy8vICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKKy8vI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKKy8vICAgIGlmIChjb21wYWN0KSB7CisvLyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworLy8gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRP
clN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworLy8gICAgfSBlbHNlIHsK
Ky8vICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
VGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKy8vICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRP
clN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworLy8gICAgfQorLy8jZW5k
aWYKKy8vfQorCisvL3N0YXRpYyB2b2lkIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCisvL3sKKy8vICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisvLworLy8gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwg
PSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0
cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworLy8gICAgaWYgKE1hY3Jv
QXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsK
Ky8vICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaCgKKy8vICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0
T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisv
LyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorLy8gICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJh
c2VHUFIpLAorLy8gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwK
Ky8vICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworLy8g
ICAgfQorLy8gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwg
c3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworLy8jaWYgVVNFKEpTVkFMVUU2
NCkKKy8vICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKy8vI2Vsc2UKKy8vICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsK
Ky8vICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisvLyNlbmRpZgorLy99CisKKy8vc3RhdGljIHZv
aWQgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
Ky8veworLy8gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworLy8gICAgaWYgKE1hY3JvQXNzZW1i
bGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKKy8vICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaCgKKy8vICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRj
aGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisvLyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorLy8gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIp
LAorLy8gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKy8vICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworLy8gICAgfQor
Ly8gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworLy8jaWYgVVNFKEpTVkFMVUU2NCkKKy8v
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JT
dG9yZSksIDApOworLy8jZWxzZQorLy8gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisvLyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7
CisvLyNlbmRpZgorLy99CisKK3N0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXAoVk0mIHZtLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCkKK3sK
KyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgp
OworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhlcmUgYmVjYXVzZSBub2JvZHkg
c2hvdWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFuIElDLgorICAgIFJFTEVBU0Vf
QVNTRVJUKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDwgc3R1YkluZm8ucGF0
Y2guaW5saW5lU2l6ZSk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8u
cGF0Y2guc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigp
LmNvZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIGxpbmtCdWZmZXIu
bGluayhqdW1wLCB0YXJnZXQpOwogfQogCiBlbnVtIElubGluZUNhY2hlQWN0aW9uIHsKQEAgLTI0
MSw5ICsyMzgsMjMgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwogCiAgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKLSAgICAgICAgaWYgKGlzSlNB
cnJheShiYXNlVmFsdWUpKQotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExl
bmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkKKyAgICAgICAgaWYgKGlzSlNBcnJheShiYXNl
VmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlw
ZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVl
CisgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCisgICAgICAgICAgICAg
ICAgJiYgIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICYmIGFjdGlvbkZvckNlbGwodm0sIGJhc2VW
YWx1ZS5hc0NlbGwoKSkgPT0gQXR0ZW1wdFRvQ2FjaGUKKyAgICAgICAgICAgICAgICAmJiBJbmxp
bmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5
Kj4oYmFzZVZhbHVlKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc2V0IGEgd2F0Y2hwb2ludCBvciBzb21l
dGhpbmc/CisgICAgICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9u
KGtpbmQpKTsKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5n
dGgoKmNvZGVCbG9jay0+dm0oKSwgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZVZhbHVl
KSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgpOworICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJp
bmcoYmFzZVZhbHVlKSkKICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5n
dGgodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoKTsKICAgICAgICAgZWxz
ZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PERpcmVjdEFy
Z3VtZW50cyo+KGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgb3Zl
cnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBhcyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2Fk
ISBHdWFyZGluZwpAQCAtMjc2LDIwICsyODcsMjUgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlR2V0QnlJRAogICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rp
b25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7CiAgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRv
Q2FjaGUpCiAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCiAgICAgICAgIAogICAgICAgICAv
LyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQgb3V0IG9m
IGxpbmUgc3RvcmVzIGhlcmUuCiAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2Fj
aGVUeXBlOjpVbnNldAogICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKICAg
ICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKICAgICAgICAgICAgICYm
ICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAgICAgJiYgaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkKLSAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBh
Y3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSkKLSAgICAgICAgICAgICYmIGFjdGlvbiA9PSBBdHRlbXB0VG9DYWNoZQor
ICAgICAgICAgICAgLy8mJiBpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKQorICAg
ICAgICAgICAgLy8mJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NP
ZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAg
ICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAg
ICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7CisKICAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgcHJv
cGVydHlOYW1lKSk7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0
eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICBy
ZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2lu
ZCksIHRydWUpOworICAgICAgICAgICAgLy9yZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIHRydWUpOworCisgICAgICAgICAgICByZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBhcHByb3By
aWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVByb3BlcnR5QWNjZXNzKCpjb2RlQmxvY2stPnZtKCksIHN0dWJJbmZv
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgc3R1YkluZm8u
aW5pdEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KQEAgLTM3
MCw3ICszODYsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCgpLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1
YkluZm8sIHJlc3VsdC5jb2RlKCkpOworICAgICAgICByZXdpcmVTdHViQXNKdW1wKGV4ZWMtPnZt
KCksIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7CiAgICAgfQog
ICAgIAogICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hl
IDogUmV0cnlDYWNoZUxhdGVyOwpAQCAtMzgyLDcgKzM5OCw3IEBAIHZvaWQgcmVwYXRjaEdldEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1YKICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwogICAgIAog
ICAgIGlmICh0cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoQ2Fs
bChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3By
aWF0ZUdlbmVyaWNHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAgICAgICByZXBhdGNoQ2FsbChl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIGFwcHJvcHJp
YXRlR2VuZXJpY0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CiB9CiAKIHN0YXRpYyBWX0pJVE9wZXJh
dGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKQEAgLTQ0MCw5ICs0NTYsMTMgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCi0gICAgICAgICAgICAgICAgICAgIGNvZGVC
bG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJ
ZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSh2bSwgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisKKyAgICAgICAgICAgICAgICAvL3JlcGF0Y2hCeUlkU2VsZkFj
Y2VzcygKKyAgICAgICAgICAgICAgICAvLyAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksCisgICAgICAgICAgICAgICAgLy8gICAgYXBwcm9wcmlh
dGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgcmlnaHQ/CiAgICAgICAgICAgICAgICAgc3R1
YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAg
ICAgICAgICAgfQpAQCAtNTI0LDExICs1NDQsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VX
aXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICAgICAgCiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICByZXNldFB1dEJ5SURD
aGVja0FuZExvYWQoc3R1YkluZm8pOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1
bXAoCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7CisKKyAgICAgICAgcmV3
aXJlU3R1YkFzSnVtcCh2bSwgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsKHJlc3VsdC5jb2Rl
KCkpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/
IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CkBAIC01NDAsNyArNTU3LDcgQEAgdm9p
ZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgIEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCku
aGVhcCk7CiAgICAgCiAgICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVw
T25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCkpOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
UmVwYXRjaEluKApAQCAtNTg2LDggKzYwMywxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5UmVwYXRjaEluKAogICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhKdW1w
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwogICAgICAgICAKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgIC8vIEZJWE1FOiBtYXliZSB3ZSBz
aG91bGQganVzdCB1c2UgcmV3aXJlU3R1YkFzSnVtcEhlcmU/CisgICAgICAgIC8vcmV3aXJlU3R1
YkFzSnVtcCgpCisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0p1bXApLAorICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2hhYmxlSnVt
cEZvckluKCksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7
CiAgICAgfQogICAgIApAQCAtNjAwLDcgKzYyMCw3IEBAIHZvaWQgcmVwYXRjaEluKAogewogICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBpZiAodHJ5
UmVwYXRjaEluKGV4ZWMsIGJhc2UsIGlkZW50LCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8pID09
IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkluKTsKKyAgICAgICAgcmVwYXRj
aENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBv
cGVyYXRpb25Jbik7CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNKiwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmKQpAQCAtOTcy
LDE0ICs5OTIsMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogCiB2b2lkIHJlc2V0R2V0
QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBH
ZXRCeUlES2luZCBraW5kKQogewotICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24o
a2luZCkpOwotICAgIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChzdHViSW5mbyk7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93
Q2FzZSkpOworICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7Cisg
ICAgcmV3aXJlU3R1YkFzSnVtcCgqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywgc3R1YkluZm8u
c2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIFZfSklU
T3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0pJ
VE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgVl9KSVRPcGVyYXRp
b25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0
aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFZfSklUT3BlcmF0aW9uX0VT
c2lKSkkgb3B0aW1pemVkRnVuY3Rpb247CiAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CkBAIC05OTEsMTQgKzEwMTAsMTQgQEAgdm9pZCBy
ZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIAogICAgICAgICBBU1NFUlQodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
KTsKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CiAgICAgfQotICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgcmVzZXRQdXRC
eUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1
bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisKKyAgICByZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBvcHRpbWl6ZWRG
dW5jdGlvbik7CisgICAgcmV3aXJlU3R1YkFzSnVtcCgqY29kZUJsb2NrLT52bSgpLCBzdHViSW5m
bywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lkIHJlc2V0SW4o
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8ucGF0Y2guc3RhcnQu
anVtcEF0T2Zmc2V0KDApLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281465</attachid>
            <date>2016-06-16 11:49:35 -0700</date>
            <delta_ts>2016-06-16 15:51:40 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>64154</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDIwODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI3Miw2ICsxMjcyLDggQEAKIAkJNzBFQ0E2MDkxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzJBQUY3Q0QxRDBEMzFCMzAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJBQUY3Q0IxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb24uY3BwICovOyB9OwogCQk3MkFBRjdDRTFEMEQzMUIzMDA1RTYwQkUgLyogSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uaCAqLzsgfTsKKwkJNzkwNUJCNjgxRDEyMDUwRTAwMTlGRTU3IC8qIElu
bGluZUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLzsgfTsK
KwkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJCNjcxRDEyMDUwRTAwMTlG
RTU3IC8qIElubGluZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5MTYwREJEMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTE2MERC
QjFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwICovOyB9OwogCQk3OTE2MERCRTFD
OEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MTYwREJDMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJl
dm9rZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVFRDVD
MDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovOyB9OwpAQCAtMzQ1Myw2ICszNDU1
LDggQEAKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUg
LyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUFjY2Vzcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxp
bmVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQWNjZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYwREJCMUM4RTNFQzgwMDhDMDg1
QSAvKiBQcm94eVJldm9rZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcm94eVJldm9rZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYwREJD
MUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm94eVJldm9rZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjU3Nyw2ICs2NTgxLDggQEAKIAkJCQkwRjAzMzJD
MTE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuY3BwICovLAogCQkJCTBGMDMzMkMy
MThCMDE3NjMwMDVGOTc5QSAvKiBHZXRCeUlkVmFyaWFudC5oICovLAogCQkJCTBGMEI4M0E4MTRC
Q0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICovLAorCQkJCTc5MDVCQjY2MUQxMjA1MEUw
MDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3BwICovLAorCQkJCTc5MDVCQjY3MUQxMjA1MEUwMDE5
RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCAqLywKIAkJCQkxNDhBN0JFRDFCODI5NzVBMDAyRDkxNTcg
LyogSW5saW5lQ2FsbEZyYW1lLmNwcCAqLywKIAkJCQkxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcg
LyogSW5saW5lQ2FsbEZyYW1lLmggKi8sCiAJCQkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8q
IElubGluZUNhbGxGcmFtZVNldC5jcHAgKi8sCkBAIC03MzIxLDYgKzczMjcsNyBAQAogCQkJCTBG
MkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0M0MzOTJBQjFDM0JFQjA1MDAyNDFGNTMgLyogQXNzZW1ibGVy
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhERjgyMDAyQjJBRDcgLyog
REZHT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlG
RTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkUxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05MzAzLDYgKzkzMTAsNyBAQAogCQkJCTBGNkI4QUQ4MUM0RUREQTIw
MDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3
M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTc5MDVCQjY4MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMjcxQUE5MDk1NjAwRDMzQjMzIC8qIFNjb3BlZEFy
Z3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyRjFBQUE4MDY5MDBEMzNCMzMg
LyogU2NvcGVkQXJndW1lbnRzVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyQUJDRjkx
QkVBOUJEMjAwNjQwM0EwIC8qIFJlbW90ZUF1dG9tYXRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyLmgJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDM5ICs2Miw1
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgY2xhc3MgQXNzZW1ibGVyRGF0YSB7
CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFzc2VtYmxlckRhdGEpOworICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IElubGluZUNhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoKICAg
ICAgICAgQXNzZW1ibGVyRGF0YSgpCi0gICAgICAgICAgICA6IG1fYnVmZmVyKG51bGxwdHIpCi0g
ICAgICAgICAgICAsIG1fY2FwYWNpdHkoMCkKKyAgICAgICAgICAgIDogbV9idWZmZXIobV9pbmxp
bmVCdWZmZXIpCisgICAgICAgICAgICAsIG1fY2FwYWNpdHkoSW5saW5lQ2FwYWNpdHkpCiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEFzc2VtYmxlckRhdGEodW5zaWduZWQgaW5pdGlh
bENhcGFjaXR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2NhcGFjaXR5ID0gaW5pdGlhbENh
cGFjaXR5OwotICAgICAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1h
bGxvYyhtX2NhcGFjaXR5KSk7Ci0gICAgICAgIH0KLQogICAgICAgICBBc3NlbWJsZXJEYXRhKEFz
c2VtYmxlckRhdGEmJiBvdGhlcikKICAgICAgICAgewotICAgICAgICAgICAgbV9idWZmZXIgPSBv
dGhlci5tX2J1ZmZlcjsKLSAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIGlmIChvdGhlci5pc0lubGluZUJ1ZmZlcigpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG90aGVyLm1fY2FwYWNpdHkgPT0gSW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAg
ICAgIG1lbWNweShtX2lubGluZUJ1ZmZlciwgb3RoZXIubV9pbmxpbmVCdWZmZXIsIElubGluZUNh
cGFjaXR5KTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IG1faW5saW5lQnVmZmVyOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9idWZmZXIgPSBvdGhlci5tX2J1ZmZl
cjsKICAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBvdGhlci5tX2NhcGFjaXR5OworCisgICAgICAg
ICAgICBvdGhlci5tX2J1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgICAgICBvdGhlci5tX2NhcGFj
aXR5ID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIEFzc2VtYmxlckRhdGEmIG9wZXJhdG9yPShB
c3NlbWJsZXJEYXRhJiYgb3RoZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYnVmZmVyID0g
b3RoZXIubV9idWZmZXI7Ci0gICAgICAgICAgICBvdGhlci5tX2J1ZmZlciA9IG51bGxwdHI7Cisg
ICAgICAgICAgICBpZiAobV9idWZmZXIgJiYgIWlzSW5saW5lQnVmZmVyKCkpCisgICAgICAgICAg
ICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworCisgICAgICAgICAgICBpZiAob3RoZXIuaXNJbmxp
bmVCdWZmZXIoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NhcGFjaXR5ID09
IElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBtZW1jcHkobV9pbmxpbmVCdWZmZXIs
IG90aGVyLm1faW5saW5lQnVmZmVyLCBJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICAgICAg
bV9idWZmZXIgPSBtX2lubGluZUJ1ZmZlcjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIG1fYnVmZmVyID0gb3RoZXIubV9idWZmZXI7CiAgICAgICAgICAgICBtX2NhcGFjaXR5
ID0gb3RoZXIubV9jYXBhY2l0eTsKKworICAgICAgICAgICAgb3RoZXIubV9idWZmZXIgPSBudWxs
cHRyOwogICAgICAgICAgICAgb3RoZXIubV9jYXBhY2l0eSA9IDA7CiAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgICAgIH0KIAogICAgICAgICB+QXNzZW1ibGVyRGF0YSgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2J1
ZmZlciAmJiAhaXNJbmxpbmVCdWZmZXIoKSkKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShtX2J1
ZmZlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjaGFyKiBidWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX2J1ZmZlcjsgfQpAQCAtMTA0LDE5ICsxMTYsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZ3Jvdyh1bnNpZ25lZCBleHRyYUNhcGFjaXR5ID0gMCkKICAgICAgICAgewogICAg
ICAgICAgICAgbV9jYXBhY2l0eSA9IG1fY2FwYWNpdHkgKyBtX2NhcGFjaXR5IC8gMiArIGV4dHJh
Q2FwYWNpdHk7Ci0gICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0
UmVhbGxvYyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkpOworICAgICAgICAgICAgaWYgKGlzSW5saW5l
QnVmZmVyKCkpIHsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIq
PihmYXN0TWFsbG9jKG1fY2FwYWNpdHkpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkobV9idWZm
ZXIsIG1faW5saW5lQnVmZmVyLCBJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0UmVhbGxv
YyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkpOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgorICAg
ICAgICBib29sIGlzSW5saW5lQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIgPT0gbV9p
bmxpbmVCdWZmZXI7IH0KICAgICAgICAgY2hhciogbV9idWZmZXI7CisgICAgICAgIGNoYXIgbV9p
bmxpbmVCdWZmZXJbSW5saW5lQ2FwYWNpdHldOwogICAgICAgICB1bnNpZ25lZCBtX2NhcGFjaXR5
OwogICAgIH07CiAKICAgICBjbGFzcyBBc3NlbWJsZXJCdWZmZXIgewotICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGluaXRpYWxDYXBhY2l0eSA9IDEyODsKICAgICBwdWJsaWM6CiAgICAgICAgIEFz
c2VtYmxlckJ1ZmZlcigpCi0gICAgICAgICAgICA6IG1fc3RvcmFnZShpbml0aWFsQ2FwYWNpdHkp
CisgICAgICAgICAgICA6IG1fc3RvcmFnZSgpCiAgICAgICAgICAgICAsIG1faW5kZXgoMCkKICAg
ICAgICAgewogICAgICAgICB9CkBAIC0xNjMsNyArMTgwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdW5zaWduZWQgZGVidWdPZmZzZXQoKSB7IHJldHVybiBtX2luZGV4OyB9CiAKLSAg
ICAgICAgQXNzZW1ibGVyRGF0YSByZWxlYXNlQXNzZW1ibGVyRGF0YSgpIHsgcmV0dXJuIFdURk1v
dmUobV9zdG9yYWdlKTsgfQorICAgICAgICBBc3NlbWJsZXJEYXRhJiYgcmVsZWFzZUFzc2VtYmxl
ckRhdGEoKSB7IHJldHVybiBXVEZNb3ZlKG1fc3RvcmFnZSk7IH0KIAogICAgICAgICAvLyBMb2Nh
bFdyaXRlciBpcyBhIHRyaWNrIHRvIGtlZXAgdGhlIHN0b3JhZ2UgYnVmZmVyIGFuZCB0aGUgaW5k
ZXgKICAgICAgICAgLy8gaW4gbWVtb3J5IHdoaWxlIGlzc3VpbmcgbXVsdGlwbGUgU3RvcmVzLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3Bw
CShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDggQEAgdm9pZCBMaW5r
QnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogICAgIG1fYXNzZW1ibGVyU3RvcmFnZSA9
IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZlcigpLnJlbGVhc2VBc3NlbWJsZXJEYXRh
KCk7CiAgICAgdWludDhfdCogaW5EYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9h
c3NlbWJsZXJTdG9yYWdlLmJ1ZmZlcigpKTsKIAotICAgIEFzc2VtYmxlckRhdGEgb3V0QnVmZmVy
KG1fc2l6ZSk7CisgICAgQXNzZW1ibGVyRGF0YSBvdXRCdWZmZXI7CisgICAgb3V0QnVmZmVyLmdy
b3cobV9zaXplKTsKICAgICB1aW50OF90KiBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4ob3V0QnVmZmVyLmJ1ZmZlcigpKTsKICAgICB1aW50OF90KiBjb2RlT3V0RGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fY29kZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDIwODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDM5LDYgKzQzOSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0
YXR1cygKICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgb3V0LnBy
aW50ZigidW5zZXQiKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhY2hlVHlw
ZTo6QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJBcnJheUxlbmd0aCIpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxp
bmVBY2Nlc3MuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMu
aCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5o
IgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHN0YXRpYyB2b2lkIGR1bXBDYWNoZVNpemVzQW5kQ3Jhc2goVk0mIHZtKQoreworICAg
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgR1BSUmVnIHZhbHVlID0gR1BSSW5m
bzo6cmVnVDE7CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHZhbHVlOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1
ZSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5
IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CisgICAgICAgIGppdC5icmFuY2gzMigKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGlndW91c1NoYXBlKSk7CisgICAgICAgIC8vaml0LmJy
YW5jaFRlc3QzMigKKyAgICAgICAgLy8gICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpOworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyh2YWx1ZSwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHZhbHVlKTsKKyAg
ICAgICAgLy9qaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICBqaXQuYm94SW50MzIoc2Ny
YXRjaEdQUiwgSlNWYWx1ZVJlZ3ModmFsdWUpKTsKKworICAgICAgICBkYXRhTG9nKCJhcnJheSBs
ZW5ndGggc2l6ZTogIiwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksICJcbiIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworCisgICAg
ICAgIGppdC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDB4MDAwYWIyMWNhKSk7CisgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksCisgICAg
ICAgICAgICB2YWx1ZSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gdmFsdWU7CisgICAg
ICAgIGppdC5sb2FkNjQoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgMHgwMDBhYjIxY2EpLCB2YWx1ZSk7CisKKyAgICAgICAgZGF0YUxvZygib3V0IG9mIGxp
bmUgb2Zmc2V0IGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6
ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZt
KTsKKworICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOworICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgMHgwMDBhYjIxY2EpLCB2YWx1ZSk7CisK
KyAgICAgICAgZGF0YUxvZygiaW5saW5lIG9mZnNldCBjYWNoZSBzaXplOiAiLCBqaXQubV9hc3Nl
bWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgIlxuIik7CisgICAgfQorCisgICAgeworICAgICAg
ICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgwMDBhYjIxY2EpKTsKKworICAgICAg
ICBqaXQuc3RvcmU2NCgKKyAgICAgICAgICAgIHZhbHVlLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlLCAweDAwMGFiMjFjYSkpOworCisgICAgICAgIGRhdGFMb2coInJlcGxhY2UgY2FjaGUg
c2l6ZTogIiwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksICJcbiIpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworCisgICAgICAgIGpp
dC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MDAw
YWIyMWNhKSk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBqaXQu
c3RvcmU2NCgKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZSwgMTIwMzQyKSk7CisKKyAgICAgICAgZGF0YUxvZygicmVwbGFjZSBvdXQg
b2YgbGluZSBjYWNoZSBzaXplOiAiLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUo
KSwgIlxuIik7CisgICAgfQorCisgICAgQ1JBU0goKTsKK30KKworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgRnVuY3Rpb24+CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGxpbmtJbmxpbmVPckdvVG9T
bG93UGF0aChjb25zdCBjaGFyKiBuYW1lLCBDQ2FsbEhlbHBlcnMmIGppdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgY29uc3Qg
Ym9vbCBzaG91bGREdW1wQ2FjaGVTaXplc0FuZENyYXNoID0gZmFsc2U7CisgICAgaWYgKHNob3Vs
ZER1bXBDYWNoZVNpemVzQW5kQ3Jhc2gpCisgICAgICAgIGR1bXBDYWNoZVNpemVzQW5kQ3Jhc2go
KmppdC52bSgpKTsKKworICAgIGlmIChqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUo
KSA8PSBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplKSB7CisgICAgICAgIHdoaWxlIChqaXQubV9h
c3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSA8IHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUp
CisgICAgICAgICAgICBqaXQubm9wKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0Lm1f
YXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPT0gc3R1YkluZm8ucGF0Y2guaW5saW5lU2l6
ZSk7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnBhdGNoLnN0
YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUpOworICAg
ICAgICBmdW5jdGlvbihsaW5rQnVmZmVyKTsKKyAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCAoIklubGluZUFjY2Vzc1R5cGU6ICclcyciLCBuYW1lKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb25zdCBib29sIGZhaWxJZkNhbnRJbmxpbmUgPSBmYWxzZTsKKyAgICBp
ZiAoZmFpbElmQ2FudElubGluZSkgeworICAgICAgICBkYXRhTG9nKCJGYWlsdXJlIGZvcjogIiwg
bmFtZSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coInJlYWwgc2l6ZTogIiwgaml0Lm1fYXNzZW1i
bGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksICIgaW5saW5lIHNpemU6Iiwgc3R1YkluZm8ucGF0Y2gu
aW5saW5lU2l6ZSwgIlxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgQ0NhbGxI
ZWxwZXJzIHJlcGxhY2VtZW50SklUKGppdC52bSgpKTsKKyAgICBhdXRvIGp1bXBUb1Nsb3dQYXRo
ID0gcmVwbGFjZW1lbnRKSVQuanVtcCgpOworICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xl
ZCBiZWNhdXNlIG5vYm9keSBzaG91bGQganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCisg
ICAgUkVMRUFTRV9BU1NFUlQocmVwbGFjZW1lbnRKSVQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29k
ZVNpemUoKSA8IHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUpOworICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihyZXBsYWNlbWVudEpJVCwgc3R1YkluZm8ucGF0Y2guc3RhcnQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcmVwbGFjZW1lbnRKSVQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSk7
CisgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb1Nsb3dQYXRoLCBzdHViSW5mby5zbG93UGF0aFN0
YXJ0TG9jYXRpb24oKSk7CisKKyAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSW5saW5l
QWNjZXNzIGxpbmtpbmcgYSBqdW1wIHRvIHNsb3cgcGF0aCBiZWNhdXNlIHdlIHJhbiBvdXQgb2Yg
cm9vbSBpbmxpbmUiKSk7Cit9CisKK3ZvaWQgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVByb3BlcnR5
QWNjZXNzKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIENDYWxsSGVscGVycyBqaXQo
JnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVn
cygpOworCisgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LmJyYW5jaDMyKAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7CisgICAgR1BSUmVnIHN0b3Jh
Z2U7CisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHN0b3JhZ2UgPSBi
YXNlOworICAgIGVsc2UgeworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUucGF5bG9hZEdQUigp
KTsKKyAgICAgICAgc3RvcmFnZSA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICB9CisKKyAgICBq
aXQubG9hZFZhbHVlKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgdmFsdWUpOworCisgICAgbGlua0lubGluZU9y
R29Ub1Nsb3dQYXRoKCJwcm9wZXJ0eSBhY2Nlc3MiLCBqaXQsIHN0dWJJbmZvLCBbJl0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGJyYW5jaFRvU2xv
d1BhdGgsIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKKyAgICB9KTsKK30KKwor
QUxXQVlTX0lOTElORSBzdGF0aWMgR1BSUmVnIGdldFNjcmF0Y2hSZWdpc3RlcihTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9j
YXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICBhbGxvY2F0b3IubG9jayhz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpKTsKKyAgICBhbGxvY2F0
b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VUYWdHUFIpKTsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSk7CisjZW5kaWYKKyAg
ICBHUFJSZWcgc2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCisgICAgICAgIHJldHVybiBJbnZhbGlk
R1BSUmVnOworICAgIHJldHVybiBzY3JhdGNoOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBi
b29sIGhhc0ZyZWVSZWdpc3RlcihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAg
cmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKK30K
KworYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKK30KKwordm9pZCBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sK
KyAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvZmZz
ZXQpKTsKKworICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVl
UmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOworCisgICAgYXV0byBicmFuY2hUb1Ns
b3dQYXRoID0gaml0LmJyYW5jaDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RydWN0
dXJlLT5pZCgpKSk7CisKKyAgICBHUFJSZWcgc3RvcmFnZTsKKyAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQob2Zmc2V0KSkKKyAgICAgICAgc3RvcmFnZSA9IGJhc2U7CisgICAgZWxzZSB7CisgICAgICAg
IHN0b3JhZ2UgPSBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8pOworICAgICAgICBBU1NFUlQo
c3RvcmFnZSAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2Up
OworICAgIH0KKworICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICB2YWx1ZSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSkpOwor
CisgICAgbGlua0lubGluZU9yR29Ub1Nsb3dQYXRoKCJwcm9wZXJ0eSByZXBsYWNlIiwgaml0LCBz
dHViSW5mbywgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGxpbmtCdWZm
ZXIubGluayhicmFuY2hUb1Nsb3dQYXRoLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24o
KSk7CisgICAgfSk7Cit9CisKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVu
Z3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisKKyAgICBp
ZiAoIWhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiBhcnJheS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoSW50MzIKKyAgICAg
ICAgfHwgYXJyYXktPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZQorICAgICAgICB8
fCBhcnJheS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGlndW91czsKK30KKwordm9p
ZCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoVk0mIHZtLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlz
Q2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CisKKyAgICBDQ2FsbEhlbHBl
cnMgaml0KCZ2bSk7CisKKyAgICBHUFJSZWcgYmFzZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2guYmFzZUdQUik7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52
YWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHVi
SW5mbyk7CisKKyAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2Vs
bDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQuYW5kMzIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRj
aCk7CisgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LmJyYW5jaDMyKAorICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihhcnJheS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUucGF5bG9h
ZEdQUigpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyh2YWx1ZS5wYXls
b2FkR1BSKCksIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BS
KCkpOworICAgIGppdC5ib3hJbnQzMih2YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlKTsKKworICAg
IGxpbmtJbmxpbmVPckdvVG9TbG93UGF0aCgiYXJyYXkgbGVuZ3RoIiwgaml0LCBzdHViSW5mbywg
WyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhi
cmFuY2hUb1Nsb3dQYXRoLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKFZNJiB2bSwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQpCit7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworCisgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsK
KworICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNo
b3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KKyAgICBSRUxFQVNFX0FT
U0VSVChqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSA8IHN0dWJJbmZvLnBhdGNo
LmlubGluZVNpemUpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnBh
dGNoLnN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5j
b2RlU2l6ZSgpLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxp
bmsoanVtcCwgdGFyZ2V0KTsKKworICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJJbmxp
bmVBY2Nlc3M6IGxpbmtpbmcgY29uc3RhbnQganVtcCIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSW5saW5lQWNjZXNzX2gKKyNkZWZpbmUgSW5saW5lQWNjZXNzX2gKKworI2lmIEVO
QUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJQcm9wZXJ0
eU9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheTsKK2NsYXNzIFN0
cnVjdHVyZTsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgVk07CisKK2NsYXNzIElu
bGluZUFjY2VzcyB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZUZv
clByb3BlcnR5QWNjZXNzKCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgcmV0dXJu
IDIzOworI2VsaWYgQ1BVKEFSTTY0KQorICAgICAgICByZXR1cm4gNDA7CisjZWxzZQorI2Vycm9y
ICJwbGF0Zm9ybSIKKyNlbmRpZgorICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IHNpemVGb3JMZW5ndGhBY2Nlc3MoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBy
ZXR1cm4gMjY7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIHJldHVybiAzMjsKKyNlbHNlCisj
ZXJyb3IgInBsYXRmb3JtIgorI2VuZGlmCisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3Qgc2l6ZUZvclByb3BlcnR5UmVwbGFjZSgpCisgICAgeworI2lmIENQVShYODZfNjQpCisg
ICAgICAgIHJldHVybiAyMzsKKyNlbGlmIENQVShBUk02NCkKKyAgICAgICAgcmV0dXJuIDQwOwor
I2Vsc2UKKyNlcnJvciAicGxhdGZvcm0iCisjZW5kaWYKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBnZW5lcmF0ZVByb3BlcnR5QWNjZXNzKFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1
cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJv
cGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0
YXRpYyB2b2lkIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShWTSYsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2Fj
aGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3Rh
dGljIHZvaWQgZ2VuZXJhdGVBcnJheUxlbmd0aChWTSYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNB
cnJheSopOworICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXAoVk0mLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVsKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIElubGluZUFjY2Vzc19oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NTEsMTEgKzE1
NTEsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgc3Rh
dGUuaWRlbnQgPSAmaWRlbnQ7CiAgICAgCiAgICAgc3RhdGUuYmFzZUdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgc3RhdGUudmFsdWVSZWdzID0g
SlNWYWx1ZVJlZ3MoCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCi0jZW5kaWYKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUikpOworICAgIHN0YXRlLnZh
bHVlUmVncyA9IHN0dWJJbmZvLnZhbHVlUmVncygpOwogCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKICAgICBzdGF0
ZS5hbGxvY2F0b3IgPSAmYWxsb2NhdG9yOwpAQCAtMTc1MywxNCArMTc0OSwxMSBAQCBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgICAgIHJldHVybiBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0OjpHYXZlVXA7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
c3VjY2Vzc0xhYmVsID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbCBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5kb25lTG9jYXRpb24oKTsKICAgICAgICAg
CiAgICAgbGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CiAKLSAg
ICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgIGZhaWx1cmUsCi0gICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uc2xvd1Bh
dGhTdGFydExvY2F0aW9uKCkpOwogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRh
TG9nKCpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwgIjogR2VuZXJhdGluZyBw
b2x5bW9ycGhpYyBhY2Nlc3Mgc3R1YiBmb3IgIiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkocmV2aXNpb24gMjAyMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMs
MTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIHUuYnlJ
ZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
QXJyYXlMZW5ndGgoKQoreworICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6QXJyYXlMZW5ndGg7
Cit9CisKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCiB7CiAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFj
ZTsKQEAgLTg3LDYgKzkyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAg
IGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
CiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgIGNhc2UgQ2FjaGVUeXBl
OjpBcnJheUxlbmd0aDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAyLDYgKzEwOCw3
IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmFib3V0VG9EaWUoKQogICAgIGNhc2UgQ2FjaGVU
eXBlOjpVbnNldDoKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAgICAgY2FzZSBD
YWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0
aDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjU3LDYgKzI2NCw3IEBAIGJvb2wgU3Ry
dWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQKIHsKICAgICBzd2l0Y2ggKGNhY2hlVHlw
ZSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRC
eUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CkBAIC0yNzUsNiAr
MjgzLDcgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y29udGFpbnNQQyh2b2lkKgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHUuc3R1Yi0+Y29udGFpbnNQQyhwYyk7CiB9Ci0j
ZW5kaWYKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw4IEBAIGVu
dW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBVbnNldCwKICAgICBHZXRCeUlkU2Vs
ZiwKICAgICBQdXRCeUlkUmVwbGFjZSwKLSAgICBTdHViCisgICAgU3R1YiwKKyAgICBBcnJheUxl
bmd0aAogfTsKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewpAQCAtNjgsNiArNjksNyBAQCBw
dWJsaWM6CiAgICAgflN0cnVjdHVyZVN0dWJJbmZvKCk7CiAKICAgICB2b2lkIGluaXRHZXRCeUlk
U2VsZihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICB2b2lkIGluaXRBcnJheUxlbmd0aCgpOwogICAgIHZvaWQgaW5pdFB1dEJ5
SWRSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQpOwogICAgIHZvaWQgaW5pdFN0dWIoQ29kZUJsb2NrKiwgc3RkOjp1bmlxdWVf
cHRyPFBvbHltb3JwaGljQWNjZXNzPik7CiAKQEAgLTE0MywxMyArMTQ1LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkNhbGwgY2Fs
bFJldHVybkxvY2F0aW9uOworICAgIGJvb2wgY29udGFpbnNQQyh2b2lkKiBwYykgY29uc3Q7CiAK
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4OwogCi0gICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdDsKLQogICAgIHVuaW9u
IHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpAQCAtMTY1LDI1ICsxNjUsMzkgQEAgcHVibGljOgog
ICAgIFN0cnVjdHVyZVNldCBidWZmZXJlZFN0cnVjdHVyZXM7CiAgICAgCiAgICAgc3RydWN0IHsK
KyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBz
dGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMsIG9yIHRoZSBsb2NhdGlvbiBv
ZiBwYXRjaGFibGUganVtcCBmb3IgJ2luJyBjYWNoZXMuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVz
ZWRSZWdpc3RlcnM7CisgICAgICAgIHVpbnQzMl90IGlubGluZVNpemU7IC8vIE9ubHkgdXNlZCBm
b3IgYnlJZCBjYWNoZXMuCisgICAgICAgIGludDMyX3QgZGVsdGFGcm9tU3RhcnRUb0NhbGxMb2Nh
dGlvbjsKKyAgICAgICAgaW50MzJfdCBkZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydDsKKwog
ICAgICAgICBpbnQ4X3QgYmFzZUdQUjsKKyAgICAgICAgaW50OF90IHZhbHVlR1BSOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGludDhfdCB2YWx1ZVRhZ0dQUjsKICAgICAgICAgaW50
OF90IGJhc2VUYWdHUFI7CiAjZW5kaWYKLSAgICAgICAgaW50OF90IHZhbHVlR1BSOwotICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRv
RG9uZTsKLSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0p1bXA7Ci0gICAgICAgIGludDMyX3Qg
ZGVsdGFDYWxsVG9TbG93Q2FzZTsKLSAgICAgICAgaW50MzJfdCBkZWx0YUNoZWNrSW1tVG9DYWxs
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9Mb2FkT3JT
dG9yZTsKLSNlbHNlCi0gICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZTsK
LSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZTsKLSNlbmRpZgog
ICAgIH0gcGF0Y2g7CiAKKyAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbigp
IHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmNhbGxBdE9mZnNldChwYXRjaC5kZWx0YUZyb21TdGFydFRv
Q2FsbExvY2F0aW9uKTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsIGRvbmVMb2NhdGlvbigpIHsg
cmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQocGF0Y2guaW5saW5lU2l6ZSk7IH0KKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFN0YXJ0TG9jYXRpb24oKSB7IHJldHVybiBwYXRj
aC5zdGFydC5sYWJlbEF0T2Zmc2V0KHBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0
KTsgfQorICAgIENvZGVMb2NhdGlvbkp1bXAgcGF0Y2hhYmxlSnVtcEZvckluKCkKKyAgICB7IAor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkluKTsKKyAg
ICAgICAgcmV0dXJuIHBhdGNoLnN0YXJ0Lmp1bXBBdE9mZnNldCgwKTsKKyAgICB9CisKKyAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxH
UFJSZWc+KHBhdGNoLnZhbHVlVGFnR1BSKSwKKyNlbmRpZgorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8R1BSUmVnPihwYXRjaC52YWx1ZUdQUikpOworICAgIH0KKworCiAgICAgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlOwogICAgIENhY2hlVHlwZSBjYWNoZVR5cGU7CiAgICAgdWludDhfdCBjb3VudGRv
d247IC8vIFdlIHJlcGF0Y2ggb25seSB3aGVuIHRoaXMgaXMgemVyby4gSWYgbm90IHplcm8sIHdl
IGRlY3JlbWVudC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDExICsyNTgsMjAgQEAg
dm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1faW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBpbmZvID0gKm1faW5zW2ldLm1fc3R1YkluZm87Ci0gICAgICAgIENvZGVMb2NhdGlv
bkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ld
Lm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fZG9uZSkpOwotICAgICAgICBpbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvSnVtcCA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2p1bXApKTsKLSAgICAg
ICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgICAg
IGluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Ns
b3dQYXRoR2VuZXJhdG9yLT5sYWJlbCgpKSk7CisKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
c3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9qdW1wKTsKKyAgICAgICAg
aW5mby5wYXRjaC5zdGFydCA9IHN0YXJ0OworCisgICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXpl
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAg
IHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9kb25lKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGlubGluZVNpemUgPj0gMCk7CisgICAgICAgIGluZm8ucGF0Y2guaW5s
aW5lU2l6ZSA9IGlubGluZVNpemU7CisKKyAgICAgICAgaW5mby5wYXRjaC5kZWx0YUZyb21TdGFy
dFRvQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9z
bG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKSk7CisKKyAgICAgICAgaW5mby5wYXRjaC5kZWx0YUZy
b21TdGFydFRvU2xvd1BhdGhTdGFydCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIoCisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5z
W2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKICAgICB9CiAgICAgCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAkocmV2aXNpb24gMjAyMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsOCArMTg2
LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICAg
ICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVP
cmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdHViSW5mbyk7CiAKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1YkluZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCgKICAgICAKICAgICBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2Vw
dGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkp
OwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNv
ZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywgaWRlbnRpZmll
clVJRChpZGVudGlmaWVyTnVtYmVyKQogICAgICAgICBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JO
b25lLCBiYXNlUGF5bG9hZEdQUiksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwg
cmVzdWx0UGF5bG9hZEdQUiksIHR5cGUpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDIwODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjgsOCArMTY4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2Fj
aGVkR2V0QnlJZChDb2RlTwogICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChyZXN1bHRHUFIsIGZh
bHNlKTsKICAgICB9CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0
LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHR5cGUpOwor
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdp
c3RlcnMsIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlciksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCB0eXBlKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aChtX2ppdCk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEzNSwyMSArNjEzNSwxOSBA
QCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRo
Q2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFJldHVybkxv
Y2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9KdW1wID0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoanVtcCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0
aEJlZ2luKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoanVtcCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLnN0YXJ0ID0g
c3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90
IGlubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKGRvbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmxpbmVTaXplID49IDApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5pbmxpbmVTaXplID0gaW5s
aW5lU2l6ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5wYXRjaC5kZWx0YUZyb21TdGFydFRvQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aENhbGwp
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5w
YXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhCZWdpbikpOwor
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC03NTY4LDcgKzc1
NjYsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8
SklUR2V0QnlJZEdlbmVyYXRvcj46OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNhbGxTaXRlSW5kZXgsCi0gICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhw
YXJhbXNbMV0uZ3ByKCkpLAorICAgICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwgdWlkLCBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLAogICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCB0eXBlKTsKIAogICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjAy
MDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDExIEBAIHZvaWQgSklURGlzYXNzZW1ibGVyOjpk
dW1wRGlzYXNzZW1ibHkoUHIKIHsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmcm9tTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZnJvbSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdG9M
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZih0byk7CisgICAgZHVtcERpc2Fzc2VtYmx5
KG91dCwgZnJvbUxvY2F0aW9uLCB0b0xvY2F0aW9uKTsKK30KKwordm9pZCBKSVREaXNhc3NlbWJs
ZXI6OmR1bXBEaXNhc3NlbWJseShQcmludFN0cmVhbSYgb3V0LCBDb2RlTG9jYXRpb25MYWJlbCBm
cm9tTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsIHRvTG9jYXRpb24pCit7CiAgICAgZGlzYXNz
ZW1ibGUoZnJvbUxvY2F0aW9uLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0b0xvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbUxvY2F0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpLCAiICAgICAgICAiLCBvdXQpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwMjA4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDYgKzYzLDggQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYsIExpbmtCdWZmZXImKTsKICAgICB2b2lkIHJlcG9ydFRvUHJvZmlsZXIoUHJvZmlsZXI6
OkNvbXBpbGF0aW9uKiwgTGlua0J1ZmZlciYpOwogCisgICAgdm9pZCBkdW1wRGlzYXNzZW1ibHko
UHJpbnRTdHJlYW0mLCBDb2RlTG9jYXRpb25MYWJlbCBmcm9tLCBDb2RlTG9jYXRpb25MYWJlbCB0
byk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBkdW1wSGVhZGVyKFByaW50U3RyZWFtJiwgTGlua0J1
ZmZlciYpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmaXJzdFNsb3dMYWJlbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsy
OSw5IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjksMjUgKzcwLDE5IEBAIEpJVEJ5
SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAKIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6
ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQogewot
ICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRp
b25PZihtX2NhbGwpOwotICAgIG1fc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKLSAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgZmFz
dFBhdGgubG9jYXRpb25PZihtX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlvbik7Ci0g
ICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9KdW1wID0gTWFjcm9Bc3NlbWJsZXI6OmRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0
UGF0aC5sb2NhdGlvbk9mKG1fc3RydWN0dXJlQ2hlY2spKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRp
b24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOwotI2Vsc2UKLSAgICBtX3N0
dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBm
YXN0UGF0aC5sb2NhdGlvbk9mKG1fdGFnTG9hZE9yU3RvcmUpKTsKLSAgICBtX3N0dWJJbmZvLT5w
YXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBh
dGgubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7Ci0jZW5kaWYKLSAgICBtX3N0dWJJbmZvLT5w
YXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aC5sb2NhdGlv
bk9mKG1fc2xvd1BhdGhCZWdpbikpOwotICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAg
IGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICBB
U1NFUlQobV9zdGFydC5pc1NldCgpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGZh
c3RQYXRoLmxvY2F0aW9uT2YobV9zdGFydCk7CisgICAgbV9zdHViSW5mby0+cGF0Y2guc3RhcnQg
PSBzdGFydDsKKworICAgIGludDMyX3QgaW5saW5lU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIHN0YXJ0LCBmYXN0UGF0aC5sb2NhdGlvbk9m
KG1fZG9uZSkpOworICAgIFJFTEVBU0VfQVNTRVJUKGlubGluZVNpemUgPiAwKTsKKyAgICBtX3N0
dWJJbmZvLT5wYXRjaC5pbmxpbmVTaXplID0gaW5saW5lU2l6ZTsKKworICAgIG1fc3R1YkluZm8t
PnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9DYWxsTG9jYXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBzdGFydCwgc2xvd1BhdGgubG9jYXRpb25P
ZihtX3Nsb3dQYXRoQ2FsbCkpOworICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhRnJvbVN0YXJ0
VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKKyAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2luKSk7
CiB9CiAKIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikKQEAgLTk1LDM4ICs5MCwyOSBAQCB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXpl
KExpbmtCdWZmCiAgICAgZmluYWxpemUobGlua0J1ZmZlciwgbGlua0J1ZmZlcik7CiB9CiAKLXZv
aWQgSklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxl
ciYgaml0KQordm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RDb21tb24oTWFjcm9B
c3NlbWJsZXImIGppdCwgc2l6ZV90IGlubGluZUlDU2l6ZSkKIHsKLSAgICBtX3N0cnVjdHVyZUNo
ZWNrID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5w
YXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgIG1fc3Ry
dWN0dXJlSW1tLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKTsKKyAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CisgICAgc2l6ZV90IHN0YXJ0U2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5i
dWZmZXIoKS5jb2RlU2l6ZSgpOworICAgIG1fc2xvd1BhdGhKdW1wID0gaml0Lmp1bXAoKTsKKyAg
ICB3aGlsZSAoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgLSBzdGFydFNpemUg
PCBpbmxpbmVJQ1NpemUpCisgICAgICAgIGppdC5ub3AoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChq
aXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSAtIHN0YXJ0U2l6ZSA9PSBpbmxpbmVJ
Q1NpemUpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwogfQogCiBKSVRHZXRCeUlkR2VuZXJh
dG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLAotICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZh
bHVlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9yKAotICAg
ICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVn
aXN0ZXJzLCBiYXNlLCB2YWx1ZSkKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1l
LCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlKQorICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSkKKyAgICAsIG1faXNM
ZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lID09IGNvZGVCbG9jay0+dm0oKS0+cHJvcGVydHlOYW1l
cy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIo
KSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CiAKIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewotICAgIGdlbmVyYXRlRmFzdFBh
dGhDaGVja3Moaml0KTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1fbG9hZE9yU3Rv
cmUgPSBqaXQubG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5wYXlsb2FkR1BSKCksIDApLCBtX3ZhbHVlLnBh
eWxvYWRHUFIoKSkubGFiZWwoKTsKLSNlbHNlCi0gICAgbV90YWdMb2FkT3JTdG9yZSA9IGppdC5s
b2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgMCksIG1fdmFsdWUudGFnR1BSKCkpLmxh
YmVsKCk7Ci0gICAgbV9sb2FkT3JTdG9yZSA9IGppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NP
ZmZzZXRQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLnBheWxv
YWRHUFIoKSwgMCksIG1fdmFsdWUucGF5bG9hZEdQUigpKS5sYWJlbCgpOwotI2VuZGlmCi0gICAg
Ci0gICAgbV9kb25lID0gaml0LmxhYmVsKCk7CisgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwg
bV9pc0xlbmd0aEFjY2VzcyA/IElubGluZUFjY2Vzczo6c2l6ZUZvckxlbmd0aEFjY2VzcygpIDog
SW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKIEpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCkBAIC0xNDMsMTkgKzEyOSw3IEBAIEpJVFB1
dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IKIAogdm9pZCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7Ci0gICAgZ2Vu
ZXJhdGVGYXN0UGF0aENoZWNrcyhqaXQpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
bV9sb2FkT3JTdG9yZSA9IGppdC5zdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAg
ICAgbV92YWx1ZS5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5w
YXlsb2FkR1BSKCksIDApKS5sYWJlbCgpOwotI2Vsc2UKLSAgICBtX3RhZ0xvYWRPclN0b3JlID0g
aml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKAotICAgICAgICBtX3ZhbHVlLnRhZ0dQ
UigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSkubGFi
ZWwoKTsKLSAgICBtX2xvYWRPclN0b3JlID0gaml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBh
dGNoKAotICAgICAgICBtX3ZhbHVlLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9iYXNlLnBheWxvYWRHUFIoKSwgMCkpLmxhYmVsKCk7Ci0jZW5kaWYKLSAgICAKLSAgICBt
X2RvbmUgPSBqaXQubGFiZWwoKTsKKyAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVB
Y2Nlc3M6OnNpemVGb3JQcm9wZXJ0eVJlcGxhY2UoKSk7CiB9CiAKIFZfSklUT3BlcmF0aW9uX0VT
c2lKSkkgSklUUHV0QnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbigpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5o
CShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDE3ICs2OCwxNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZXBvcnRTbG93UGF0aENhbGwoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNs
b3dQYXRoQmVnaW4sIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCiAgICAgewogICAgICAgICBt
X3Nsb3dQYXRoQmVnaW4gPSBzbG93UGF0aEJlZ2luOwotICAgICAgICBtX2NhbGwgPSBjYWxsOwor
ICAgICAgICBtX3Nsb3dQYXRoQ2FsbCA9IGNhbGw7CiAgICAgfQogICAgIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UGF0aEJl
Z2luOyB9Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzbG93UGF0aEp1bXAoKSBjb25zdCB7IHJldHVybiBtX3Nsb3dQYXRoSnVtcC5pc1NldCgpID8g
bV9zbG93UGF0aEp1bXAgOiBtX3N0cnVjdHVyZUNoZWNrLm1fanVtcDsgfQogCiAgICAgdm9pZCBm
aW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQ
YXRoTGlua0J1ZmZlcik7CiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJik7CiAgICAgCiBw
cm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKE1hY3JvQXNzZW1ibGVy
Jik7CisgICAgdm9pZCBnZW5lcmF0ZUZhc3RDb21tb24oTWFjcm9Bc3NlbWJsZXImLCBzaXplX3Qg
c2l6ZSk7CiAgICAgCiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1f
dmFsdWU7CkBAIC04OSw5ICs4OSwxMSBAQCBwcm90ZWN0ZWQ6CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBBc3NlbWJsZXJMYWJlbCBtX3RhZ0xvYWRPclN0b3JlOwogI2VuZGlmCisgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
ZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Ns
b3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07
CiAKIGNsYXNzIEpJVEdldEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7
CkBAIC05OSwxMCArMTAxLDEzIEBAIHB1YmxpYzoKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yKCkg
eyB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBDb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
SlNWYWx1ZVJlZ3MgYmFzZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUp
OworICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgVW5pcXVlZFN0cmluZ0ltcGwqIHByb3BlcnR5TmFt
ZSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5
cGUpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwor
Citwcml2YXRlOgorICAgIGJvb2wgbV9pc0xlbmd0aEFjY2VzczsKIH07CiAKIGNsYXNzIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24g
MjAyMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9y
IEpJVDo6ZW1pdEdldEJ5VmFsV2l0CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEFjY2Vzc1R5cGU6OkdldCk7CisgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIAogICAgIGZhc3REb25lQ2FzZSA9IGp1bXAoKTsK
QEAgLTU3Miw2ICs1NzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKEluc3Ry
dWN0CiB7CiAgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwogICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKIApAQCAtNTc5LDcgKzU4MCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3QKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0UHVyZSk7CisgICAgICAgIGlkZW50LT5pbXBsKCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRQ
dXJlKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwpAQCAtNjIw
LDcgKzYyMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbioKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsKKyAgICAg
ICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24g
MjAyMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGlu
ZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIklDU3RhdHMuaCIKKyNp
bmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgpAQCAtOTAsOTUgKzkxLDYgQEAgc3Rh
dGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQgogICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ2FsbChjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7CiB9CiAKLXN0YXRpYyB2b2lk
IHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyJiBzbG93UGF0aEZ1bmN0aW9uLAotICAg
IGJvb2wgY29tcGFjdCkKLXsKLSAgICAvLyBPbmx5IG9wdGltaXplIG9uY2UhCi0gICAgcmVwYXRj
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVu
Y3Rpb24pOwotCi0gICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVyZSBjaGVjayAmIHRoZSBvZmZzZXQg
b2YgdGhlIGxvYWQuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMigKLSAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJf
dClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKSwKLSAgICAgICAgYml0d2lzZV9j
YXN0PGludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
aWYgKGNvbXBhY3QpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZz
ZXQpKTsKLSAgICBlbHNlCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkp
OwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAoY29tcGFjdCkgewotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xv
YWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRP
clN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdM
b2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3Jl
KSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLSNlbmRpZgotfQotCi1z
dGF0aWMgdm9pZCByZXNldEdldEJ5SURDaGVja0FuZExvYWQoU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQotewotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJf
dClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKLSAgICBpZiAoTWFjcm9Bc3Nl
bWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hh
YmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAotICAg
ICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+
KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsK
LSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0j
ZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1
Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAg
aWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRv
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVs
KSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5i
YXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotICAgIH0K
LSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNf
Y2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUp
LCAwKTsKLSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJ
bnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlmCi19
Ci0KLXN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlQodGFyZ2V0KTsKLSAgICAKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBs
YWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwbGFjZVdpdGhKdW1wKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQ
YXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgKLSAgICAgICAgICAg
ICAgICAgICAgLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKSks
Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChzdHViSW5mbyk7Ci0gICAg
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9KdW1wKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7Ci19
Ci0KIGVudW0gSW5saW5lQ2FjaGVBY3Rpb24gewogICAgIEdpdmVVcE9uQ2FjaGUsCiAgICAgUmV0
cnlDYWNoZUxhdGVyLApAQCAtMjQxLDkgKzE1MywyMyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nh
c2U7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkg
ewotICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpCi0gICAgICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5
TGVuZ3RoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpKQorICAgICAg
ICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICYmIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50
U2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgICAgICAgICAgICAgJiYgYWN0
aW9uRm9yQ2VsbCh2bSwgYmFzZVZhbHVlLmFzQ2VsbCgpKSA9PSBBdHRlbXB0VG9DYWNoZQorICAg
ICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHVi
SW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlVmFsdWUpKQorICAgICAgICAgICAgICAgICkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzZXQg
YSB3YXRjaHBvaW50IG9yIHNvbWV0aGluZz8KKyAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAgIElubGluZUFjY2Vz
czo6Z2VuZXJhdGVBcnJheUxlbmd0aCgqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywganNDYXN0
PEpTQXJyYXkqPihiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJy
YXlMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6Omdl
dExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCk7CisgICAgICAg
IH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpKQogICAgICAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTdHJpbmdM
ZW5ndGgpOwogICAgICAgICBlbHNlIGlmIChEaXJlY3RBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpz
RHluYW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oYmFzZVZhbHVlKSkgewogICAgICAgICAgICAg
Ly8gSWYgdGhlcmUgd2VyZSBvdmVycmlkZXMsIHRoZW4gd2UgY2FuIGhhbmRsZSB0aGlzIGFzIGEg
bm9ybWFsIHByb3BlcnR5IGxvYWQhIEd1YXJkaW5nCkBAIC0yNzYsMjAgKzIwMiwyMSBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgIElubGluZUNhY2hl
QWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKICAgICAgICAgaWYg
KGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKICAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisK
ICAgICAgICAgCiAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgogICAgICAgICBpZiAo
c3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICYmIHNs
b3QuaXNDYWNoZWFibGVWYWx1ZSgpCiAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZVZhbHVlCiAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAg
ICAgICYmIGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpCi0gICAgICAgICAgICAm
JiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgICAgICAmJiBh
Y3Rpb24gPT0gQXR0ZW1wdFRvQ2FjaGUKICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9t
UHJveHkpIHsKKwogICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkU2VsZlBhdGNo
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgICAgIHN0
cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRl
T3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIGFwcHJv
cHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CisgICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlUHJvcGVydHlBY2Nlc3MoKmNvZGVCbG9jay0+dm0oKSwgc3R1Yklu
Zm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICBzdHViSW5m
by5pbml0R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQpAQCAt
MzcwLDcgKzI5Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQK
ICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFs
dWUuY2xhc3NJbmZvT3JOdWxsKCksIHByb3BlcnR5TmFtZSkpOwogICAgICAgICAKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgIHJlcGxhY2VXaXRoSnVtcChz
dHViSW5mbywgcmVzdWx0LmNvZGUoKSk7CisgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1
YkFzSnVtcChleGVjLT52bSgpLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNv
ZGUoKSkpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygp
ID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKQEAgLTM4Miw3ICszMDksNyBAQCB2
b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgR0NTYWZlQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0o
KS5oZWFwKTsKICAgICAKICAgICBpZiAodHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwg
cHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAg
ICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICAg
ICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbigpLCBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogfQogCiBz
dGF0aWMgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVu
Y3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCkBAIC00
MzMsMTYgKzM2MCwxNCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlE
CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0dWJJbmZv
LmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgJiYgaXNJbmxp
bmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkKLSAgICAgICAgICAgICAgICAmJiBNYWNyb0Fz
c2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6
OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZz
ZXQoKSkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVG
b3IoaWRlbnQuaW1wbCgpKSkgewogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
aWRlbnQpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXBhdGNoQnlJZFNl
bGZBY2Nlc3MoCi0gICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlh
dGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtp
bmQpKTsKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZSh2bSwgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAg
ICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGNvZGVCbG9jaywgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgfQpAQCAtNTI0LDExICs0NDksOCBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQp
KTsKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAg
ICAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvSnVtcCksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgp
KSk7CisKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHZtLCBzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAgIH0KICAgICAKICAgICBy
ZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2Fj
aGVMYXRlcjsKQEAgLTU0MCw3ICs0NjIsNyBAQCB2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0
ZSogZXhlYywgSlNWCiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+
Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAKICAgICBpZiAodHJ5
Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNo
Q2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHBy
b3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICBy
ZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
KCksIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9
CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCkBAIC01ODYsOCArNTA4
LDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50KSk7CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgp
KTsKKyAgICAgICAgLy8gRklYTUU6IG1heWJlIHdlIHNob3VsZCBqdXN0IHVzZSByZXdpcmVTdHVi
QXNKdW1wSGVyZT8KKyAgICAgICAgLy9JbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoKQor
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9KdW1wKSwKKyAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoYWJsZUp1bXBGb3JJbigpLAog
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAgIH0KICAg
ICAKQEAgLTYwMCw3ICs1MjUsNyBAQCB2b2lkIHJlcGF0Y2hJbigKIHsKICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgaWYgKHRyeVJlcGF0Y2hJbihl
eGVjLCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNh
Y2hlKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7CisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMt
PmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgb3BlcmF0aW9uSW4p
OwogfQogCiBzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZikKQEAgLTk3MiwxNCArODk3LDEz
IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKIAogdm9pZCByZXNldEdldEJ5SUQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlJREtpbmQg
a2luZCkKIHsKLSAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKLSAg
ICByZXNldEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAg
ICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBh
cHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAgIElubGluZUFj
Y2Vzczo6cmV3aXJlU3R1YkFzSnVtcCgqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywgc3R1Yklu
Zm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lkIHJlc2V0UHV0QnlJRChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIFZf
SklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxW
X0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgVl9KSVRPcGVy
YXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3Bl
cmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFZfSklUT3BlcmF0aW9u
X0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rpb247CiAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CkBAIC05OTEsMTQgKzkxNSwxNCBAQCB2b2lk
IHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAgICAgIEFTU0VSVCh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1p
emUpOwogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3RPcHRpbWl6ZTsKICAgICB9Ci0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICByZXNldFB1
dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
SnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKworICAgIHJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIG9wdGltaXpl
ZEZ1bmN0aW9uKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoKmNvZGVCbG9j
ay0+dm0oKSwgc3R1YkluZm8sIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKIH0K
IAogdm9pZCByZXNldEluKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
IHsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJ
bmZvLnBhdGNoYWJsZUp1bXBGb3JJbigpLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24o
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281496</attachid>
            <date>2016-06-16 15:51:40 -0700</date>
            <delta_ts>2016-06-16 19:50:49 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>73026</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDIwODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI3Miw2ICsxMjcyLDggQEAKIAkJNzBFQ0E2MDkxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzJBQUY3Q0QxRDBEMzFCMzAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJBQUY3Q0IxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb24uY3BwICovOyB9OwogCQk3MkFBRjdDRTFEMEQzMUIzMDA1RTYwQkUgLyogSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uaCAqLzsgfTsKKwkJNzkwNUJCNjgxRDEyMDUwRTAwMTlGRTU3IC8qIElu
bGluZUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLzsgfTsK
KwkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJCNjcxRDEyMDUwRTAwMTlG
RTU3IC8qIElubGluZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5MTYwREJEMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTE2MERC
QjFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwICovOyB9OwogCQk3OTE2MERCRTFD
OEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MTYwREJDMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJl
dm9rZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVFRDVD
MDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovOyB9OwpAQCAtMzQ1Myw2ICszNDU1
LDggQEAKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUg
LyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUFjY2Vzcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxp
bmVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQWNjZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYwREJCMUM4RTNFQzgwMDhDMDg1
QSAvKiBQcm94eVJldm9rZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcm94eVJldm9rZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYwREJD
MUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm94eVJldm9rZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjU3Nyw2ICs2NTgxLDggQEAKIAkJCQkwRjAzMzJD
MTE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuY3BwICovLAogCQkJCTBGMDMzMkMy
MThCMDE3NjMwMDVGOTc5QSAvKiBHZXRCeUlkVmFyaWFudC5oICovLAogCQkJCTBGMEI4M0E4MTRC
Q0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICovLAorCQkJCTc5MDVCQjY2MUQxMjA1MEUw
MDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3BwICovLAorCQkJCTc5MDVCQjY3MUQxMjA1MEUwMDE5
RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCAqLywKIAkJCQkxNDhBN0JFRDFCODI5NzVBMDAyRDkxNTcg
LyogSW5saW5lQ2FsbEZyYW1lLmNwcCAqLywKIAkJCQkxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcg
LyogSW5saW5lQ2FsbEZyYW1lLmggKi8sCiAJCQkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8q
IElubGluZUNhbGxGcmFtZVNldC5jcHAgKi8sCkBAIC03MzIxLDYgKzczMjcsNyBAQAogCQkJCTBG
MkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0M0MzOTJBQjFDM0JFQjA1MDAyNDFGNTMgLyogQXNzZW1ibGVy
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhERjgyMDAyQjJBRDcgLyog
REZHT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlG
RTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkUxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05MzAzLDYgKzkzMTAsNyBAQAogCQkJCTBGNkI4QUQ4MUM0RUREQTIw
MDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3
M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTc5MDVCQjY4MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMjcxQUE5MDk1NjAwRDMzQjMzIC8qIFNjb3BlZEFy
Z3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyRjFBQUE4MDY5MDBEMzNCMzMg
LyogU2NvcGVkQXJndW1lbnRzVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyQUJDRjkx
QkVBOUJEMjAwNjQwM0EwIC8qIFJlbW90ZUF1dG9tYXRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyLmgJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDM5ICs2Miw2
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgY2xhc3MgQXNzZW1ibGVyRGF0YSB7
CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFzc2VtYmxlckRhdGEpOworICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IElubGluZUNhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoKICAg
ICAgICAgQXNzZW1ibGVyRGF0YSgpCi0gICAgICAgICAgICA6IG1fYnVmZmVyKG51bGxwdHIpCi0g
ICAgICAgICAgICAsIG1fY2FwYWNpdHkoMCkKKyAgICAgICAgICAgIDogbV9idWZmZXIobV9pbmxp
bmVCdWZmZXIpCisgICAgICAgICAgICAsIG1fY2FwYWNpdHkoSW5saW5lQ2FwYWNpdHkpCiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEFzc2VtYmxlckRhdGEodW5zaWduZWQgaW5pdGlh
bENhcGFjaXR5KQorICAgICAgICBBc3NlbWJsZXJEYXRhKHNpemVfdCBpbml0aWFsQ2FwYWNpdHkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBpbml0aWFsQ2FwYWNpdHk7Ci0g
ICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1fY2Fw
YWNpdHkpKTsKKyAgICAgICAgICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPD0gSW5saW5lQ2FwYWNp
dHkpIHsKKyAgICAgICAgICAgICAgICBtX2NhcGFjaXR5ID0gSW5saW5lQ2FwYWNpdHk7CisgICAg
ICAgICAgICAgICAgbV9idWZmZXIgPSBtX2lubGluZUJ1ZmZlcjsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgbV9jYXBhY2l0eSA9IGluaXRpYWxDYXBhY2l0eTsKKyAgICAg
ICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1fY2Fw
YWNpdHkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEFzc2VtYmxlckRh
dGEoQXNzZW1ibGVyRGF0YSYmIG90aGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1ZmZl
ciA9IG90aGVyLm1fYnVmZmVyOwotICAgICAgICAgICAgb3RoZXIubV9idWZmZXIgPSBudWxscHRy
OworICAgICAgICAgICAgaWYgKG90aGVyLmlzSW5saW5lQnVmZmVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQob3RoZXIubV9jYXBhY2l0eSA9PSBJbmxpbmVDYXBhY2l0eSk7CisgICAgICAg
ICAgICAgICAgbWVtY3B5KG1faW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZlciwgSW5s
aW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gbV9pbmxpbmVCdWZmZXI7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IG90aGVyLm1f
YnVmZmVyOwogICAgICAgICAgICAgbV9jYXBhY2l0eSA9IG90aGVyLm1fY2FwYWNpdHk7CisKKyAg
ICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgICAgIG90aGVyLm1f
Y2FwYWNpdHkgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgQXNzZW1ibGVyRGF0YSYgb3BlcmF0
b3I9KEFzc2VtYmxlckRhdGEmJiBvdGhlcikKICAgICAgICAgewotICAgICAgICAgICAgbV9idWZm
ZXIgPSBvdGhlci5tX2J1ZmZlcjsKLSAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIGlmIChtX2J1ZmZlciAmJiAhaXNJbmxpbmVCdWZmZXIoKSkKKyAgICAg
ICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChvdGhlci5p
c0lubGluZUJ1ZmZlcigpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY2FwYWNp
dHkgPT0gSW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgICAgIG1lbWNweShtX2lubGluZUJ1
ZmZlciwgb3RoZXIubV9pbmxpbmVCdWZmZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAg
ICAgICBtX2J1ZmZlciA9IG1faW5saW5lQnVmZmVyOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgbV9idWZmZXIgPSBvdGhlci5tX2J1ZmZlcjsKICAgICAgICAgICAgIG1fY2Fw
YWNpdHkgPSBvdGhlci5tX2NhcGFjaXR5OworCisgICAgICAgICAgICBvdGhlci5tX2J1ZmZlciA9
IG51bGxwdHI7CiAgICAgICAgICAgICBvdGhlci5tX2NhcGFjaXR5ID0gMDsKICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgICAgfQogCiAgICAgICAgIH5Bc3NlbWJsZXJEYXRhKCkKICAg
ICAgICAgewotICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgICAgICAgICAgaWYg
KG1fYnVmZmVyICYmICFpc0lubGluZUJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIGZhc3RGcmVl
KG1fYnVmZmVyKTsKICAgICAgICAgfQogCiAgICAgICAgIGNoYXIqIGJ1ZmZlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyOyB9CkBAIC0xMDQsMTkgKzEyNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBncm93KHVuc2lnbmVkIGV4dHJhQ2FwYWNpdHkgPSAwKQogICAgICAgICB7
CiAgICAgICAgICAgICBtX2NhcGFjaXR5ID0gbV9jYXBhY2l0eSArIG1fY2FwYWNpdHkgLyAyICsg
ZXh0cmFDYXBhY2l0eTsKLSAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgICAgICAgICBpZiAoaXNJ
bmxpbmVCdWZmZXIoKSkgeworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KGZhc3RNYWxsb2MobV9jYXBhY2l0eSkpOworICAgICAgICAgICAgICAgIG1lbWNweSht
X2J1ZmZlciwgbV9pbmxpbmVCdWZmZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RS
ZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6
CisgICAgICAgIGJvb2wgaXNJbmxpbmVCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlciA9
PSBtX2lubGluZUJ1ZmZlcjsgfQogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICAgICAgY2hh
ciBtX2lubGluZUJ1ZmZlcltJbmxpbmVDYXBhY2l0eV07CiAgICAgICAgIHVuc2lnbmVkIG1fY2Fw
YWNpdHk7CiAgICAgfTsKIAogICAgIGNsYXNzIEFzc2VtYmxlckJ1ZmZlciB7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgaW5pdGlhbENhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoKICAgICAg
ICAgQXNzZW1ibGVyQnVmZmVyKCkKLSAgICAgICAgICAgIDogbV9zdG9yYWdlKGluaXRpYWxDYXBh
Y2l0eSkKKyAgICAgICAgICAgIDogbV9zdG9yYWdlKCkKICAgICAgICAgICAgICwgbV9pbmRleCgw
KQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTE2Myw3ICsxOTEsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICB1bnNpZ25lZCBkZWJ1Z09mZnNldCgpIHsgcmV0dXJuIG1faW5kZXg7IH0K
IAotICAgICAgICBBc3NlbWJsZXJEYXRhIHJlbGVhc2VBc3NlbWJsZXJEYXRhKCkgeyByZXR1cm4g
V1RGTW92ZShtX3N0b3JhZ2UpOyB9CisgICAgICAgIEFzc2VtYmxlckRhdGEmJiByZWxlYXNlQXNz
ZW1ibGVyRGF0YSgpIHsgcmV0dXJuIFdURk1vdmUobV9zdG9yYWdlKTsgfQogCiAgICAgICAgIC8v
IExvY2FsV3JpdGVyIGlzIGEgdHJpY2sgdG8ga2VlcCB0aGUgc3RvcmFnZSBidWZmZXIgYW5kIHRo
ZSBpbmRleAogICAgICAgICAvLyBpbiBtZW1vcnkgd2hpbGUgaXNzdWluZyBtdWx0aXBsZSBTdG9y
ZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw1NCArMTAyLDU4IEBAIHZv
aWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICBhbGxvY2F0ZShtX2lu
aXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBpZiAoZGlkRmFpbFRvQWxsb2NhdGUo
KSkKICAgICAgICAgcmV0dXJuOworCiAgICAgVmVjdG9yPExpbmtSZWNvcmQsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiYganVtcHNUb0xpbmsgPSBtYWNyb0Fzc2VtYmxlci5qdW1wc1RvTGluaygp
OwogICAgIG1fYXNzZW1ibGVyU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1
ZmZlcigpLnJlbGVhc2VBc3NlbWJsZXJEYXRhKCk7CiAgICAgdWludDhfdCogaW5EYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9hc3NlbWJsZXJTdG9yYWdlLmJ1ZmZlcigpKTsKIAog
ICAgIEFzc2VtYmxlckRhdGEgb3V0QnVmZmVyKG1fc2l6ZSk7CisKICAgICB1aW50OF90KiBvdXRE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ob3V0QnVmZmVyLmJ1ZmZlcigpKTsKICAg
ICB1aW50OF90KiBjb2RlT3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fY29k
ZSk7CiAKICAgICBpbnQgcmVhZFB0ciA9IDA7CiAgICAgaW50IHdyaXRlUHRyID0gMDsKICAgICB1
bnNpZ25lZCBqdW1wQ291bnQgPSBqdW1wc1RvTGluay5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGp1bXBDb3VudDsgKytpKSB7Ci0gICAgICAgIGludCBvZmZzZXQgPSByZWFk
UHRyIC0gd3JpdGVQdHI7Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDEpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAvLyBDb3B5IHRoZSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgbGFzdCBqdW1w
IHRvIHRoZSBjdXJyZW50IG9uZS4KLSAgICAgICAgc2l6ZV90IHJlZ2lvblNpemUgPSBqdW1wc1Rv
TGlua1tpXS5mcm9tKCkgLSByZWFkUHRyOwotICAgICAgICBJbnN0cnVjdGlvblR5cGUqIGNvcHlT
b3VyY2UgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0cnVjdGlvblR5cGUqPihpbkRhdGEgKyBy
ZWFkUHRyKTsKLSAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlKiBjb3B5RW5kID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8SW5zdHJ1Y3Rpb25UeXBlKj4oaW5EYXRhICsgcmVhZFB0ciArIHJlZ2lvblNpemUp
OwotICAgICAgICBJbnN0cnVjdGlvblR5cGUqIGNvcHlEc3QgPSByZWludGVycHJldF9jYXN0X3B0
cjxJbnN0cnVjdGlvblR5cGUqPihvdXREYXRhICsgd3JpdGVQdHIpOwotICAgICAgICBBU1NFUlQo
IShyZWdpb25TaXplICUgMikpOwotICAgICAgICBBU1NFUlQoIShyZWFkUHRyICUgMikpOwotICAg
ICAgICBBU1NFUlQoISh3cml0ZVB0ciAlIDIpKTsKLSAgICAgICAgd2hpbGUgKGNvcHlTb3VyY2Ug
IT0gY29weUVuZCkKLSAgICAgICAgICAgICpjb3B5RHN0KysgPSAqY29weVNvdXJjZSsrOwotICAg
ICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fzc2VtYmxlclN0b3JhZ2UsIHJlYWRQdHIsIGp1bXBz
VG9MaW5rW2ldLmZyb20oKSwgb2Zmc2V0KTsKLSAgICAgICAgcmVhZFB0ciArPSByZWdpb25TaXpl
OwotICAgICAgICB3cml0ZVB0ciArPSByZWdpb25TaXplOwotICAgICAgICAgICAgCi0gICAgICAg
IC8vIENhbGN1bGF0ZSBhYnNvbHV0ZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhcmdldCwgaW4gdGhl
IGNhc2Ugb2YgYmFja3dhcmRzCi0gICAgICAgIC8vIGJyYW5jaGVzIHdlIG5lZWQgdG8gYmUgcHJl
Y2lzZSwgZm9yd2FyZCBicmFuY2hlcyB3ZSBhcmUgcGVzc2ltaXN0aWMKLSAgICAgICAgY29uc3Qg
dWludDhfdCogdGFyZ2V0OwotICAgICAgICBpZiAoanVtcHNUb0xpbmtbaV0udG8oKSA+PSBqdW1w
c1RvTGlua1tpXS5mcm9tKCkpCi0gICAgICAgICAgICB0YXJnZXQgPSBjb2RlT3V0RGF0YSArIGp1
bXBzVG9MaW5rW2ldLnRvKCkgLSBvZmZzZXQ7IC8vIENvbXBlbnNhdGUgZm9yIHdoYXQgd2UgaGF2
ZSBjb2xsYXBzZWQgc28gZmFyCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRhcmdldCA9IGNv
ZGVPdXREYXRhICsganVtcHNUb0xpbmtbaV0udG8oKSAtIGV4ZWN1dGFibGVPZmZzZXRGb3IoanVt
cHNUb0xpbmtbaV0udG8oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgSnVtcExpbmtUeXBlIGp1
bXBMaW5rVHlwZSA9IE1hY3JvQXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcHNUb0xpbmtb
aV0sIGNvZGVPdXREYXRhICsgd3JpdGVQdHIsIHRhcmdldCk7Ci0gICAgICAgIC8vIENvbXBhY3Qg
YnJhbmNoIGlmIHdlIGNhbi4uLgotICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkNvbXBh
Y3QoanVtcHNUb0xpbmtbaV0udHlwZSgpKSkgewotICAgICAgICAgICAgLy8gU3RlcCBiYWNrIGlu
IHRoZSB3cml0ZSBzdHJlYW0KLSAgICAgICAgICAgIGludDMyX3QgZGVsdGEgPSBNYWNyb0Fzc2Vt
Ymxlcjo6anVtcFNpemVEZWx0YShqdW1wc1RvTGlua1tpXS50eXBlKCksIGp1bXBMaW5rVHlwZSk7
Ci0gICAgICAgICAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAgICAgICAgICB3cml0ZVB0ciAtPSBk
ZWx0YTsKLSAgICAgICAgICAgICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fzc2VtYmxlclN0b3Jh
Z2UsIGp1bXBzVG9MaW5rW2ldLmZyb20oKSAtIGRlbHRhLCByZWFkUHRyLCByZWFkUHRyIC0gd3Jp
dGVQdHIpOworICAgIGlmIChtX3Nob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wQ291bnQ7ICsraSkgeworICAgICAgICAg
ICAgaW50IG9mZnNldCA9IHJlYWRQdHIgLSB3cml0ZVB0cjsKKyAgICAgICAgICAgIEFTU0VSVCgh
KG9mZnNldCAmIDEpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENvcHkgdGhl
IGluc3RydWN0aW9ucyBmcm9tIHRoZSBsYXN0IGp1bXAgdG8gdGhlIGN1cnJlbnQgb25lLgorICAg
ICAgICAgICAgc2l6ZV90IHJlZ2lvblNpemUgPSBqdW1wc1RvTGlua1tpXS5mcm9tKCkgLSByZWFk
UHRyOworICAgICAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlKiBjb3B5U291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8SW5zdHJ1Y3Rpb25UeXBlKj4oaW5EYXRhICsgcmVhZFB0cik7CisgICAgICAg
ICAgICBJbnN0cnVjdGlvblR5cGUqIGNvcHlFbmQgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0
cnVjdGlvblR5cGUqPihpbkRhdGEgKyByZWFkUHRyICsgcmVnaW9uU2l6ZSk7CisgICAgICAgICAg
ICBJbnN0cnVjdGlvblR5cGUqIGNvcHlEc3QgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0cnVj
dGlvblR5cGUqPihvdXREYXRhICsgd3JpdGVQdHIpOworICAgICAgICAgICAgQVNTRVJUKCEocmVn
aW9uU2l6ZSAlIDIpKTsKKyAgICAgICAgICAgIEFTU0VSVCghKHJlYWRQdHIgJSAyKSk7CisgICAg
ICAgICAgICBBU1NFUlQoISh3cml0ZVB0ciAlIDIpKTsKKyAgICAgICAgICAgIHdoaWxlIChjb3B5
U291cmNlICE9IGNvcHlFbmQpCisgICAgICAgICAgICAgICAgKmNvcHlEc3QrKyA9ICpjb3B5U291
cmNlKys7CisgICAgICAgICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fzc2VtYmxlclN0b3JhZ2Us
IHJlYWRQdHIsIGp1bXBzVG9MaW5rW2ldLmZyb20oKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
YWRQdHIgKz0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIHdyaXRlUHRyICs9IHJlZ2lvblNpemU7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgYWRk
cmVzcyBvZiB0aGUganVtcCB0YXJnZXQsIGluIHRoZSBjYXNlIG9mIGJhY2t3YXJkcworICAgICAg
ICAgICAgLy8gYnJhbmNoZXMgd2UgbmVlZCB0byBiZSBwcmVjaXNlLCBmb3J3YXJkIGJyYW5jaGVz
IHdlIGFyZSBwZXNzaW1pc3RpYworICAgICAgICAgICAgY29uc3QgdWludDhfdCogdGFyZ2V0Owor
ICAgICAgICAgICAgaWYgKGp1bXBzVG9MaW5rW2ldLnRvKCkgPj0ganVtcHNUb0xpbmtbaV0uZnJv
bSgpKQorICAgICAgICAgICAgICAgIHRhcmdldCA9IGNvZGVPdXREYXRhICsganVtcHNUb0xpbmtb
aV0udG8oKSAtIG9mZnNldDsgLy8gQ29tcGVuc2F0ZSBmb3Igd2hhdCB3ZSBoYXZlIGNvbGxhcHNl
ZCBzbyBmYXIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBjb2Rl
T3V0RGF0YSArIGp1bXBzVG9MaW5rW2ldLnRvKCkgLSBleGVjdXRhYmxlT2Zmc2V0Rm9yKGp1bXBz
VG9MaW5rW2ldLnRvKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgSnVtcExpbmtU
eXBlIGp1bXBMaW5rVHlwZSA9IE1hY3JvQXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcHNU
b0xpbmtbaV0sIGNvZGVPdXREYXRhICsgd3JpdGVQdHIsIHRhcmdldCk7CisgICAgICAgICAgICAv
LyBDb21wYWN0IGJyYW5jaCBpZiB3ZSBjYW4uLi4KKyAgICAgICAgICAgIGlmIChNYWNyb0Fzc2Vt
Ymxlcjo6Y2FuQ29tcGFjdChqdW1wc1RvTGlua1tpXS50eXBlKCkpKSB7CisgICAgICAgICAgICAg
ICAgLy8gU3RlcCBiYWNrIGluIHRoZSB3cml0ZSBzdHJlYW0KKyAgICAgICAgICAgICAgICBpbnQz
Ml90IGRlbHRhID0gTWFjcm9Bc3NlbWJsZXI6Omp1bXBTaXplRGVsdGEoanVtcHNUb0xpbmtbaV0u
dHlwZSgpLCBqdW1wTGlua1R5cGUpOworICAgICAgICAgICAgICAgIGlmIChkZWx0YSkgeworICAg
ICAgICAgICAgICAgICAgICB3cml0ZVB0ciAtPSBkZWx0YTsKKyAgICAgICAgICAgICAgICAgICAg
cmVjb3JkTGlua09mZnNldHMobV9hc3NlbWJsZXJTdG9yYWdlLCBqdW1wc1RvTGlua1tpXS5mcm9t
KCkgLSBkZWx0YSwgcmVhZFB0ciwgcmVhZFB0ciAtIHdyaXRlUHRyKTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBqdW1wc1RvTGlua1tpXS5zZXRGcm9tKHdy
aXRlUHRyKTsKICAgICAgICAgfQotICAgICAgICBqdW1wc1RvTGlua1tpXS5zZXRGcm9tKHdyaXRl
UHRyKTsKICAgICB9CiAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IGp1bXAK
ICAgICBtZW1jcHkob3V0RGF0YSArIHdyaXRlUHRyLCBpbkRhdGEgKyByZWFkUHRyLCBtX2luaXRp
YWxTaXplIC0gcmVhZFB0cik7CkBAIC0xNjIsOSArMTY2LDE4IEBAIHZvaWQgTGlua0J1ZmZlcjo6
Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICB9CiAKICAgICBqdW1wc1RvTGluay5jbGVhcigp
OwotICAgIHNocmluayh3cml0ZVB0ciArIG1faW5pdGlhbFNpemUgLSByZWFkUHRyKTsKIAotICAg
IHBlcmZvcm1KSVRNZW1jcHkobV9jb2RlLCBvdXRCdWZmZXIuYnVmZmVyKCksIG1fc2l6ZSk7Cisg
ICAgc2l6ZV90IGNvbXBhY3RTaXplID0gd3JpdGVQdHIgKyBtX2luaXRpYWxTaXplIC0gcmVhZFB0
cjsKKyAgICBpZiAobV9leGVjdXRhYmxlTWVtb3J5KSB7CisgICAgICAgIG1fc2l6ZSA9IGNvbXBh
Y3RTaXplOworICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnktPnNocmluayhtX3NpemUpOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IGZvciBhcm12NyBoZXJlLgorICAg
ICAgICBzaXplX3Qgbm9wU2l6ZUluQnl0ZXMgPSBtX2luaXRpYWxTaXplIC0gY29tcGFjdFNpemU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKG91dERh
dGEgKyBjb21wYWN0U2l6ZSwgbm9wU2l6ZUluQnl0ZXMpOworICAgIH0KKworICAgIHBlcmZvcm1K
SVRNZW1jcHkobV9jb2RlLCBvdXREYXRhLCBtX3NpemUpOwogCiAjaWYgRFVNUF9MSU5LX1NUQVRJ
U1RJQ1MKICAgICBkdW1wTGlua1N0YXRpc3RpY3MobV9jb2RlLCBtX2luaXRpYWxTaXplLCBtX3Np
emUpOwpAQCAtMTk4LDcgKzIxMSw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9B
c3NlbWJsZXIKICAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVpbnQxNl90PihtYWNyb0Fzc2Vt
Ymxlciwgb3duZXJVSUQsIGVmZm9ydCk7CiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQp
OwotI2VuZGlmCisjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogICAgIG1f
bGlua1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CiB9CkBAIC0y
MjMsMTQgKzIzNiw2IEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoc2l6ZV90IGluaXRpYWwK
ICAgICBtX2RpZEFsbG9jYXRlID0gdHJ1ZTsKIH0KIAotdm9pZCBMaW5rQnVmZmVyOjpzaHJpbmso
c2l6ZV90IG5ld1NpemUpCi17Ci0gICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3NpemUgPSBuZXdTaXplOwotICAgIG1fZXhlY3V0YWJsZU1lbW9yeS0+
c2hyaW5rKG1fc2l6ZSk7Ci19Ci0KIHZvaWQgTGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlv
bigpCiB7CiAgICAgZm9yIChhdXRvJiB0YXNrIDogbV9saW5rVGFza3MpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjAyMDg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk1LDEwICs5NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIGxpbmtDb2RlKG1h
Y3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICB9CiAKLSAgICBMaW5rQnVmZmVy
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogY29kZSwgc2l6ZV90IHNpemUs
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQp
CisgICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQqIGNv
ZGUsIHNpemVfdCBzaXplLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkCisjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQorICAgICAgICAs
IGJvb2wgc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24gPSB0cnVlCisjZW5kaWYKKyAgICAg
ICAgKQogICAgICAgICA6IG1fc2l6ZShzaXplKQogI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElP
TikKICAgICAgICAgLCBtX2luaXRpYWxTaXplKDApCisgICAgICAgICwgbV9zaG91bGRQZXJmb3Jt
QnJhbmNoQ29tcGFjdGlvbihzaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbikKICNlbmRpZgog
ICAgICAgICAsIG1fZGlkQWxsb2NhdGUoZmFsc2UpCiAgICAgICAgICwgbV9jb2RlKGNvZGUpCkBA
IC0yODYsNyArMjkxLDYgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCBhbGxvY2F0
ZShzaXplX3QgaW5pdGlhbFNpemUsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCk7Ci0gICAgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemUpOwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVyVUlELCBKSVRD
b21waWxhdGlvbkVmZm9ydCk7CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQpAQCAtMzA5
LDYgKzMxMyw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQogICAg
IHNpemVfdCBtX2luaXRpYWxTaXplOwogICAgIEFzc2VtYmxlckRhdGEgbV9hc3NlbWJsZXJTdG9y
YWdlOworICAgIGJvb2wgbV9zaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbiB7IHRydWUgfTsK
ICNlbmRpZgogICAgIGJvb2wgbV9kaWRBbGxvY2F0ZTsKICAgICB2b2lkKiBtX2NvZGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAkocmV2aXNpb24gMjAyMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwODcsNiAr
MzA4NywxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKHJlc3VsdCk7
CiAgICAgfQogCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2gzMihSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIGltbSkKKyAgICB7Cisg
ICAgICAgIG1fbWFrZUp1bXBQYXRjaGFibGUgPSB0cnVlOworICAgICAgICBKdW1wIHJlc3VsdCA9
IGJyYW5jaDMyKGNvbmQsIGxlZnQsIGltbSk7CisgICAgICAgIG1fbWFrZUp1bXBQYXRjaGFibGUg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAocmVzdWx0KTsKKyAgICB9CisK
ICAgICBQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW02NCBpbW0pCiAgICAgewogICAgICAgICBt
X21ha2VKdW1wUGF0Y2hhYmxlID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5
LDYgKzQzOSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAg
ICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgb3V0LnByaW50ZigidW5z
ZXQiKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlM
ZW5ndGg6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJBcnJheUxlbmd0aCIpOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVBY2Nlc3Mu
aCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNs
dWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1
ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0
YXRpYyB2b2lkIGR1bXBDYWNoZVNpemVzQW5kQ3Jhc2goVk0mIHZtKQoreworICAgIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7
CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHZhbHVlOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAg
ICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhp
bmdTaGFwZU1hc2spLCB2YWx1ZSk7CisgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGlndW91c1NoYXBlKSk7CisgICAgICAgIC8vaml0LmJy
YW5jaFRlc3QzMigKKyAgICAgICAgLy8gICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpOworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyh2YWx1ZSwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHZhbHVlKTsKKyAg
ICAgICAgLy9qaXQucGF0Y2hhYmxlQnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2Ny
YXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICBqaXQuYm94
SW50MzIoc2NyYXRjaEdQUiwgSlNWYWx1ZVJlZ3ModmFsdWUpKTsKKworICAgICAgICBkYXRhTG9n
KCJhcnJheSBsZW5ndGggc2l6ZTogIiwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXpl
KCksICJcbiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0p
OworCisgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDB4MDAwYWIyMWNhKSk7CisgICAgICAgIGppdC5sb2FkUHRyKAor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksCisgICAgICAgICAgICB2YWx1ZSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSID0gdmFsdWU7CisgICAgICAgIGppdC5sb2FkNjQoCisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgMHgwMDBhYjIxY2EpLCB2YWx1ZSk7CisKKyAgICAgICAg
ZGF0YUxvZygib3V0IG9mIGxpbmUgb2Zmc2V0IGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxl
ci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEND
YWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOworICAg
ICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgMHgwMDBhYjIxY2EpLCB2YWx1ZSk7CisKKyAgICAgICAgZGF0YUxvZygiaW5saW5lIG9mZnNl
dCBjYWNoZSBzaXplOiAiLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgIlxu
Iik7CisgICAgfQorCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAg
ICAgICAgaml0LnBhdGNoYWJsZUJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMHgwMDBhYjIxY2EpKTsKKworICAgICAgICBqaXQuc3RvcmU2NCgKKyAgICAg
ICAgICAgIHZhbHVlLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCAweDAwMGFiMjFjYSkp
OworCisgICAgICAgIGRhdGFMb2coInJlcGxhY2UgY2FjaGUgc2l6ZTogIiwgaml0Lm1fYXNzZW1i
bGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksICJcbiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzIGppdCgmdm0pOworCisgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MDAwYWIyMWNhKSk7CisK
KyAgICAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBqaXQuc3RvcmU2NCgKKyAg
ICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgMTIwMzQyKSk7CisKKyAgICAgICAgZGF0YUxvZygicmVwbGFjZSBvdXQgb2YgbGluZSBjYWNo
ZSBzaXplOiAiLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgIlxuIik7Cisg
ICAgfQorCisgICAgQ1JBU0goKTsKK30KKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+
CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGxpbmtJbmxpbmVPckdvVG9TbG93UGF0aChjb25z
dCBjaGFyKiBuYW1lLCBDQ2FsbEhlbHBlcnMmIGppdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgY29uc3QgYm9vbCBzaG91bGRE
dW1wQ2FjaGVTaXplc0FuZENyYXNoID0gZmFsc2U7CisgICAgaWYgKHNob3VsZER1bXBDYWNoZVNp
emVzQW5kQ3Jhc2gpCisgICAgICAgIGR1bXBDYWNoZVNpemVzQW5kQ3Jhc2goKmppdC52bSgpKTsK
KworICAgIGlmIChqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSA8PSBzdHViSW5m
by5wYXRjaC5pbmxpbmVTaXplKSB7CisgICAgICAgIHdoaWxlIChqaXQubV9hc3NlbWJsZXIuYnVm
ZmVyKCkuY29kZVNpemUoKSA8IHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUpCisgICAgICAgICAg
ICBqaXQubm9wKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1
ZmZlcigpLmNvZGVTaXplKCkgPT0gc3R1YkluZm8ucGF0Y2guaW5saW5lU2l6ZSk7CisgICAgICAg
IGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7CisgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnBhdGNoLnN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCks
IHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5l
ZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAgICAgIGZ1bmN0aW9uKGxpbmtCdWZmZXIpOworICAg
ICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSW5saW5lQWNjZXNzVHlwZTogJyVzJyIs
IG5hbWUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgZmFpbElm
Q2FudElubGluZSA9IGZhbHNlOworICAgIGlmIChmYWlsSWZDYW50SW5saW5lKSB7CisgICAgICAg
IGRhdGFMb2coIkZhaWx1cmUgZm9yOiAiLCBuYW1lLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygi
cmVhbCBzaXplOiAiLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgIiBpbmxp
bmUgc2l6ZToiLCBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplLCAiXG4iKTsKKyAgICAgICAgQ1JB
U0goKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnMgcmVwbGFjZW1lbnRKSVQoaml0LnZtKCkp
OworICAgIGF1dG8ganVtcFRvU2xvd1BhdGggPSByZXBsYWNlbWVudEpJVC5qdW1wKCk7CisgICAg
Ly8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBqdW1wIGlu
dG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KKyAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudEpJ
VC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDwgc3R1YkluZm8ucGF0Y2guaW5saW5l
U2l6ZSk7CisgICAgYm9vbCBuZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIocmVwbGFjZW1lbnRKSVQsIHN0dWJJbmZvLnBhdGNoLnN0YXJ0LmV4
ZWN1dGFibGVBZGRyZXNzKCksIHJlcGxhY2VtZW50SklULm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNv
ZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlv
bik7CisgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb1Nsb3dQYXRoLCBzdHViSW5mby5zbG93UGF0
aFN0YXJ0TG9jYXRpb24oKSk7CisKKyAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSW5s
aW5lQWNjZXNzIGxpbmtpbmcgYSBqdW1wIHRvIHNsb3cgcGF0aCBiZWNhdXNlIHdlIHJhbiBvdXQg
b2Ygcm9vbSBpbmxpbmUiKSk7Cit9CisKK3ZvaWQgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVByb3Bl
cnR5QWNjZXNzKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIENDYWxsSGVscGVycyBq
aXQoJnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVl
UmVncygpOworCisgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LnBhdGNoYWJsZUJyYW5j
aDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7CisgICAg
R1BSUmVnIHN0b3JhZ2U7CisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAg
IHN0b3JhZ2UgPSBiYXNlOworICAgIGVsc2UgeworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3RvcmFnZSA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAg
ICB9CisKKyAgICBqaXQubG9hZFZhbHVlKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgdmFsdWUpOworCisgICAg
bGlua0lubGluZU9yR29Ub1Nsb3dQYXRoKCJwcm9wZXJ0eSBhY2Nlc3MiLCBqaXQsIHN0dWJJbmZv
LCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5r
KGJyYW5jaFRvU2xvd1BhdGgsIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKKyAg
ICB9KTsKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgR1BSUmVnIGdldFNjcmF0Y2hSZWdpc3Rl
cihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICBhbGxv
Y2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpKTsK
KyAgICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZh
bHVlR1BSKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VUYWdHUFIpKTsKKyAgICBhbGxvY2F0
b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSk7
CisjZW5kaWYKKyAgICBHUFJSZWcgc2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCisgICAgICAgIHJl
dHVybiBJbnZhbGlkR1BSUmVnOworICAgIHJldHVybiBzY3JhdGNoOworfQorCitBTFdBWVNfSU5M
SU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlcihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCit7CisgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxp
ZEdQUlJlZzsKK30KKworYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKK3sKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKK30KKwordm9pZCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShWTSYgdm0sIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK3sKKyAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0
dWJJbmZvLCBvZmZzZXQpKTsKKworICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgIEdQ
UlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsK
KyAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOworCisgICAgYXV0
byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7CisKKyAgICBHUFJSZWcgc3RvcmFnZTsK
KyAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgc3RvcmFnZSA9IGJhc2U7
CisgICAgZWxzZSB7CisgICAgICAgIHN0b3JhZ2UgPSBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1Yklu
Zm8pOworICAgICAgICBBU1NFUlQoc3RvcmFnZSAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHN0b3JhZ2UpOworICAgIH0KKworICAgIGppdC5zdG9yZVZhbHVlKAorICAg
ICAgICB2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZSwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uob2Zmc2V0KSkpOworCisgICAgbGlua0lubGluZU9yR29Ub1Nsb3dQYXRoKCJwcm9w
ZXJ0eSByZXBsYWNlIiwgaml0LCBzdHViSW5mbywgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhicmFuY2hUb1Nsb3dQYXRoLCBzdHViSW5mby5z
bG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CisgICAgfSk7Cit9CisKK2Jvb2wgSW5saW5lQWNjZXNz
Ojppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNB
cnJheSogYXJyYXkpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXktPmluZGV4aW5nVHlwZSgp
ICYgSXNBcnJheSk7CisKKyAgICBpZiAoIWhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhcnJheS0+aW5kZXhpbmdUeXBlKCkgPT0g
QXJyYXlXaXRoSW50MzIKKyAgICAgICAgfHwgYXJyYXktPmluZGV4aW5nVHlwZSgpID09IEFycmF5
V2l0aERvdWJsZQorICAgICAgICB8fCBhcnJheS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRo
Q29udGlndW91czsKK30KKwordm9pZCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgo
Vk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGFycmF5
KSk7CisKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICBHUFJSZWcgYmFzZSA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CisgICAgSlNWYWx1ZVJl
Z3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IGdl
dFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbyk7CisKKyAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsK
KyAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4
aW5nU2hhcGVNYXNrKSwgc2NyYXRjaCk7CisgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRoID0gaml0
LnBhdGNoYWJsZUJyYW5jaDMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3Jh
dGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhcnJheS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgdmFsdWUucGF5bG9hZEdQUigpKTsKKyAgICBqaXQubG9hZDMyKEND
YWxsSGVscGVyczo6QWRkcmVzcyh2YWx1ZS5wYXlsb2FkR1BSKCksIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkpOworICAgIGppdC5ib3hJbnQzMih2YWx1
ZS5wYXlsb2FkR1BSKCksIHZhbHVlKTsKKworICAgIGxpbmtJbmxpbmVPckdvVG9TbG93UGF0aCgi
YXJyYXkgbGVuZ3RoIiwgaml0LCBzdHViSW5mbywgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhicmFuY2hUb1Nsb3dQYXRoLCBzdHViSW5mby5z
bG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbCB0YXJnZXQpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwor
CisgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKKworICAgIC8vIFdlIGRvbid0IG5lZWQgYSBu
b3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1p
ZGRsZSBvZiBhbiBJQy4KKyAgICBSRUxFQVNFX0FTU0VSVChqaXQubV9hc3NlbWJsZXIuYnVmZmVy
KCkuY29kZVNpemUoKSA8IHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUpOworICAgIGJvb2wgbmVl
ZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgc3R1YkluZm8ucGF0Y2guc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgaml0Lm1fYXNzZW1i
bGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRz
QnJhbmNoQ29tcGFjdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIHRhcmdldCk7CisK
KyAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSW5saW5lQWNjZXNzOiBsaW5raW5nIGNv
bnN0YW50IGp1bXAiKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nl
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5l
QWNjZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIElubGluZUFjY2Vz
c19oCisjZGVmaW5lIElubGluZUFjY2Vzc19oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVk
ZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXk7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1
Y3R1cmVTdHViSW5mbzsKK2NsYXNzIFZNOworCitjbGFzcyBJbmxpbmVBY2Nlc3MgeworcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpCisg
ICAgeworI2lmIENQVShYODZfNjQpCisgICAgICAgIHJldHVybiAyMzsKKyNlbGlmIENQVShBUk02
NCkKKyAgICAgICAgcmV0dXJuIDQwOworI2Vsc2UKKyNlcnJvciAicGxhdGZvcm0iCisjZW5kaWYK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzaXplRm9yTGVuZ3RoQWNjZXNz
KCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDI2OworI2VsaWYgQ1BV
KEFSTTY0KQorICAgICAgICByZXR1cm4gMzI7CisjZWxzZQorI2Vycm9yICJwbGF0Zm9ybSIKKyNl
bmRpZgorICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemVGb3JQcm9wZXJ0
eVJlcGxhY2UoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4gMjM7Cisj
ZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIHJldHVybiA0MDsKKyNlbHNlCisjZXJyb3IgInBsYXRm
b3JtIgorI2VuZGlmCisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm9wZXJ0eUFj
Y2VzcyhWTSYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQp
OworICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoVk0mLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlQXJy
YXlMZW5ndGgoVk0mLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMg
dm9pZCByZXdpcmVTdHViQXNKdW1wKFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRp
b25MYWJlbCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShK
SVQpCisKKyNlbmRpZiAvLyBJbmxpbmVBY2Nlc3NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
MDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUxLDExICsxNTUxLDcgQEAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgIHN0YXRlLmlkZW50ID0gJmlkZW50Owog
ICAgIAogICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLmJhc2VHUFIpOwotICAgIHN0YXRlLnZhbHVlUmVncyA9IEpTVmFsdWVSZWdzKAotI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2gudmFsdWVUYWdHUFIpLAotI2VuZGlmCi0gICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKyAgICBzdGF0ZS52YWx1ZVJlZ3MgPSBzdHViSW5mby52
YWx1ZVJlZ3MoKTsKIAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1
YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CiAgICAgc3RhdGUuYWxsb2NhdG9yID0gJmFsbG9j
YXRvcjsKQEAgLTE3NTMsMTQgKzE3NDksMTEgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5
bW9ycGhpY0FjY2VzcwogICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6R2F2
ZVVwOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9Ci0gICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvRG9uZSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVs
ID0gc3R1YkluZm8uZG9uZUxvY2F0aW9uKCk7CiAgICAgICAgIAogICAgIGxpbmtCdWZmZXIubGlu
ayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwogCi0gICAgbGlua0J1ZmZlci5saW5rKAot
ICAgICAgICBmYWlsdXJlLAotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgbGlu
a0J1ZmZlci5saW5rKGZhaWx1cmUsIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsK
ICAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiICIs
IHN0dWJJbmZvLmNvZGVPcmlnaW4sICI6IEdlbmVyYXRpbmcgcG9seW1vcnBoaWMgYWNjZXNzIHN0
dWIgZm9yICIsIGxpc3REdW1wKGNhc2VzKSwgIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9u
IDIwMjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDExIEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OmluaXRHZXRCeUlkU2VsZigKICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNl
dDsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKCkKK3sKKyAg
ICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOworfQorCiB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAg
IGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U7CkBAIC04Nyw2ICs5Miw3IEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKICAgICBjYXNlIENhY2hlVHlwZTo6VW5z
ZXQ6CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAgIGNhc2UgQ2FjaGVUeXBl
OjpQdXRCeUlkUmVwbGFjZToKKyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMiw2ICsxMDgsNyBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjphYm91dFRvRGllKCkKICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgY2Fz
ZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVw
bGFjZToKKyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTI1Nyw2ICsyNjQsNyBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9w
YWdhdGVUcmFuc2l0CiB7CiAgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKICAgICBjYXNlIENhY2hl
VHlwZTo6VW5zZXQ6CisgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAgICAgY2FzZSBD
YWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgpAQCAtMjc1LDYgKzI4Myw3IEBAIGJvb2wgU3RydWN0
dXJlU3R1YkluZm86OmNvbnRhaW5zUEModm9pZCoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiB1LnN0dWItPmNvbnRhaW5zUEMocGMpOwogfQotI2VuZGlmCisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyMDIw
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6
IGludDhfdCB7CiAgICAgVW5zZXQsCiAgICAgR2V0QnlJZFNlbGYsCiAgICAgUHV0QnlJZFJlcGxh
Y2UsCi0gICAgU3R1YgorICAgIFN0dWIsCisgICAgQXJyYXlMZW5ndGgKIH07CiAKIGNsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvIHsKQEAgLTY4LDYgKzY5LDcgQEAgcHVibGljOgogICAgIH5TdHJ1Y3R1
cmVTdHViSW5mbygpOwogCiAgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgdm9pZCBp
bml0QXJyYXlMZW5ndGgoKTsKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2
b2lkIGluaXRTdHViKENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vz
cz4pOwogCkBAIC0xNDMsMTMgKzE0NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAg
ICBib29sIGNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0OwogCiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleDsKIAotICAgIGJvb2wgY29u
dGFpbnNQQyh2b2lkKiBwYykgY29uc3Q7Ci0KICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVj
dHVyZTsKQEAgLTE2NSwyNSArMTY1LDM5IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTZXQgYnVm
ZmVyZWRTdHJ1Y3R1cmVzOwogICAgIAogICAgIHN0cnVjdCB7CisgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJ
QyBmb3IgKmJ5SWQgY2FjaGVzLCBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9y
ICdpbicgY2FjaGVzLgorICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOworICAgICAg
ICB1aW50MzJfdCBpbmxpbmVTaXplOyAvLyBPbmx5IHVzZWQgZm9yIGJ5SWQgY2FjaGVzLgorICAg
ICAgICBpbnQzMl90IGRlbHRhRnJvbVN0YXJ0VG9DYWxsTG9jYXRpb247CisgICAgICAgIGludDMy
X3QgZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQ7CisKICAgICAgICAgaW50OF90IGJhc2VH
UFI7CisgICAgICAgIGludDhfdCB2YWx1ZUdQUjsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
ICAgICBpbnQ4X3QgdmFsdWVUYWdHUFI7CiAgICAgICAgIGludDhfdCBiYXNlVGFnR1BSOwogI2Vu
ZGlmCi0gICAgICAgIGludDhfdCB2YWx1ZUdQUjsKLSAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVyczsKLSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0RvbmU7Ci0gICAgICAgIGludDMy
X3QgZGVsdGFDYWxsVG9KdW1wOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvU2xvd0Nhc2U7
Ci0gICAgICAgIGludDMyX3QgZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0jZWxzZQotICAgICAg
ICBpbnQzMl90IGRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmU7Ci0gICAgICAgIGludDMyX3QgZGVs
dGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmU7Ci0jZW5kaWYKICAgICB9IHBhdGNoOwogCisgICAg
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24oKSB7IHJldHVybiBwYXRjaC5zdGFy
dC5jYWxsQXRPZmZzZXQocGF0Y2guZGVsdGFGcm9tU3RhcnRUb0NhbGxMb2NhdGlvbik7IH0KKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBkb25lTG9jYXRpb24oKSB7IHJldHVybiBwYXRjaC5zdGFydC5s
YWJlbEF0T2Zmc2V0KHBhdGNoLmlubGluZVNpemUpOyB9CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
c2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQubGFiZWxBdE9mZnNl
dChwYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCk7IH0KKyAgICBDb2RlTG9jYXRp
b25KdW1wIHBhdGNoYWJsZUp1bXBGb3JJbigpCisgICAgeyAKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpJbik7CisgICAgICAgIHJldHVybiBwYXRjaC5z
dGFydC5qdW1wQXRPZmZzZXQoMCk7CisgICAgfQorCisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncygKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihwYXRjaC52YWx1ZVRh
Z0dQUiksCisjZW5kaWYKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4ocGF0Y2gudmFs
dWVHUFIpKTsKKyAgICB9CisKKwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKICAgICBDYWNo
ZVR5cGUgY2FjaGVUeXBlOwogICAgIHVpbnQ4X3QgY291bnRkb3duOyAvLyBXZSByZXBhdGNoIG9u
bHkgd2hlbiB0aGlzIGlzIHplcm8uIElmIG5vdCB6ZXJvLCB3ZSBkZWNyZW1lbnQuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24g
MjAyMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1OCwxMSArMjU4LDIwIEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lu
cy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9ICptX2lu
c1tpXS5tX3N0dWJJbmZvOwotICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9y
LT5jYWxsKCkpOwotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9IGRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2luc1tpXS5tX2RvbmUpKTsKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXAg
PSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9pbnNbaV0ubV9qdW1wKSk7Ci0gICAgICAgIGluZm8uY2FsbFJldHVybkxv
Y2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9u
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFi
ZWwoKSkpOworCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1faW5zW2ldLm1fanVtcCk7CisgICAgICAgIGluZm8ucGF0Y2guc3RhcnQgPSBz
dGFydDsKKworICAgICAgICBwdHJkaWZmX3QgaW5saW5lU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1faW5zW2ldLm1fZG9uZSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmxp
bmVTaXplID49IDApOworICAgICAgICBpbmZvLnBhdGNoLmlubGluZVNpemUgPSBpbmxpbmVTaXpl
OworCisgICAgICAgIGluZm8ucGF0Y2guZGVsdGFGcm9tU3RhcnRUb0NhbGxMb2NhdGlvbiA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAgICBzdGFy
dCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNh
bGwoKSkpOworCisgICAgICAgIGluZm8ucGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3Rh
cnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICAg
ICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJh
dG9yLT5sYWJlbCgpKSk7CiAgICAgfQogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDIw
MjA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDggKzE4Niw3IEBAIHZvaWQgcmVpZnlJbmxp
bmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUlu
ZGV4KSk7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8pOwogCi0gICAg
ICAgICAgICAgICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0
ID0gc3R1YkluZm8tPmRvbmVMb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
MjAyMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNhY2hlZEdldEJ5SWQoCiAgICAgCiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9
IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJ
Zk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdp
biwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJl
cikKICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIp
LAogICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCB0
eXBlKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjAyMDg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4
LDggKzE2OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAg
ICAgICAgdXNlZFJlZ2lzdGVycy5zZXQocmVzdWx0R1BSLCBmYWxzZSk7CiAgICAgfQogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCB0eXBlKTsKKyAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCksIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBpZGVudGlmaWVyVUlE
KGlkZW50aWZpZXJOdW1iZXIpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgdHlwZSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQp
OwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAy
MDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMzUsMjEgKzYxMzUsMTkgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNh
bGxSZXR1cm5Mb2NhdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aENhbGwpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
Zihkb25lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8tPnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFJldHVy
bkxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVy
bkxvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxs
UmV0dXJuTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhCZWdpbikpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9B
c3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25l
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaW5saW5lU2l6ZSA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby0+cGF0Y2guaW5saW5lU2l6ZSA9IGlubGluZVNpemU7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFGcm9t
U3RhcnRUb0NhbGxMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhDYWxsKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRU
b1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoQmVnaW4pKTsKKwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNzU2OCw3ICs3NTY2LDcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVEdldEJ5SWRHZW5lcmF0b3I+
OjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgbm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjYWxsU2l0ZUluZGV4LAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMu
dW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHVpZCwgSlNW
YWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MocGFyYW1zWzBdLmdwcigpKSwgdHlwZSk7CiAKICAgICAgICAgICAgICAgICBnZW5lcmF0b3It
PmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVERpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYy
LDYgKzE2MiwxMSBAQCB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KFByCiB7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZnJvbUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGZyb20pOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIHRvTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YodG8pOworICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGZyb21Mb2NhdGlvbiwg
dG9Mb2NhdGlvbik7Cit9CisKK3ZvaWQgSklURGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHko
UHJpbnRTdHJlYW0mIG91dCwgQ29kZUxvY2F0aW9uTGFiZWwgZnJvbUxvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbCB0b0xvY2F0aW9uKQorewogICAgIGRpc2Fzc2VtYmxlKGZyb21Mb2NhdGlvbiwg
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odG9Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSAt
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGZyb21Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KSwgIiAgICAgICAgIiwgb3V0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVREaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVERpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMDIwODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2
Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBMaW5rQnVmZmVyJik7
CiAgICAgdm9pZCByZXBvcnRUb1Byb2ZpbGVyKFByb2ZpbGVyOjpDb21waWxhdGlvbiosIExpbmtC
dWZmZXImKTsKIAorICAgIHZvaWQgZHVtcERpc2Fzc2VtYmx5KFByaW50U3RyZWFtJiwgQ29kZUxv
Y2F0aW9uTGFiZWwgZnJvbSwgQ29kZUxvY2F0aW9uTGFiZWwgdG8pOworCiBwcml2YXRlOgogICAg
IHZvaWQgZHVtcEhlYWRlcihQcmludFN0cmVhbSYsIExpbmtCdWZmZXImKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgZmlyc3RTbG93TGFiZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyMDIwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOSBAQAogI2lmIEVOQUJMRShK
SVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisj
aW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTY5LDI1ICs3MCwxOSBAQCBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlk
R2VuZXJhdG9yKAogCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXIm
IGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsKLSAgICBDb2RlTG9jYXRpb25DYWxs
IGNhbGxSZXR1cm5Mb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2YobV9jYWxsKTsKLSAgICBt
X3N0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAg
bV9zdHViSW5mby0+cGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9z
dHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9jYXRpb24pOwotICAgIG1fc3R1YkluZm8tPnBhdGNo
LmRlbHRhQ2FsbFRvSnVtcCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0
cnVjdHVyZUNoZWNrKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX3N0dWJJbmZvLT5wYXRj
aC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlv
bk9mKG1fbG9hZE9yU3RvcmUpKTsKLSNlbHNlCi0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFD
YWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZiht
X3RhZ0xvYWRPclN0b3JlKSk7Ci0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9QYXls
b2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9sb2Fk
T3JTdG9yZSkpOwotI2VuZGlmCi0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TbG93
Q2FzZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAg
IGNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4p
KTsKLSAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxl
cjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24s
IGZhc3RQYXRoLmxvY2F0aW9uT2YobV9kb25lKSk7CisgICAgQVNTRVJUKG1fc3RhcnQuaXNTZXQo
KSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBmYXN0UGF0aC5sb2NhdGlvbk9mKG1f
c3RhcnQpOworICAgIG1fc3R1YkluZm8tPnBhdGNoLnN0YXJ0ID0gc3RhcnQ7CisKKyAgICBpbnQz
Ml90IGlubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KAorICAgICAgICBzdGFydCwgZmFzdFBhdGgubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChpbmxpbmVTaXplID4gMCk7CisgICAgbV9zdHViSW5mby0+cGF0Y2guaW5saW5l
U2l6ZSA9IGlubGluZVNpemU7CisKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUZyb21TdGFy
dFRvQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKKyAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0aENhbGwpKTsK
KyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIHN0YXJ0LCBz
bG93UGF0aC5sb2NhdGlvbk9mKG1fc2xvd1BhdGhCZWdpbikpOwogfQogCiB2b2lkIEpJVEJ5SWRH
ZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkBAIC05NSwzOCArOTAs
MjkgQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZgogICAgIGZpbmFs
aXplKGxpbmtCdWZmZXIsIGxpbmtCdWZmZXIpOwogfQogCi12b2lkIEpJVEJ5SWRHZW5lcmF0b3I6
OmdlbmVyYXRlRmFzdFBhdGhDaGVja3MoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3ZvaWQgSklUQnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0Q29tbW9uKE1hY3JvQXNzZW1ibGVyJiBqaXQsIHNpemVf
dCBpbmxpbmVJQ1NpemUpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVDaGVjayA9IGppdC5wYXRjaGFibGVC
cmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICBtX3N0cnVjdHVyZUltbSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigwKSk7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAg
IHNpemVfdCBzdGFydFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKTsK
KyAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5qdW1wKCk7CisgICAgd2hpbGUgKGppdC5tX2Fzc2Vt
Ymxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIC0gc3RhcnRTaXplIDwgaW5saW5lSUNTaXplKQorICAg
ICAgICBqaXQubm9wKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZl
cigpLmNvZGVTaXplKCkgLSBzdGFydFNpemUgPT0gaW5saW5lSUNTaXplKTsKKyAgICBtX2RvbmUg
PSBqaXQubGFiZWwoKTsKIH0KIAogSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVy
YXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywK
LSAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlKQotICAgIDogSklUQnlJZEdlbmVyYXRvcigKLSAgICAgICAgY29kZUJsb2NrLCBjb2Rl
T3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUp
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKKyAgICA6IEpJVEJ5SWRH
ZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNl
ZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUpCisgICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5
TmFtZSA9PSBjb2RlQmxvY2stPnZtKCktPnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkp
OwogfQogCiB2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImIGppdCkKIHsKLSAgICBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKGppdCk7Ci0gICAg
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2xvYWRPclN0b3JlID0gaml0LmxvYWQ2NFdpdGhD
b21wYWN0QWRkcmVzc09mZnNldFBhdGNoKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSwgbV92YWx1ZS5wYXlsb2FkR1BSKCkpLmxhYmVsKCk7
Ci0jZWxzZQotICAgIG1fdGFnTG9hZE9yU3RvcmUgPSBqaXQubG9hZDMyV2l0aENvbXBhY3RBZGRy
ZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5w
YXlsb2FkR1BSKCksIDApLCBtX3ZhbHVlLnRhZ0dQUigpKS5sYWJlbCgpOwotICAgIG1fbG9hZE9y
U3RvcmUgPSBqaXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5wYXlsb2FkR1BSKCksIDApLCBtX3ZhbHVl
LnBheWxvYWRHUFIoKSkubGFiZWwoKTsKLSNlbmRpZgotICAgIAotICAgIG1fZG9uZSA9IGppdC5s
YWJlbCgpOworICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJ
bmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZv
clByb3BlcnR5QWNjZXNzKCkpOwogfQogCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlk
R2VuZXJhdG9yKApAQCAtMTQzLDE5ICsxMjksNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQ
dXRCeUlkR2VuZXJhdG9yCiAKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewotICAgIGdlbmVyYXRlRmFzdFBhdGhDaGVja3Mo
aml0KTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1fbG9hZE9yU3RvcmUgPSBqaXQu
c3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIG1fdmFsdWUucGF5bG9hZEdQ
UigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSkubGFi
ZWwoKTsKLSNlbHNlCi0gICAgbV90YWdMb2FkT3JTdG9yZSA9IGppdC5zdG9yZTMyV2l0aEFkZHJl
c3NPZmZzZXRQYXRjaCgKLSAgICAgICAgbV92YWx1ZS50YWdHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgMCkpLmxhYmVsKCk7Ci0gICAgbV9sb2FkT3JT
dG9yZSA9IGppdC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgbV92YWx1
ZS5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5wYXlsb2FkR1BS
KCksIDApKS5sYWJlbCgpOwotI2VuZGlmCi0gICAgCi0gICAgbV9kb25lID0gaml0LmxhYmVsKCk7
CisgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVy
dHlSZXBsYWNlKCkpOwogfQogCiBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIEpJVFB1dEJ5SWRHZW5l
cmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjAyMDg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OCwxNyArNjgsMTcgQEAgcHVibGljOgogICAgIHZvaWQgcmVwb3J0
U2xvd1BhdGhDYWxsKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2luLCBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsKQogICAgIHsKICAgICAgICAgbV9zbG93UGF0aEJlZ2luID0gc2xv
d1BhdGhCZWdpbjsKLSAgICAgICAgbV9jYWxsID0gY2FsbDsKKyAgICAgICAgbV9zbG93UGF0aENh
bGwgPSBjYWxsOwogICAgIH0KICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1Bh
dGhCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvd1BhdGhCZWdpbjsgfQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlQ2hl
Y2subV9qdW1wOyB9CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29u
c3QgeyByZXR1cm4gbV9zbG93UGF0aEp1bXAuaXNTZXQoKSA/IG1fc2xvd1BhdGhKdW1wIDogbV9z
dHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0KIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYg
ZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogICAg
IHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYpOwogICAgIAogcHJvdGVjdGVkOgotICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJh
dGVGYXN0Q29tbW9uKE1hY3JvQXNzZW1ibGVyJiwgc2l6ZV90IHNpemUpOwogICAgIAogICAgIEpT
VmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwpAQCAtODksOSArODks
MTEgQEAgcHJvdGVjdGVkOgogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgQXNzZW1ibGVyTGFi
ZWwgbV90YWdMb2FkT3JTdG9yZTsKICNlbmRpZgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBt
X2NhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCiBjbGFzcyBKSVRHZXRCeUlk
R2VuZXJhdG9yIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewpAQCAtOTksMTAgKzEwMSwxMyBA
QCBwdWJsaWM6CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRl
eCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsCi0g
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgQ29kZUJsb2Nr
KiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUsCisgICAgICAgIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBBY2Nlc3NUeXBlKTsKICAgICAKICAgICB2b2lk
IGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKworcHJpdmF0ZToKKyAgICBib29s
IG1faXNMZW5ndGhBY2Nlc3M7CiB9OwogCiBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIDogcHVi
bGljIEpJVEJ5SWRHZW5lcmF0b3IgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjIsNyArMjIyLDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdp
dAogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZz
ZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwor
ICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAKICAgICBmYXN0RG9uZUNhc2UgPSBqdW1wKCk7CkBAIC01NzIsNiArNTcyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdAogewogICAgIGludCByZXN1
bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgYmFzZVZS
ZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CiAKQEAgLTU3OSw3ICs1ODAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKEluc3RydWN0CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5
cGU6OkdldFB1cmUpOworICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0UHVyZSk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKQEAgLTYyMCw3ICs2MjEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNl
dCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CisgICAgICAgIGlkZW50LT5pbXBsKCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIwMjA4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJQ1N0YXRzLmgiCisjaW5jbHVkZSAiSW5saW5lQWNjZXNz
LmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKQEAgLTkwLDk1ICs5MSw2IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxs
KENvZGVCbG9jayogY29kZUIKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwg
bmV3Q2FsbGVlRnVuY3Rpb24pOwogfQogCi1zdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nl
c3MoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25z
dCBGdW5jdGlvblB0ciYgc2xvd1BhdGhGdW5jdGlvbiwKLSAgICBib29sIGNvbXBhY3QpCi17Ci0g
ICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQotICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9uKTsKLQotICAgIC8vIFBh
dGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUgb2Zmc2V0IG9mIHRoZSBsb2FkLgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoCi0gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVs
dGFDaGVja0ltbVRvQ2FsbCksCi0gICAgICAgIGJpdHdpc2VfY2FzdDxpbnQzMl90PihzdHJ1Y3R1
cmUtPmlkKCkpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChjb21wYWN0KQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xv
YWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSk7Ci0gICAgZWxzZQotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKLSNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgaWYgKGNvbXBhY3QpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJl
bGF0aXZlVG9CYXNlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBh
Y3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0
aXZlVG9CYXNlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQz
MihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9C
YXNlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgcmVzZXRHZXRC
eUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBDb2Rl
TG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVs
dGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFj
ZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNo
T25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
dW51c2VkUG9pbnRlcikpOwotICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMy
KHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3Rv
cmUpLCAwKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2
b2lkIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6
Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0
aFBhdGNoKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUiksCi0gICAgICAgICAg
ICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSAgICB9Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2Vk
UG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9y
ZSksIDApOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgdGFyZ2V0KQotewotICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldCk7Ci0gICAg
Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMy
V2l0aFBhdGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCgK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRo
UGF0Y2hPbkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIC0oaW50cHRyX3Qp
c3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCkpLAotICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwodGFyZ2V0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZXNl
dEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcCgKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBB
dE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0g
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwotfQotCiBlbnVtIElubGluZUNhY2hl
QWN0aW9uIHsKICAgICBHaXZlVXBPbkNhY2hlLAogICAgIFJldHJ5Q2FjaGVMYXRlciwKQEAgLTI0
MSw5ICsxNTMsMjMgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwogCiAgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKLSAgICAgICAgaWYgKGlzSlNB
cnJheShiYXNlVmFsdWUpKQotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExl
bmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkKKyAgICAgICAgaWYgKGlzSlNBcnJheShiYXNl
VmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlw
ZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVl
CisgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCisgICAgICAgICAgICAg
ICAgJiYgIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICYmIGFjdGlvbkZvckNlbGwodm0sIGJhc2VW
YWx1ZS5hc0NlbGwoKSkgPT0gQXR0ZW1wdFRvQ2FjaGUKKyAgICAgICAgICAgICAgICAmJiBJbmxp
bmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5
Kj4oYmFzZVZhbHVlKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc2V0IGEgd2F0Y2hwb2ludCBvciBzb21l
dGhpbmc/CisgICAgICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9u
KGtpbmQpKTsKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5n
dGgoKmNvZGVCbG9jay0+dm0oKSwgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZVZhbHVl
KSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgpOworICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJp
bmcoYmFzZVZhbHVlKSkKICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5n
dGgodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoKTsKICAgICAgICAgZWxz
ZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PERpcmVjdEFy
Z3VtZW50cyo+KGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgb3Zl
cnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBhcyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2Fk
ISBHdWFyZGluZwpAQCAtMjc2LDIwICsyMDIsMjEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlR2V0QnlJRAogICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rp
b25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7CiAgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRv
Q2FjaGUpCiAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCiAgICAgICAgIAogICAgICAgICAv
LyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9
PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUo
KQogICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQogICAgICAgICAg
ICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0gICAgICAgICAgICAmJiBpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6Omlz
Q29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICAgICAgJiYgYWN0aW9uID09IEF0dGVtcHRUb0Nh
Y2hlCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkKICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7CisKICAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVu
Y3Rpb24oa2luZCksIHRydWUpOworCisgICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUlkRnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVBy
b3BlcnR5QWNjZXNzKCpjb2RlQmxvY2stPnZtKCksIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGNv
ZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KQEAgLTM3MCw3ICsyOTcsNyBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgIExPR19JQygoSUNF
dmVudDo6R2V0QnlJZFJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgp
LCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dC5jb2RlKCkpOwotICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHJlc3VsdC5jb2Rl
KCkpOworICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoZXhlYy0+dm0oKSwg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsKHJlc3VsdC5jb2RlKCkpKTsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBS
ZXRyeUNhY2hlTGF0ZXI7CkBAIC0zODIsNyArMzA5LDcgQEAgdm9pZCByZXBhdGNoR2V0QnlJRChF
eGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCiAgICAg
aWYgKHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
R2VuZXJpY0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMt
PmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVH
ZW5lcmljR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKIH0KIAogc3RhdGljIFZfSklUT3BlcmF0aW9u
X0VTc2lKSkkgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQpAQCAtNDMzLDE2ICszNjAsMTQgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgc3RydWN0
dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkp
OwogICAgICAgICAKICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVU
eXBlOjpVbnNldAotICAgICAgICAgICAgICAgICYmIGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25l
ZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpCisgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9w
ZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCiAgICAgICAgICAgICAg
ICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAg
ICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5
SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAotICAgICAgICAg
ICAgICAgICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksCi0gICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJlcGF0Y2hD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIGFwcHJvcHJpYXRl
T3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAgICAg
ICAgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uodm0sIHN0dWJJbmZv
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRQdXRCeUlkUmVwbGFjZShjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAg
ICAgICAgIH0KQEAgLTUyNCwxMSArNDQ5LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnlJRAogICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0
aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAgICAgICAgIAogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgcmVzZXRQdXRCeUlEQ2hl
Y2tBbmRMb2FkKHN0dWJJbmZvKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgK
LSAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOworCisgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcCh2bSwgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
KHJlc3VsdC5jb2RlKCkpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRH
aXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CkBAIC01NDAsNyAr
NDYyLDcgQEAgdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgIEdD
U2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ss
IGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCiAgICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBi
YXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2lu
ZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJ
ZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBhcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogfQogCiBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5UmVwYXRjaEluKApAQCAtNTg2LDggKzUwOCwxMSBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVw
bGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwogICAgICAgICAK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgIC8vIEZJWE1F
OiBtYXliZSB3ZSBzaG91bGQganVzdCB1c2UgcmV3aXJlU3R1YkFzSnVtcEhlcmU/CisgICAgICAg
IC8vSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKCkKKwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCisgICAgICAg
ICAgICBzdHViSW5mby5wYXRjaGFibGVKdW1wRm9ySW4oKSwKICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHJlc3VsdC5jb2RlKCkpKTsKICAgICB9CiAgICAgCkBAIC02MDAsNyArNTI1LDcg
QEAgdm9pZCByZXBhdGNoSW4oCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwogICAgIGlmICh0cnlSZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHdh
c0ZvdW5kLCBzbG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRj
aENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uSW4pOworICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uKCksIG9wZXJhdGlvbkluKTsKIH0KIAogc3RhdGljIHZvaWQg
bGlua1Nsb3dGb3IoVk0qLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNvZGVSZWYpCkBAIC05NzIsMTQgKzg5NywxMyBAQCB2b2lkIGxpbmtQb2x5bW9y
cGhpY0NhbGwoCiAKIHZvaWQgcmVzZXRHZXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5SURLaW5kIGtpbmQpCiB7Ci0gICAgcmVwYXRj
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
T3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7Ci0gICAgcmVzZXRHZXRCeUlEQ2hlY2tB
bmRMb2FkKHN0dWJJbmZvKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgcmVwYXRjaENhbGwoY29kZUJs
b2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5n
R2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXAoKmNvZGVCbG9jay0+dm0oKSwgc3R1YkluZm8sIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbigpKTsKIH0KIAogdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJ
IHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpK
ST4ocmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24p
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFk
Q2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wdGltaXplZEZ1
bmN0aW9uOwogICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dE9wdGltaXplOwpAQCAtOTkxLDE0ICs5MTUsMTQgQEAgdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIAogICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CiAg
ICAgfQotICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0
dWJJbmZvKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXAp
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisKKyAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKCpjb2RlQmxvY2stPnZtKCksIHN0dWJJbmZvLCBz
dHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiB9CiAKIHZvaWQgcmVzZXRJbihDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5wYXRjaGFibGVKdW1wRm9y
SW4oKSwgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281525</attachid>
            <date>2016-06-16 19:50:49 -0700</date>
            <delta_ts>2016-06-17 00:19:51 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>79733</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNp
bmNsdWRlICJIZWFwUHJvZmlsZXIuaCIKLSNpbmNsdWRlICJIZWFwU25hcHNob3RCdWlsZGVyLmgi
CisvLyNpbmNsdWRlICJIZWFwU25hcHNob3RCdWlsZGVyLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRp
c3RpY3MuaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKQEAgLTE4NjEsOCArMTg2MSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25QbGEKICNlbmRpZgogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3QoRXhlY1N0YXRlKiBleGVjKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90KEV4ZWNT
dGF0ZSogLypleGVjKi8pCiB7CisgICAgLyoKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIgc25hcHNob3RCdWlsZGVyKGV4ZWMtPnZtKCkuZW5z
dXJlSGVhcFByb2ZpbGVyKCkpOwpAQCAtMTg3Miw2ICsxODczLDggQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbgogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpT
VmFsdWU6OmVuY29kZShKU09OUGFyc2UoZXhlYywganNvblN0cmluZykpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAq
LworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKICNpZiBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyNzMsNiAr
MTI3Myw4IEBACiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVD
QTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyQUFGN0NEMUQwRDMxQjMw
MDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUFGN0NCMUQwRDMxOEIwMDVFNjBC
RSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJNzJBQUY3Q0Ux
RDBEMzFCMzAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUFGN0NDMUQwRDMxOEIw
MDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggKi87IH07CisJCTc5MDVC
QjY4MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8q
IElubGluZUFjY2Vzcy5jcHAgKi87IH07CisJCTc5MDVCQjY5MUQxMjA1MEUwMDE5RkU1NyAvKiBJ
bmxpbmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTE2MERCRDFDOEUzRUM4
MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzkxNjBEQkIxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tl
LmNwcCAqLzsgfTsKIAkJNzkxNjBEQkUxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTE2MERCQzFD
OEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNw
cCAqLzsgfTsKQEAgLTM0NTUsNiArMzQ1Nyw4IEBACiAJCTcwRUNBNjA0MUFGREJFQTIwMDQ0OTcz
OSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzJBQUY3Q0IxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQUFGN0ND
MUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzkwNUJCNjYxRDEyMDUwRTAwMTlGRTU3
IC8qIElubGluZUFjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmxpbmVBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTA1QkI2
NzFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElubGluZUFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3OTE2MERCQjFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJveHlSZXZva2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTE2MERCQzFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJveHlSZXZva2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9D
b2RlT3JpZ2luTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBD
VG9Db2RlT3JpZ2luTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1ODAs
NiArNjU4NCw4IEBACiAJCQkJMEYwMzMyQzExOEIwMTc2MzAwNUY5NzlBIC8qIEdldEJ5SWRWYXJp
YW50LmNwcCAqLywKIAkJCQkwRjAzMzJDMjE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlh
bnQuaCAqLywKIAkJCQkwRjBCODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAq
LywKKwkJCQk3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLywK
KwkJCQk3OTA1QkI2NzFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggKi8sCiAJCQkJ
MTQ4QTdCRUQxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5jcHAgKi8sCiAJCQkJ
MTQ4QTdCRUUxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5oICovLAogCQkJCTBG
MjRFNTUzMTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovLApAQCAt
NzMyNCw2ICs3MzMwLDcgQEAKIAkJCQkwRjJCOUNFOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDNDMzkyQUIxQzNC
RUIwNTAwMjQxRjUzIC8qIEFzc2VtYmxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
QzlERDAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTc5MDVCQjY5MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlD
OTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDBFNEE3MUM0OTdGNzQw
MEE1NzdGQSAvKiBBaXJPcGNvZGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTMwNyw2ICs5MzE0LDcg
QEAKIAkJCQkwRjZCOEFEODFDNEVEREEyMDA5NjkwNTIgLyogQjNEdXBsaWNhdGVUYWlscy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Mjc3NzNERTFBQUY4M0FDMDBCREU3RTggLyogUnVudGltZVR5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OTA1QkI2ODFEMTIwNTBFMDAx
OUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTA1MDI3MUFB
OTA5NTYwMEQzM0IzMyAvKiBTY29wZWRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFMDUwMkYxQUFBODA2OTAwRDMzQjMzIC8qIFNjb3BlZEFyZ3VtZW50c1RhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk5MkFCQ0Y5MUJFQTlCRDIwMDY0MDNBMCAvKiBSZW1vdGVBdXRvbWF0
aW9uVGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkocmV2aXNpb24gMjAyMTUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTk5LDYgKzE5OTksMjEgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVXb3JkT3A4SW1tOChPUF9OT1BfVDEsIDApOwogICAgIH0KIAorICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50MTZfdCBub3BQc2V1ZG8oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9QX05PUF9U
MSB8IDA7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6
ZV90IHNpemUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNpemUgJSBzaXplb2Yo
aW50MTZfdCkpKTsKKyAgICAgICAgc2l6ZV90IG4gPSBzaXplIC8gc2l6ZW9mKGludDE2X3QpOwor
ICAgICAgICBmb3IgKGludDE2X3QqIHB0ciA9IHN0YXRpY19jYXN0PGludDE2X3QqPihiYXNlKTsg
bi0tOykgeworICAgICAgICAgICAgaW50MTZfdCBpbnNuID0gbm9wUHNldWRvKCk7CisgICAgICAg
ICAgICBwZXJmb3JtSklUTWVtY3B5KHB0cisrLCAmaW5zbiwgc2l6ZW9mKGludDE2X3QpKTsKKyAg
ICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgbm9wdygpCiAgICAgewogICAgICAgICBtX2Zvcm1h
dHRlci50d29Xb3JkT3AxNk9wMTYoT1BfTk9QX1QyYSwgT1BfTk9QX1QyYik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJl
dmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDM5ICs2Miw2MiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB9OwogCiAgICAgY2xhc3MgQXNzZW1ibGVyRGF0YSB7CisgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEFzc2VtYmxlckRhdGEpOworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IElubGluZUNhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVy
RGF0YSgpCi0gICAgICAgICAgICA6IG1fYnVmZmVyKG51bGxwdHIpCi0gICAgICAgICAgICAsIG1f
Y2FwYWNpdHkoMCkKKyAgICAgICAgICAgIDogbV9idWZmZXIobV9pbmxpbmVCdWZmZXIpCisgICAg
ICAgICAgICAsIG1fY2FwYWNpdHkoSW5saW5lQ2FwYWNpdHkpCiAgICAgICAgIHsKICAgICAgICAg
fQogCi0gICAgICAgIEFzc2VtYmxlckRhdGEodW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KQorICAg
ICAgICBBc3NlbWJsZXJEYXRhKHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIG1fY2FwYWNpdHkgPSBpbml0aWFsQ2FwYWNpdHk7Ci0gICAgICAgICAgICBtX2J1
ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1fY2FwYWNpdHkpKTsKKyAgICAg
ICAgICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPD0gSW5saW5lQ2FwYWNpdHkpIHsKKyAgICAgICAg
ICAgICAgICBtX2NhcGFjaXR5ID0gSW5saW5lQ2FwYWNpdHk7CisgICAgICAgICAgICAgICAgbV9i
dWZmZXIgPSBtX2lubGluZUJ1ZmZlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgbV9jYXBhY2l0eSA9IGluaXRpYWxDYXBhY2l0eTsKKyAgICAgICAgICAgICAgICBtX2J1
ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1fY2FwYWNpdHkpKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEFzc2VtYmxlckRhdGEoQXNzZW1ibGVyRGF0
YSYmIG90aGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1ZmZlciA9IG90aGVyLm1fYnVm
ZmVyOwotICAgICAgICAgICAgb3RoZXIubV9idWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAg
aWYgKG90aGVyLmlzSW5saW5lQnVmZmVyKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3Ro
ZXIubV9jYXBhY2l0eSA9PSBJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICAgICAgbWVtY3B5
KG1faW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZlciwgSW5saW5lQ2FwYWNpdHkpOwor
ICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gbV9pbmxpbmVCdWZmZXI7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IG90aGVyLm1fYnVmZmVyOwogICAgICAg
ICAgICAgbV9jYXBhY2l0eSA9IG90aGVyLm1fY2FwYWNpdHk7CisKKyAgICAgICAgICAgIG90aGVy
Lm1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgICAgIG90aGVyLm1fY2FwYWNpdHkgPSAwOwog
ICAgICAgICB9CiAKICAgICAgICAgQXNzZW1ibGVyRGF0YSYgb3BlcmF0b3I9KEFzc2VtYmxlckRh
dGEmJiBvdGhlcikKICAgICAgICAgewotICAgICAgICAgICAgbV9idWZmZXIgPSBvdGhlci5tX2J1
ZmZlcjsKLSAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IGlmIChtX2J1ZmZlciAmJiAhaXNJbmxpbmVCdWZmZXIoKSkKKyAgICAgICAgICAgICAgICBmYXN0
RnJlZShtX2J1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChvdGhlci5pc0lubGluZUJ1ZmZlcigp
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY2FwYWNpdHkgPT0gSW5saW5lQ2Fw
YWNpdHkpOworICAgICAgICAgICAgICAgIG1lbWNweShtX2lubGluZUJ1ZmZlciwgb3RoZXIubV9p
bmxpbmVCdWZmZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9
IG1faW5saW5lQnVmZmVyOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9i
dWZmZXIgPSBvdGhlci5tX2J1ZmZlcjsKICAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBvdGhlci5t
X2NhcGFjaXR5OworCisgICAgICAgICAgICBvdGhlci5tX2J1ZmZlciA9IG51bGxwdHI7CiAgICAg
ICAgICAgICBvdGhlci5tX2NhcGFjaXR5ID0gMDsKICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgICAgfQogCiAgICAgICAgIH5Bc3NlbWJsZXJEYXRhKCkKICAgICAgICAgewotICAgICAg
ICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYnVmZmVyICYmICFp
c0lubGluZUJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNoYXIqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVy
OyB9CkBAIC0xMDQsMTkgKzEyNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBn
cm93KHVuc2lnbmVkIGV4dHJhQ2FwYWNpdHkgPSAwKQogICAgICAgICB7CiAgICAgICAgICAgICBt
X2NhcGFjaXR5ID0gbV9jYXBhY2l0eSArIG1fY2FwYWNpdHkgLyAyICsgZXh0cmFDYXBhY2l0eTsK
LSAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RSZWFsbG9jKG1f
YnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmVCdWZmZXIoKSkg
eworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RNYWxs
b2MobV9jYXBhY2l0eSkpOworICAgICAgICAgICAgICAgIG1lbWNweShtX2J1ZmZlciwgbV9pbmxp
bmVCdWZmZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RSZWFsbG9jKG1fYnVmZmVy
LCBtX2NhcGFjaXR5KSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wg
aXNJbmxpbmVCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlciA9PSBtX2lubGluZUJ1ZmZl
cjsgfQogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICAgICAgY2hhciBtX2lubGluZUJ1ZmZl
cltJbmxpbmVDYXBhY2l0eV07CiAgICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CiAgICAgfTsK
IAogICAgIGNsYXNzIEFzc2VtYmxlckJ1ZmZlciB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
aW5pdGlhbENhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyQnVm
ZmVyKCkKLSAgICAgICAgICAgIDogbV9zdG9yYWdlKGluaXRpYWxDYXBhY2l0eSkKKyAgICAgICAg
ICAgIDogbV9zdG9yYWdlKCkKICAgICAgICAgICAgICwgbV9pbmRleCgwKQogICAgICAgICB7CiAg
ICAgICAgIH0KQEAgLTE2Myw3ICsxOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB1
bnNpZ25lZCBkZWJ1Z09mZnNldCgpIHsgcmV0dXJuIG1faW5kZXg7IH0KIAotICAgICAgICBBc3Nl
bWJsZXJEYXRhIHJlbGVhc2VBc3NlbWJsZXJEYXRhKCkgeyByZXR1cm4gV1RGTW92ZShtX3N0b3Jh
Z2UpOyB9CisgICAgICAgIEFzc2VtYmxlckRhdGEmJiByZWxlYXNlQXNzZW1ibGVyRGF0YSgpIHsg
cmV0dXJuIFdURk1vdmUobV9zdG9yYWdlKTsgfQogCiAgICAgICAgIC8vIExvY2FsV3JpdGVyIGlz
IGEgdHJpY2sgdG8ga2VlcCB0aGUgc3RvcmFnZSBidWZmZXIgYW5kIHRoZSBpbmRleAogICAgICAg
ICAvLyBpbiBtZW1vcnkgd2hpbGUgaXNzdWluZyBtdWx0aXBsZSBTdG9yZXMuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9u
IDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw1NCArMTAyLDYyIEBAIHZvaWQgTGlua0J1ZmZlcjo6
Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICBhbGxvY2F0ZShtX2luaXRpYWxTaXplLCBvd25l
clVJRCwgZWZmb3J0KTsKICAgICBpZiAoZGlkRmFpbFRvQWxsb2NhdGUoKSkKICAgICAgICAgcmV0
dXJuOworCiAgICAgVmVjdG9yPExpbmtSZWNvcmQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYg
anVtcHNUb0xpbmsgPSBtYWNyb0Fzc2VtYmxlci5qdW1wc1RvTGluaygpOwogICAgIG1fYXNzZW1i
bGVyU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZlcigpLnJlbGVhc2VB
c3NlbWJsZXJEYXRhKCk7CiAgICAgdWludDhfdCogaW5EYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4obV9hc3NlbWJsZXJTdG9yYWdlLmJ1ZmZlcigpKTsKIAogICAgIEFzc2VtYmxlckRh
dGEgb3V0QnVmZmVyKG1fc2l6ZSk7CisKICAgICB1aW50OF90KiBvdXREYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4ob3V0QnVmZmVyLmJ1ZmZlcigpKTsKICAgICB1aW50OF90KiBjb2Rl
T3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fY29kZSk7CiAKICAgICBpbnQg
cmVhZFB0ciA9IDA7CiAgICAgaW50IHdyaXRlUHRyID0gMDsKICAgICB1bnNpZ25lZCBqdW1wQ291
bnQgPSBqdW1wc1RvTGluay5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGp1
bXBDb3VudDsgKytpKSB7Ci0gICAgICAgIGludCBvZmZzZXQgPSByZWFkUHRyIC0gd3JpdGVQdHI7
Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDEpKTsKLSAgICAgICAgICAgIAotICAgICAgICAv
LyBDb3B5IHRoZSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgbGFzdCBqdW1wIHRvIHRoZSBjdXJyZW50
IG9uZS4KLSAgICAgICAgc2l6ZV90IHJlZ2lvblNpemUgPSBqdW1wc1RvTGlua1tpXS5mcm9tKCkg
LSByZWFkUHRyOwotICAgICAgICBJbnN0cnVjdGlvblR5cGUqIGNvcHlTb3VyY2UgPSByZWludGVy
cHJldF9jYXN0X3B0cjxJbnN0cnVjdGlvblR5cGUqPihpbkRhdGEgKyByZWFkUHRyKTsKLSAgICAg
ICAgSW5zdHJ1Y3Rpb25UeXBlKiBjb3B5RW5kID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SW5zdHJ1
Y3Rpb25UeXBlKj4oaW5EYXRhICsgcmVhZFB0ciArIHJlZ2lvblNpemUpOwotICAgICAgICBJbnN0
cnVjdGlvblR5cGUqIGNvcHlEc3QgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0cnVjdGlvblR5
cGUqPihvdXREYXRhICsgd3JpdGVQdHIpOwotICAgICAgICBBU1NFUlQoIShyZWdpb25TaXplICUg
MikpOwotICAgICAgICBBU1NFUlQoIShyZWFkUHRyICUgMikpOwotICAgICAgICBBU1NFUlQoISh3
cml0ZVB0ciAlIDIpKTsKLSAgICAgICAgd2hpbGUgKGNvcHlTb3VyY2UgIT0gY29weUVuZCkKLSAg
ICAgICAgICAgICpjb3B5RHN0KysgPSAqY29weVNvdXJjZSsrOwotICAgICAgICByZWNvcmRMaW5r
T2Zmc2V0cyhtX2Fzc2VtYmxlclN0b3JhZ2UsIHJlYWRQdHIsIGp1bXBzVG9MaW5rW2ldLmZyb20o
KSwgb2Zmc2V0KTsKLSAgICAgICAgcmVhZFB0ciArPSByZWdpb25TaXplOwotICAgICAgICB3cml0
ZVB0ciArPSByZWdpb25TaXplOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIENhbGN1bGF0ZSBh
YnNvbHV0ZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhcmdldCwgaW4gdGhlIGNhc2Ugb2YgYmFja3dh
cmRzCi0gICAgICAgIC8vIGJyYW5jaGVzIHdlIG5lZWQgdG8gYmUgcHJlY2lzZSwgZm9yd2FyZCBi
cmFuY2hlcyB3ZSBhcmUgcGVzc2ltaXN0aWMKLSAgICAgICAgY29uc3QgdWludDhfdCogdGFyZ2V0
OwotICAgICAgICBpZiAoanVtcHNUb0xpbmtbaV0udG8oKSA+PSBqdW1wc1RvTGlua1tpXS5mcm9t
KCkpCi0gICAgICAgICAgICB0YXJnZXQgPSBjb2RlT3V0RGF0YSArIGp1bXBzVG9MaW5rW2ldLnRv
KCkgLSBvZmZzZXQ7IC8vIENvbXBlbnNhdGUgZm9yIHdoYXQgd2UgaGF2ZSBjb2xsYXBzZWQgc28g
ZmFyCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRhcmdldCA9IGNvZGVPdXREYXRhICsganVt
cHNUb0xpbmtbaV0udG8oKSAtIGV4ZWN1dGFibGVPZmZzZXRGb3IoanVtcHNUb0xpbmtbaV0udG8o
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgSnVtcExpbmtUeXBlIGp1bXBMaW5rVHlwZSA9IE1h
Y3JvQXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcHNUb0xpbmtbaV0sIGNvZGVPdXREYXRh
ICsgd3JpdGVQdHIsIHRhcmdldCk7Ci0gICAgICAgIC8vIENvbXBhY3QgYnJhbmNoIGlmIHdlIGNh
bi4uLgotICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkNvbXBhY3QoanVtcHNUb0xpbmtb
aV0udHlwZSgpKSkgewotICAgICAgICAgICAgLy8gU3RlcCBiYWNrIGluIHRoZSB3cml0ZSBzdHJl
YW0KLSAgICAgICAgICAgIGludDMyX3QgZGVsdGEgPSBNYWNyb0Fzc2VtYmxlcjo6anVtcFNpemVE
ZWx0YShqdW1wc1RvTGlua1tpXS50eXBlKCksIGp1bXBMaW5rVHlwZSk7Ci0gICAgICAgICAgICBp
ZiAoZGVsdGEpIHsKLSAgICAgICAgICAgICAgICB3cml0ZVB0ciAtPSBkZWx0YTsKLSAgICAgICAg
ICAgICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fzc2VtYmxlclN0b3JhZ2UsIGp1bXBzVG9MaW5r
W2ldLmZyb20oKSAtIGRlbHRhLCByZWFkUHRyLCByZWFkUHRyIC0gd3JpdGVQdHIpOworICAgIGlm
IChtX3Nob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBqdW1wQ291bnQ7ICsraSkgeworICAgICAgICAgICAgaW50IG9mZnNldCA9
IHJlYWRQdHIgLSB3cml0ZVB0cjsKKyAgICAgICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDEpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENvcHkgdGhlIGluc3RydWN0aW9ucyBm
cm9tIHRoZSBsYXN0IGp1bXAgdG8gdGhlIGN1cnJlbnQgb25lLgorICAgICAgICAgICAgc2l6ZV90
IHJlZ2lvblNpemUgPSBqdW1wc1RvTGlua1tpXS5mcm9tKCkgLSByZWFkUHRyOworICAgICAgICAg
ICAgSW5zdHJ1Y3Rpb25UeXBlKiBjb3B5U291cmNlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SW5z
dHJ1Y3Rpb25UeXBlKj4oaW5EYXRhICsgcmVhZFB0cik7CisgICAgICAgICAgICBJbnN0cnVjdGlv
blR5cGUqIGNvcHlFbmQgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0cnVjdGlvblR5cGUqPihp
bkRhdGEgKyByZWFkUHRyICsgcmVnaW9uU2l6ZSk7CisgICAgICAgICAgICBJbnN0cnVjdGlvblR5
cGUqIGNvcHlEc3QgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0cnVjdGlvblR5cGUqPihvdXRE
YXRhICsgd3JpdGVQdHIpOworICAgICAgICAgICAgQVNTRVJUKCEocmVnaW9uU2l6ZSAlIDIpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghKHJlYWRQdHIgJSAyKSk7CisgICAgICAgICAgICBBU1NFUlQo
ISh3cml0ZVB0ciAlIDIpKTsKKyAgICAgICAgICAgIHdoaWxlIChjb3B5U291cmNlICE9IGNvcHlF
bmQpCisgICAgICAgICAgICAgICAgKmNvcHlEc3QrKyA9ICpjb3B5U291cmNlKys7CisgICAgICAg
ICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fzc2VtYmxlclN0b3JhZ2UsIHJlYWRQdHIsIGp1bXBz
VG9MaW5rW2ldLmZyb20oKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJlYWRQdHIgKz0gcmVnaW9u
U2l6ZTsKKyAgICAgICAgICAgIHdyaXRlUHRyICs9IHJlZ2lvblNpemU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgYWRkcmVzcyBvZiB0aGUganVt
cCB0YXJnZXQsIGluIHRoZSBjYXNlIG9mIGJhY2t3YXJkcworICAgICAgICAgICAgLy8gYnJhbmNo
ZXMgd2UgbmVlZCB0byBiZSBwcmVjaXNlLCBmb3J3YXJkIGJyYW5jaGVzIHdlIGFyZSBwZXNzaW1p
c3RpYworICAgICAgICAgICAgY29uc3QgdWludDhfdCogdGFyZ2V0OworICAgICAgICAgICAgaWYg
KGp1bXBzVG9MaW5rW2ldLnRvKCkgPj0ganVtcHNUb0xpbmtbaV0uZnJvbSgpKQorICAgICAgICAg
ICAgICAgIHRhcmdldCA9IGNvZGVPdXREYXRhICsganVtcHNUb0xpbmtbaV0udG8oKSAtIG9mZnNl
dDsgLy8gQ29tcGVuc2F0ZSBmb3Igd2hhdCB3ZSBoYXZlIGNvbGxhcHNlZCBzbyBmYXIKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBjb2RlT3V0RGF0YSArIGp1bXBz
VG9MaW5rW2ldLnRvKCkgLSBleGVjdXRhYmxlT2Zmc2V0Rm9yKGp1bXBzVG9MaW5rW2ldLnRvKCkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgSnVtcExpbmtUeXBlIGp1bXBMaW5rVHlw
ZSA9IE1hY3JvQXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcHNUb0xpbmtbaV0sIGNvZGVP
dXREYXRhICsgd3JpdGVQdHIsIHRhcmdldCk7CisgICAgICAgICAgICAvLyBDb21wYWN0IGJyYW5j
aCBpZiB3ZSBjYW4uLi4KKyAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuQ29tcGFj
dChqdW1wc1RvTGlua1tpXS50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgLy8gU3RlcCBiYWNr
IGluIHRoZSB3cml0ZSBzdHJlYW0KKyAgICAgICAgICAgICAgICBpbnQzMl90IGRlbHRhID0gTWFj
cm9Bc3NlbWJsZXI6Omp1bXBTaXplRGVsdGEoanVtcHNUb0xpbmtbaV0udHlwZSgpLCBqdW1wTGlu
a1R5cGUpOworICAgICAgICAgICAgICAgIGlmIChkZWx0YSkgeworICAgICAgICAgICAgICAgICAg
ICB3cml0ZVB0ciAtPSBkZWx0YTsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkTGlua09mZnNl
dHMobV9hc3NlbWJsZXJTdG9yYWdlLCBqdW1wc1RvTGlua1tpXS5mcm9tKCkgLSBkZWx0YSwgcmVh
ZFB0ciwgcmVhZFB0ciAtIHdyaXRlUHRyKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBqdW1wc1RvTGlua1tpXS5zZXRGcm9tKHdyaXRlUHRyKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1w
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIU1hY3JvQXNzZW1ibGVy
OjpjYW5Db21wYWN0KGp1bXBzVG9MaW5rW2ldLnR5cGUoKSkpOwogICAgICAgICB9Ci0gICAgICAg
IGp1bXBzVG9MaW5rW2ldLnNldEZyb20od3JpdGVQdHIpOwogICAgIH0KICAgICAvLyBDb3B5IGV2
ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3QganVtcAogICAgIG1lbWNweShvdXREYXRhICsgd3JpdGVQ
dHIsIGluRGF0YSArIHJlYWRQdHIsIG1faW5pdGlhbFNpemUgLSByZWFkUHRyKTsKQEAgLTE2Miw5
ICsxNzAsMTggQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogICAg
IH0KIAogICAgIGp1bXBzVG9MaW5rLmNsZWFyKCk7Ci0gICAgc2hyaW5rKHdyaXRlUHRyICsgbV9p
bml0aWFsU2l6ZSAtIHJlYWRQdHIpOwogCi0gICAgcGVyZm9ybUpJVE1lbWNweShtX2NvZGUsIG91
dEJ1ZmZlci5idWZmZXIoKSwgbV9zaXplKTsKKyAgICBzaXplX3QgY29tcGFjdFNpemUgPSB3cml0
ZVB0ciArIG1faW5pdGlhbFNpemUgLSByZWFkUHRyOworICAgIGlmIChtX2V4ZWN1dGFibGVNZW1v
cnkpIHsKKyAgICAgICAgbV9zaXplID0gY29tcGFjdFNpemU7CisgICAgICAgIG1fZXhlY3V0YWJs
ZU1lbW9yeS0+c2hyaW5rKG1fc2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6
IHN1cHBvcnQgZm9yIGFybXY3IGhlcmUuCisgICAgICAgIHNpemVfdCBub3BTaXplSW5CeXRlcyA9
IG1faW5pdGlhbFNpemUgLSBjb21wYWN0U2l6ZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFz
c2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMob3V0RGF0YSArIGNvbXBhY3RTaXplLCBub3BTaXplSW5C
eXRlcyk7CisgICAgfQorCisgICAgcGVyZm9ybUpJVE1lbWNweShtX2NvZGUsIG91dERhdGEsIG1f
c2l6ZSk7CiAKICNpZiBEVU1QX0xJTktfU1RBVElTVElDUwogICAgIGR1bXBMaW5rU3RhdGlzdGlj
cyhtX2NvZGUsIG1faW5pdGlhbFNpemUsIG1fc2l6ZSk7CkBAIC0xOTgsNyArMjE1LDcgQEAgdm9p
ZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogICAgIGNvcHlDb21wYWN0QW5k
TGlua0NvZGU8dWludDE2X3Q+KG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKICNl
bGlmIENQVShBUk02NCkKICAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVpbnQzMl90PihtYWNy
b0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7Ci0jZW5kaWYKKyNlbmRpZiAvLyAhRU5BQkxF
KEJSQU5DSF9DT01QQUNUSU9OKQogCiAgICAgbV9saW5rVGFza3MgPSBXVEZNb3ZlKG1hY3JvQXNz
ZW1ibGVyLm1fbGlua1Rhc2tzKTsKIH0KQEAgLTIwNiw2ICsyMjMsNyBAQCB2b2lkIExpbmtCdWZm
ZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyCiB2b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKHNp
emVfdCBpbml0aWFsU2l6ZSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCkKIHsKICAgICBpZiAobV9jb2RlKSB7CisgICAgICAgIC8vIEZJWE1FOiwgd2hlbiB3ZSdy
ZSBwYXNzZWQgYW4gaW5pdGlhbFNpemUgPCBtX3NpemUsIHdlIHNob3VsZCBub3Agc2xlZCBhdCB0
aGUgZW5kLgogICAgICAgICBpZiAoaW5pdGlhbFNpemUgPiBtX3NpemUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIApAQCAtMjIzLDE0ICsyNDEsNiBAQCB2b2lkIExpbmtCdWZmZXI6OmFs
bG9jYXRlKHNpemVfdCBpbml0aWFsCiAgICAgbV9kaWRBbGxvY2F0ZSA9IHRydWU7CiB9CiAKLXZv
aWQgTGlua0J1ZmZlcjo6c2hyaW5rKHNpemVfdCBuZXdTaXplKQotewotICAgIGlmICghbV9leGVj
dXRhYmxlTWVtb3J5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaXplID0gbmV3U2l6ZTsKLSAg
ICBtX2V4ZWN1dGFibGVNZW1vcnktPnNocmluayhtX3NpemUpOwotfQotCiB2b2lkIExpbmtCdWZm
ZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogewogICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGlu
a1Rhc2tzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOwogICAg
IH0KIAotICAgIExpbmtCdWZmZXIoTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lk
KiBjb2RlLCBzaXplX3Qgc2l6ZSwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0ID0gSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNy
b0Fzc2VtYmxlciwgdm9pZCogY29kZSwgc2l6ZV90IHNpemUsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGJvb2wgc2hvdWxkUGVyZm9ybUJy
YW5jaENvbXBhY3Rpb24gPSB0cnVlKQogICAgICAgICA6IG1fc2l6ZShzaXplKQogI2lmIEVOQUJM
RShCUkFOQ0hfQ09NUEFDVElPTikKICAgICAgICAgLCBtX2luaXRpYWxTaXplKDApCkBAIC0xMDcs
NiArMTA3LDExIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkKICNlbmRp
ZgogICAgIHsKKyNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCisgICAgICAgIG1fc2hvdWxk
UGVyZm9ybUJyYW5jaENvbXBhY3Rpb24gPSBzaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbjsK
KyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShzaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlv
bik7CisjZW5kaWYKICAgICAgICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIDAsIGVmZm9ydCk7
CiAgICAgfQogCkBAIC0yNTAsNyArMjU1LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9j
b2RlOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IGFjY291bnQgZm9yIHRo
ZSBBc3NlbWJsZXJEYXRhIHNpemUhCisgICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3QgYWNjb3Vu
dCBmb3IgdGhlIEFzc2VtYmxlckRhdGEgc2l6ZSB3aGVuIHdlJ3JlIGdlbmVyYXRpbmcgaW50byBh
bHJlYWR5IAorICAgIC8vIGFsbG9jYXRlZCBleGVjdXRhYmxlIG1lbW9yeS4KICAgICBzaXplX3Qg
c2l6ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zaXplOwpAQCAtMjg2LDcgKzI5Miw2IEBA
IHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIHZvaWQgYWxsb2NhdGUoc2l6ZV90IGluaXRpYWxT
aXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgIHZvaWQgc2hy
aW5rKHNpemVfdCBuZXdTaXplKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbGlua0Nv
ZGUoTWFjcm9Bc3NlbWJsZXImLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQp
OwogI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKQEAgLTMwOSw2ICszMTQsNyBAQCBwcml2
YXRlOgogI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKICAgICBzaXplX3QgbV9pbml0aWFs
U2l6ZTsKICAgICBBc3NlbWJsZXJEYXRhIG1fYXNzZW1ibGVyU3RvcmFnZTsKKyAgICBib29sIG1f
c2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24geyB0cnVlIH07CiAjZW5kaWYKICAgICBib29s
IG1fZGlkQWxsb2NhdGU7CiAgICAgdm9pZCogbV9jb2RlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlz
aW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDg3LDYgKzMwODcsMTQgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChyZXN1bHQpOwogICAgIH0KIAorICAgIFBh
dGNoYWJsZUp1bXAgcGF0Y2hhYmxlQnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBB
ZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW0zMiBpbW0pCisgICAgeworICAgICAgICBtX21ha2VKdW1w
UGF0Y2hhYmxlID0gdHJ1ZTsKKyAgICAgICAgSnVtcCByZXN1bHQgPSBicmFuY2gzMihjb25kLCBs
ZWZ0LCBpbW0pOworICAgICAgICBtX21ha2VKdW1wUGF0Y2hhYmxlID0gZmFsc2U7CisgICAgICAg
IHJldHVybiBQYXRjaGFibGVKdW1wKHJlc3VsdCk7CisgICAgfQorCiAgICAgUGF0Y2hhYmxlSnVt
cCBwYXRjaGFibGVCcmFuY2g2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
cmVnLCBUcnVzdGVkSW1tNjQgaW1tKQogICAgIHsKICAgICAgICAgbV9tYWtlSnVtcFBhdGNoYWJs
ZSA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4NjgsNiArMTg2OCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBQYXRjaGFi
bGVKdW1wKHJlc3VsdCk7CiAgICAgfQogCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFu
Y2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMy
IGltbSkKKyAgICB7CisgICAgICAgIG1fbWFrZUp1bXBQYXRjaGFibGUgPSB0cnVlOworICAgICAg
ICBKdW1wIHJlc3VsdCA9IGJyYW5jaDMyKGNvbmQsIGxlZnQsIGltbSk7CisgICAgICAgIG1fbWFr
ZUp1bXBQYXRjaGFibGUgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAocmVz
dWx0KTsKKyAgICB9CisKICAgICBQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQ
YXRjaChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRy
JiBkYXRhTGFiZWwsIFRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBUcnVzdGVkSW1t
UHRyKDApKQogICAgIHsKICAgICAgICAgbV9tYWtlSnVtcFBhdGNoYWJsZSA9IHRydWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw2ICs0MzksOSBAQCB2b2lkIENvZGVCbG9jazo6cHJp
bnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAg
ICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgorICAgICAgICAgICAgb3V0LnByaW50Zigi
QXJyYXlMZW5ndGgiKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVk
ZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2Vs
bElubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBkdW1wQ2FjaGVTaXplc0FuZENyYXNo
KFZNJiB2bSkKK3sKKyAgICBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIEdQUlJl
ZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgSlNW
YWx1ZVJlZ3MgcmVncyhiYXNlLCB2YWx1ZSk7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlZ3Mo
YmFzZSk7CisjZW5kaWYKKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwor
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gdmFsdWU7CisgICAgICAgIGppdC5sb2FkOChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHZhbHVlKTsKKyAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElz
QXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHZhbHVlKTsKKyAgICAgICAgaml0LnBhdGNoYWJs
ZUJyYW5jaDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgdmFsdWUsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1b3VzU2hhcGUpKTsKKyAg
ICAgICAgLy9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAvLyAgICBDQ2FsbEhlbHBlcnM6Olpl
cm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVN
YXNrKSk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgp
KSwgdmFsdWUpOworICAgICAgICAvL2ppdC5wYXRjaGFibGVCcmFuY2gzMihDQ2FsbEhlbHBlcnM6
Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7Cisg
ICAgICAgIGppdC5ib3hJbnQzMihzY3JhdGNoR1BSLCByZWdzKTsKKworICAgICAgICBkYXRhTG9n
KCJhcnJheSBsZW5ndGggc2l6ZTogIiwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXpl
KCksICJcbiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0p
OworCisgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDB4MDAwYWIyMWNhKSk7CisgICAgICAgIGppdC5sb2FkUHRyKAor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksCisgICAgICAgICAgICB2YWx1ZSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSID0gdmFsdWU7CisgICAgICAgIGppdC5sb2FkVmFsdWUoCisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgMHgwMDBhYjIxY2EpLCByZWdzKTsKKworICAgICAg
ICBkYXRhTG9nKCJvdXQgb2YgbGluZSBvZmZzZXQgY2FjaGUgc2l6ZTogIiwgaml0Lm1fYXNzZW1i
bGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksICJcbiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzIGppdCgmdm0pOworCisgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MDAwYWIyMWNhKSk7Cisg
ICAgICAgIGppdC5sb2FkVmFsdWUoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlLCAweDAwMGFiMjFjYSksIHJlZ3MpOworCisgICAgICAgIGRhdGFMb2coImlubGluZSBv
ZmZzZXQgY2FjaGUgc2l6ZTogIiwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCks
ICJcbiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwor
CisgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2Us
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDB4MDAwYWIyMWNhKSk7CisKKyAgICAgICAgaml0LnN0b3JlVmFsdWUo
CisgICAgICAgICAgICByZWdzLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCAweDAwMGFi
MjFjYSkpOworCisgICAgICAgIGRhdGFMb2coInJlcGxhY2UgY2FjaGUgc2l6ZTogIiwgaml0Lm1f
YXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksICJcbiIpOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworCisgICAgICAgIGppdC5wYXRjaGFibGVCcmFu
Y2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MDAwYWIyMWNh
KSk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBqaXQuc3RvcmVW
YWx1ZSgKKyAgICAgICAgICAgIHJlZ3MsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlLCAxMjAzNDIpKTsKKworICAgICAgICBkYXRhTG9nKCJyZXBsYWNlIG91dCBvZiBs
aW5lIGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAi
XG4iKTsKKyAgICB9CisKKyAgICBDUkFTSCgpOworfQorCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdGlvbj4KK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbGlua0lubGluZU9yR29Ub1Nsb3dQ
YXRoKGNvbnN0IGNoYXIqIG5hbWUsIENDYWxsSGVscGVycyYgaml0LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBjb25zdCBib29s
IHNob3VsZER1bXBDYWNoZVNpemVzQW5kQ3Jhc2ggPSBmYWxzZTsKKyAgICBpZiAoc2hvdWxkRHVt
cENhY2hlU2l6ZXNBbmRDcmFzaCkKKyAgICAgICAgZHVtcENhY2hlU2l6ZXNBbmRDcmFzaCgqaml0
LnZtKCkpOworCisgICAgaWYgKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDw9
IHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUpIHsKKyAgICAgICAgd2hpbGUgKGppdC5tX2Fzc2Vt
Ymxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDwgc3R1YkluZm8ucGF0Y2guaW5saW5lU2l6ZSkKKyAg
ICAgICAgICAgIGppdC5ub3AoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXQubV9hc3Nl
bWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSA9PSBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplKTsK
KyAgICAgICAgYm9vbCBuZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8ucGF0Y2guc3RhcnQuZGF0YUxvY2F0aW9u
KCksIHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQs
IG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAgICAgIGZ1bmN0aW9uKGxpbmtCdWZmZXIpOwor
ICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSW5saW5lQWNjZXNzVHlwZTogJyVz
JyIsIG5hbWUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgZmFp
bElmQ2FudElubGluZSA9IGZhbHNlOworICAgIGlmIChmYWlsSWZDYW50SW5saW5lKSB7CisgICAg
ICAgIGRhdGFMb2coIkZhaWx1cmUgZm9yOiAiLCBuYW1lLCAiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygicmVhbCBzaXplOiAiLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgIiBp
bmxpbmUgc2l6ZToiLCBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplLCAiXG4iKTsKKyAgICAgICAg
Q1JBU0goKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnMgcmVwbGFjZW1lbnRKSVQoaml0LnZt
KCkpOworICAgIGF1dG8ganVtcFRvU2xvd1BhdGggPSByZXBsYWNlbWVudEpJVC5qdW1wKCk7Cisg
ICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBqdW1w
IGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KKyAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVu
dEpJVC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDwgc3R1YkluZm8ucGF0Y2guaW5s
aW5lU2l6ZSk7CisgICAgYm9vbCBuZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIocmVwbGFjZW1lbnRKSVQsIHN0dWJJbmZvLnBhdGNoLnN0YXJ0
LmRhdGFMb2NhdGlvbigpLCByZXBsYWNlbWVudEpJVC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2Rl
U2l6ZSgpLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24p
OworICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9TbG93UGF0aCwgc3R1YkluZm8uc2xvd1BhdGhT
dGFydExvY2F0aW9uKCkpOworCisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIklubGlu
ZUFjY2VzcyBsaW5raW5nIGEganVtcCB0byBzbG93IHBhdGggYmVjYXVzZSB3ZSByYW4gb3V0IG9m
IHJvb20gaW5saW5lIikpOworfQorCit2b2lkIElubGluZUFjY2Vzczo6Z2VuZXJhdGVQcm9wZXJ0
eUFjY2VzcyhWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0
KCZ2bSk7CisKKyAgICBHUFJSZWcgYmFzZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guYmFzZUdQUik7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJl
Z3MoKTsKKworICAgIGF1dG8gYnJhbmNoVG9TbG93UGF0aCA9IGppdC5wYXRjaGFibGVCcmFuY2gz
MigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3Ry
dWN0dXJlLT5pZCgpKSkpOworICAgIGppdC5ub3AoKTsKKyAgICBHUFJSZWcgc3RvcmFnZTsKKyAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgc3RvcmFnZSA9IGJhc2U7Cisg
ICAgZWxzZSB7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkpOworICAg
ICAgICBqaXQubm9wKCk7CisgICAgICAgIHN0b3JhZ2UgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Cisg
ICAgfQorCisgICAgaml0LmxvYWRWYWx1ZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIHZhbHVlKTsKKyAgICBq
aXQubm9wKCk7CisKKyAgICBsaW5rSW5saW5lT3JHb1RvU2xvd1BhdGgoInByb3BlcnR5IGFjY2Vz
cyIsIGppdCwgc3R1YkluZm8sIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoYnJhbmNoVG9TbG93UGF0aCwgc3R1YkluZm8uc2xvd1BhdGhTdGFy
dExvY2F0aW9uKCkpOworICAgIH0pOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBHUFJSZWcg
Z2V0U2NyYXRjaFJlZ2lzdGVyKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdp
c3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guYmFzZUdQUikpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGFs
bG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZVRhZ0dQ
UikpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2gudmFsdWVUYWdHUFIpKTsKKyNlbmRpZgorICAgIEdQUlJlZyBzY3JhdGNoID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3Rl
cnMoKSkKKyAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgcmV0dXJuIHNjcmF0Y2g7
Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lzdGVyKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0
dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOworfQorCitib29sIElubGluZUFjY2Vzczo6Y2FuR2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1Yklu
Zm8pOworfQorCit2b2lkIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworCisgICAgQ0NhbGxIZWxwZXJzIGpp
dCgmdm0pOworCisgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLmJhc2VHUFIpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVS
ZWdzKCk7CisKKyAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQucGF0Y2hhYmxlQnJhbmNo
MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0
cnVjdHVyZS0+aWQoKSkpKTsKKworICAgIEdQUlJlZyBzdG9yYWdlOworICAgIGlmIChpc0lubGlu
ZU9mZnNldChvZmZzZXQpKQorICAgICAgICBzdG9yYWdlID0gYmFzZTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgc3RvcmFnZSA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbyk7CisgICAgICAgIEFT
U0VSVChzdG9yYWdlICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3Rv
cmFnZSk7CisgICAgfQorCisgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgIHZhbHVlLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQp
KSk7CisKKyAgICBsaW5rSW5saW5lT3JHb1RvU2xvd1BhdGgoInByb3BlcnR5IHJlcGxhY2UiLCBq
aXQsIHN0dWJJbmZvLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGJyYW5jaFRvU2xvd1BhdGgsIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbigpKTsKKyAgICB9KTsKK30KKworYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKwor
ICAgIGlmICghaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGFycmF5LT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhJbnQzMgor
ICAgICAgICB8fCBhcnJheS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlCisgICAg
ICAgIHx8IGFycmF5LT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzOworfQor
Cit2b2lkIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChWTSYgdm0sIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywgYXJyYXkpKTsKKworICAgIENDYWxs
SGVscGVycyBqaXQoJnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJ
bmZvLnZhbHVlUmVncygpOworICAgIEdQUlJlZyBzY3JhdGNoID0gZ2V0U2NyYXRjaFJlZ2lzdGVy
KHN0dWJJbmZvKTsKKworICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5hbmQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBz
Y3JhdGNoKTsKKyAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQucGF0Y2hhYmxlQnJhbmNo
MzIoCisgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5cGUoKSkpOworICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCB2YWx1ZS5wYXlsb2FkR1BSKCkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHZh
bHVlLnBheWxvYWRHUFIoKSk7CisgICAgaml0LmJveEludDMyKHZhbHVlLnBheWxvYWRHUFIoKSwg
dmFsdWUpOworCisgICAgbGlua0lubGluZU9yR29Ub1Nsb3dQYXRoKCJhcnJheSBsZW5ndGgiLCBq
aXQsIHN0dWJJbmZvLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGJyYW5jaFRvU2xvd1BhdGgsIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbigpKTsKKyAgICB9KTsKK30KKwordm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXAoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
IHRhcmdldCkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICBhdXRvIGp1bXAg
PSBqaXQuanVtcCgpOworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhlcmUgYmVj
YXVzZSBub2JvZHkgc2hvdWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFuIElDLgor
ICAgIFJFTEVBU0VfQVNTRVJUKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDwg
c3R1YkluZm8ucGF0Y2guaW5saW5lU2l6ZSk7CisgICAgYm9vbCBuZWVkc0JyYW5jaENvbXBhY3Rp
b24gPSBmYWxzZTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViSW5mby5wYXRj
aC5zdGFydC5kYXRhTG9jYXRpb24oKSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXpl
KCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7Cisg
ICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIHRhcmdldCk7CisKKyAgICBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiSW5saW5lQWNjZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmxpbmVBY2Nlc3NfaAorI2RlZmluZSBJbmxpbmVB
Y2Nlc3NfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgor
I2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBK
U0FycmF5OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CitjbGFz
cyBWTTsKKworY2xhc3MgSW5saW5lQWNjZXNzIHsKK3B1YmxpYzoKKworICAgIC8vIFdlIHVzZSBz
aXplIHRoZSBmb3Igb3V0IG9mIGxpbmUgb2Zmc2V0cyBiZWNhdXNlIHRoYXQncyBsYXJnZXIuCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZUZvclByb3BlcnR5QWNjZXNzKCkKKyAgICB7
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDIzOworI2VsaWYgQ1BVKFg4NikKKyAg
ICAgICAgcmV0dXJuIDI3OworI2VsaWYgQ1BVKEFSTTY0KQorICAgICAgICByZXR1cm4gNDA7Cisj
ZWxpZiBDUFUoQVJNKQorI2lmIENQVShBUk1fVEhVTUIyKQorICAgICAgICByZXR1cm4gNDg7Cisj
ZWxzZQorICAgICAgICByZXR1cm4gNTA7CisjZW5kaWYKKyNlbHNlCisjZXJyb3IgInVuc3VwcG9y
dGVkIHBsYXRmb3JtIgorI2VuZGlmCisgICAgfQorCisgICAgLy8gV2UgdXNlIHNpemUgdGhlIGZv
ciBvdXQgb2YgbGluZSBvZmZzZXRzIGJlY2F1c2UgdGhhdCdzIGxhcmdlci4KKyAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBzaXplRm9yUHJvcGVydHlSZXBsYWNlKCkKKyAgICB7CisjaWYgQ1BV
KFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDIzOworI2VsaWYgQ1BVKFg4NikKKyAgICAgICAgcmV0
dXJuIDI3OworI2VsaWYgQ1BVKEFSTTY0KQorICAgICAgICByZXR1cm4gNDA7CisjZWxpZiBDUFUo
QVJNKQorI2lmIENQVShBUk1fVEhVTUIyKQorICAgICAgICByZXR1cm4gNDg7CisjZWxzZQorICAg
ICAgICByZXR1cm4gNTA7CisjZW5kaWYKKyNlbHNlCisjZXJyb3IgInVuc3VwcG9ydGVkIHBsYXRm
b3JtIgorI2VuZGlmCisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZUZv
ckxlbmd0aEFjY2VzcygpCisgICAgeworI2lmIENQVShYODZfNjQpCisgICAgICAgIHJldHVybiAy
NjsKKyNlbGlmIENQVShYODYpCisgICAgICAgIHJldHVybiAyNzsKKyNlbGlmIENQVShBUk02NCkK
KyAgICAgICAgcmV0dXJuIDMyOworI2VsaWYgQ1BVKEFSTSkKKyNpZiBDUFUoQVJNX1RIVU1CMikK
KyAgICAgICAgcmV0dXJuIDMwOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIDUwOworI2VuZGlmCisj
ZWxzZQorI2Vycm9yICJ1bnN1cHBvcnRlZCBwbGF0Zm9ybSIKKyNlbmRpZgorICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvcGVydHlBY2Nlc3MoVk0mLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFZNJiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGlj
IGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkq
KTsKKyAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFZNJiwgU3RydWN0dXJlU3R1
YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcChWTSYs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWwpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gSW5saW5lQWNj
ZXNzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU1MSwxMSArMTU1MSw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nl
c3MKICAgICBzdGF0ZS5pZGVudCA9ICZpZGVudDsKICAgICAKICAgICBzdGF0ZS5iYXNlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSAgICBzdGF0ZS52
YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwKLSNlbmRpZgot
ICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7Cisg
ICAgc3RhdGUudmFsdWVSZWdzID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMp
OwogICAgIHN0YXRlLmFsbG9jYXRvciA9ICZhbGxvY2F0b3I7CkBAIC0xNzUzLDE0ICsxNzQ5LDEx
IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgcmV0
dXJuIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdhdmVVcDsKICAgICB9CiAKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpOworICAg
IENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmRvbmVMb2NhdGlvbigp
OwogICAgICAgICAKICAgICBsaW5rQnVmZmVyLmxpbmsoc3RhdGUuc3VjY2Vzcywgc3VjY2Vzc0xh
YmVsKTsKIAotICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgZmFpbHVyZSwKLSAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgIGxpbmtCdWZmZXIubGluayhmYWlsdXJlLCBzdHVi
SW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIiAiLCBzdHViSW5mby5jb2RlT3JpZ2luLCAiOiBH
ZW5lcmF0aW5nIHBvbHltb3JwaGljIGFjY2VzcyBzdHViIGZvciAiLCBsaXN0RHVtcChjYXNlcyks
ICJcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw2ICs2MywxMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYo
CiAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmluaXRBcnJheUxlbmd0aCgpCit7CisgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpB
cnJheUxlbmd0aDsKK30KKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBs
YWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlB1
dEJ5SWRSZXBsYWNlOwpAQCAtODcsNiArOTIsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpk
ZXJlZigpCiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgIGNhc2UgQ2FjaGVUeXBlOjpH
ZXRCeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MDIsNiArMTA4LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWJvdXRUb0RpZSgpCiAgICAg
Y2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoK
ICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgY2FzZSBDYWNoZVR5cGU6
OkFycmF5TGVuZ3RoOgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNTcsNiArMjY0LDcg
QEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdAogewogICAgIHN3aXRj
aCAoY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgIGNhc2UgQ2Fj
aGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDYWNo
ZVR5cGU6OkdldEJ5SWRTZWxmOgogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToK
QEAgLTI3NSw2ICsyODMsNyBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpjb250YWluc1BDKHZv
aWQqCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdS5zdHViLT5jb250YWluc1BD
KHBjKTsKIH0KLSNlbmRpZgorCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFVuc2V0LAogICAg
IEdldEJ5SWRTZWxmLAogICAgIFB1dEJ5SWRSZXBsYWNlLAotICAgIFN0dWIKKyAgICBTdHViLAor
ICAgIEFycmF5TGVuZ3RoCiB9OwogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CkBAIC02OCw2
ICs2OSw3IEBAIHB1YmxpYzoKICAgICB+U3RydWN0dXJlU3R1YkluZm8oKTsKIAogICAgIHZvaWQg
aW5pdEdldEJ5SWRTZWxmKENvZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQpOworICAgIHZvaWQgaW5pdEFycmF5TGVuZ3RoKCk7CiAgICAgdm9p
ZCBpbml0UHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBpbml0U3R1YihDb2RlQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+KTsKIApAQCAtMTQzLDEzICsxNDUsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CisgICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBj
KSBjb25zdDsKIAogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXg7CiAKLSAgICBib29sIGNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0Owot
CiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkBAIC0xNjUsMjUgKzE2NSwzOSBA
QCBwdWJsaWM6CiAgICAgU3RydWN0dXJlU2V0IGJ1ZmZlcmVkU3RydWN0dXJlczsKICAgICAKICAg
ICBzdHJ1Y3QgeworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydDsgLy8gVGhpcyBpcyBl
aXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcywgb3IgdGhl
IGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW4nIGNhY2hlcy4KKyAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgdWludDMyX3QgaW5saW5lU2l6ZTsgLy8g
T25seSB1c2VkIGZvciBieUlkIGNhY2hlcy4KKyAgICAgICAgaW50MzJfdCBkZWx0YUZyb21TdGFy
dFRvQ2FsbExvY2F0aW9uOworICAgICAgICBpbnQzMl90IGRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0
aFN0YXJ0OworCiAgICAgICAgIGludDhfdCBiYXNlR1BSOworICAgICAgICBpbnQ4X3QgdmFsdWVH
UFI7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgaW50OF90IHZhbHVlVGFnR1BSOwog
ICAgICAgICBpbnQ4X3QgYmFzZVRhZ0dQUjsKICNlbmRpZgotICAgICAgICBpbnQ4X3QgdmFsdWVH
UFI7Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7Ci0gICAgICAgIGludDMyX3Qg
ZGVsdGFDYWxsVG9Eb25lOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvSnVtcDsKLSAgICAg
ICAgaW50MzJfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2hl
Y2tJbW1Ub0NhbGw7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaW50MzJfdCBkZWx0YUNh
bGxUb0xvYWRPclN0b3JlOwotI2Vsc2UKLSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1RhZ0xv
YWRPclN0b3JlOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3Jl
OwotI2VuZGlmCiAgICAgfSBwYXRjaDsKIAorICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVy
bkxvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQuY2FsbEF0T2Zmc2V0KHBhdGNoLmRlbHRh
RnJvbVN0YXJ0VG9DYWxsTG9jYXRpb24pOyB9CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZUxv
Y2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQubGFiZWxBdE9mZnNldChwYXRjaC5pbmxpbmVT
aXplKTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsg
cmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQocGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Ns
b3dQYXRoU3RhcnQpOyB9CisgICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wRm9ySW4o
KQorICAgIHsgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlw
ZTo6SW4pOworICAgICAgICByZXR1cm4gcGF0Y2guc3RhcnQuanVtcEF0T2Zmc2V0KDApOworICAg
IH0KKworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZVJlZ3MoCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PEdQUlJlZz4ocGF0Y2gudmFsdWVUYWdHUFIpLAorI2VuZGlmCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxHUFJSZWc+KHBhdGNoLnZhbHVlR1BSKSk7CisgICAgfQorCisKICAgICBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CiAgICAgQ2FjaGVUeXBlIGNhY2hlVHlwZTsKICAgICB1aW50
OF90IGNvdW50ZG93bjsgLy8gV2UgcmVwYXRjaCBvbmx5IHdoZW4gdGhpcyBpcyB6ZXJvLiBJZiBu
b3QgemVybywgd2UgZGVjcmVtZW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsMTEg
KzI1OCwyMCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSAqbV9pbnNbaV0ubV9zdHViSW5mbzsKLSAgICAgICAg
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKTsKLSAgICAgICAgaW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVy
bkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9kb25lKSk7Ci0gICAg
ICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fanVt
cCkpOwotICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlv
bjsKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1f
aW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKKworICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2p1bXAp
OworICAgICAgICBpbmZvLnBhdGNoLnN0YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAgcHRyZGlmZl90
IGlubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAor
ICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2RvbmUp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lU2l6ZSA+PSAwKTsKKyAgICAgICAgaW5m
by5wYXRjaC5pbmxpbmVTaXplID0gaW5saW5lU2l6ZTsKKworICAgICAgICBpbmZvLnBhdGNoLmRl
bHRhRnJvbVN0YXJ0VG9DYWxsTG9jYXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKAorICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5jYWxsKCkpKTsKKworICAgICAgICBpbmZvLnBh
dGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOwogICAgIH0KICAg
ICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4Niw4ICsxODYsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
CiAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kU3R1
YkluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKIAotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBz
dHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CisgICAgICAgICAgICAgICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24o
KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Nyw5ICsxOTcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKAogICAg
IAogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdl
bmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJl
YW0tPnNpemUoKSk7CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0
LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCB0eXBlKTsKKyAg
ICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0
ZXJzLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9hZEdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdFRh
Z0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIHR5cGUpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKG1faml0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY4LDggKzE2OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQo
Q29kZU8KICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQocmVzdWx0R1BSLCBmYWxzZSk7CiAgICAg
fQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCB0eXBlKTsKKyAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBpZGVu
dGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgdHlwZSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgobV9qaXQpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShy
ZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxODMsMjEgKzYxODMsMTkgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aENhbGwpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihkb25lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbFJldHVybkxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0g
Y2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhCZWdpbikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5zdGFydCA9IHN0YXJ0OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXpl
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRp
b25PZihkb25lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaW5saW5lU2l6ZSA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guaW5saW5lU2l6ZSA9IGlubGluZVNpemU7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gu
ZGVsdGFGcm9tU3RhcnRUb0NhbGxMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhDYWxsKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFG
cm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoQmVnaW4pKTsKKwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNzYxNiw3ICs3NjE0LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVEdldEJ5SWRH
ZW5lcmF0b3I+OjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwg
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0ZUluZGV4LAotICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdw
cigpKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IHVpZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgdHlwZSk7CiAKICAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIwMjE1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYyLDYgKzE2MiwxMSBAQCB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2Vt
Ymx5KFByCiB7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZnJvbUxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGZyb20pOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIHRvTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YodG8pOworICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGZyb21M
b2NhdGlvbiwgdG9Mb2NhdGlvbik7Cit9CisKK3ZvaWQgSklURGlzYXNzZW1ibGVyOjpkdW1wRGlz
YXNzZW1ibHkoUHJpbnRTdHJlYW0mIG91dCwgQ29kZUxvY2F0aW9uTGFiZWwgZnJvbUxvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbCB0b0xvY2F0aW9uKQorewogICAgIGRpc2Fzc2VtYmxlKGZyb21M
b2NhdGlvbiwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odG9Mb2NhdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGZyb21Mb2NhdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSwgIiAgICAgICAgIiwgb3V0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw2ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBMaW5r
QnVmZmVyJik7CiAgICAgdm9pZCByZXBvcnRUb1Byb2ZpbGVyKFByb2ZpbGVyOjpDb21waWxhdGlv
biosIExpbmtCdWZmZXImKTsKIAorICAgIHZvaWQgZHVtcERpc2Fzc2VtYmx5KFByaW50U3RyZWFt
JiwgQ29kZUxvY2F0aW9uTGFiZWwgZnJvbSwgQ29kZUxvY2F0aW9uTGFiZWwgdG8pOworCiBwcml2
YXRlOgogICAgIHZvaWQgZHVtcEhlYWRlcihQcmludFN0cmVhbSYsIExpbmtCdWZmZXImKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZmlyc3RTbG93TGFiZWwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOSBAQAogI2lm
IEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCisjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY5LDI1ICs3MCwxOSBAQCBKSVRCeUlkR2VuZXJhdG9y
OjpKSVRCeUlkR2VuZXJhdG9yKAogCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExp
bmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsKLSAgICBDb2RlTG9j
YXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2YobV9jYWxs
KTsKLSAgICBtX3N0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRp
b247Ci0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGZhc3RQYXRoLmxvY2F0
aW9uT2YobV9zdHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9jYXRpb24pOwotICAgIG1fc3R1Yklu
Zm8tPnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRp
b25PZihtX3N0cnVjdHVyZUNoZWNrKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX3N0dWJJ
bmZvLT5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0
aC5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKLSNlbHNlCi0gICAgbV9zdHViSW5mby0+cGF0
Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9j
YXRpb25PZihtX3RhZ0xvYWRPclN0b3JlKSk7Ci0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFD
YWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9u
T2YobV9sb2FkT3JTdG9yZSkpOwotI2VuZGlmCi0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
Ci0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Nsb3dQ
YXRoQmVnaW4pKTsKLSAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNy
b0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJu
TG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9kb25lKSk7CisgICAgQVNTRVJUKG1fc3Rh
cnQuaXNTZXQoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBmYXN0UGF0aC5sb2Nh
dGlvbk9mKG1fc3RhcnQpOworICAgIG1fc3R1YkluZm8tPnBhdGNoLnN0YXJ0ID0gc3RhcnQ7CisK
KyAgICBpbnQzMl90IGlubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKAorICAgICAgICBzdGFydCwgZmFzdFBhdGgubG9jYXRpb25PZihtX2RvbmUpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChpbmxpbmVTaXplID4gMCk7CisgICAgbV9zdHViSW5mby0+cGF0
Y2guaW5saW5lU2l6ZSA9IGlubGluZVNpemU7CisKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0
YUZyb21TdGFydFRvQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cigKKyAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0
aENhbGwpKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhT
dGFydCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAg
IHN0YXJ0LCBzbG93UGF0aC5sb2NhdGlvbk9mKG1fc2xvd1BhdGhCZWdpbikpOwogfQogCiB2b2lk
IEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkBAIC05
NSwzOCArOTAsMjkgQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZgog
ICAgIGZpbmFsaXplKGxpbmtCdWZmZXIsIGxpbmtCdWZmZXIpOwogfQogCi12b2lkIEpJVEJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGhDaGVja3MoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3Zv
aWQgSklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0Q29tbW9uKE1hY3JvQXNzZW1ibGVyJiBq
aXQsIHNpemVfdCBpbmxpbmVJQ1NpemUpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVDaGVjayA9IGppdC5w
YXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigp
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICBtX3N0cnVjdHVyZUltbSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSk7CisgICAgbV9zdGFydCA9IGppdC5sYWJl
bCgpOworICAgIHNpemVfdCBzdGFydFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29k
ZVNpemUoKTsKKyAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5qdW1wKCk7CisgICAgd2hpbGUgKGpp
dC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIC0gc3RhcnRTaXplIDwgaW5saW5lSUNT
aXplKQorICAgICAgICBqaXQubm9wKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoaml0Lm1fYXNzZW1i
bGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgLSBzdGFydFNpemUgPT0gaW5saW5lSUNTaXplKTsKKyAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KIAogSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0
QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywKLSAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlKQotICAgIDogSklUQnlJZEdlbmVyYXRvcigKLSAgICAgICAgY29kZUJs
b2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFz
ZSwgdmFsdWUpCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKKyAgICA6
IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNz
VHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUpCisgICAgLCBtX2lzTGVuZ3RoQWNjZXNz
KHByb3BlcnR5TmFtZSA9PSBjb2RlQmxvY2stPnZtKCktPnByb3BlcnR5TmFtZXMtPmxlbmd0aC5p
bXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUu
dGFnR1BSKCkpOwogfQogCiB2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKLSAgICBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKGpp
dCk7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2xvYWRPclN0b3JlID0gaml0Lmxv
YWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKAotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSwgbV92YWx1ZS5wYXlsb2FkR1BSKCkp
LmxhYmVsKCk7Ci0jZWxzZQotICAgIG1fdGFnTG9hZE9yU3RvcmUgPSBqaXQubG9hZDMyV2l0aENv
bXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG1fYmFzZS5wYXlsb2FkR1BSKCksIDApLCBtX3ZhbHVlLnRhZ0dQUigpKS5sYWJlbCgpOwotICAg
IG1fbG9hZE9yU3RvcmUgPSBqaXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2go
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5wYXlsb2FkR1BSKCksIDAp
LCBtX3ZhbHVlLnBheWxvYWRHUFIoKSkubGFiZWwoKTsKLSNlbmRpZgotICAgIAotICAgIG1fZG9u
ZSA9IGppdC5sYWJlbCgpOworICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhB
Y2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vz
czo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpK
SVRQdXRCeUlkR2VuZXJhdG9yKApAQCAtMTQzLDE5ICsxMjksNyBAQCBKSVRQdXRCeUlkR2VuZXJh
dG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewotICAgIGdlbmVyYXRlRmFzdFBh
dGhDaGVja3Moaml0KTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1fbG9hZE9yU3Rv
cmUgPSBqaXQuc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIG1fdmFsdWUu
cGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigp
LCAwKSkubGFiZWwoKTsKLSNlbHNlCi0gICAgbV90YWdMb2FkT3JTdG9yZSA9IGppdC5zdG9yZTMy
V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgbV92YWx1ZS50YWdHUFIoKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgMCkpLmxhYmVsKCk7Ci0gICAg
bV9sb2FkT3JTdG9yZSA9IGppdC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAg
ICAgbV92YWx1ZS5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5w
YXlsb2FkR1BSKCksIDApKS5sYWJlbCgpOwotI2VuZGlmCi0gICAgCi0gICAgbV9kb25lID0gaml0
LmxhYmVsKCk7CisgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXpl
Rm9yUHJvcGVydHlSZXBsYWNlKCkpOwogfQogCiBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIEpJVFB1
dEJ5SWRHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwzMCArNjgsMzAgQEAgcHVibGljOgogICAgIHZv
aWQgcmVwb3J0U2xvd1BhdGhDYWxsKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2lu
LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQogICAgIHsKICAgICAgICAgbV9zbG93UGF0aEJl
Z2luID0gc2xvd1BhdGhCZWdpbjsKLSAgICAgICAgbV9jYWxsID0gY2FsbDsKKyAgICAgICAgbV9z
bG93UGF0aENhbGwgPSBjYWxsOwogICAgIH0KICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgc2xvd1BhdGhCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvd1BhdGhCZWdpbjsgfQotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlQ2hlY2subV9qdW1wOyB9CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhK
dW1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nsb3dQYXRoSnVtcC5pc1NldCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fc2xvd1BhdGhKdW1wOworICAgIH0KIAogICAgIHZvaWQgZmlu
YWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0
aExpbmtCdWZmZXIpOwogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYpOwogICAgIAogcHJv
dGVjdGVkOgotICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxlciYp
OworICAgIHZvaWQgZ2VuZXJhdGVGYXN0Q29tbW9uKE1hY3JvQXNzZW1ibGVyJiwgc2l6ZV90IHNp
emUpOwogICAgIAogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Zh
bHVlOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBtX3N0cnVjdHVyZUlt
bTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3N0cnVjdHVyZUNoZWNrOwot
ICAgIEFzc2VtYmxlckxhYmVsIG1fbG9hZE9yU3RvcmU7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICBBc3NlbWJsZXJMYWJlbCBtX3RhZ0xvYWRPclN0b3JlOwotI2VuZGlmCisgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9u
ZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQ
YXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAK
IGNsYXNzIEpJVEdldEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CkBA
IC05OSwxMCArOTksMTMgQEAgcHVibGljOgogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IoKSB7IH0K
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIENvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1Zh
bHVlUmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgQWNjZXNzVHlwZSk7Cisg
ICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lLAor
ICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgQWNjZXNzVHlwZSk7
CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisKK3By
aXZhdGU6CisgICAgYm9vbCBtX2lzTGVuZ3RoQWNjZXNzOwogfTsKIAogY2xhc3MgSklUUHV0QnlJ
ZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2
aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIEpJVEdldEJ5
SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXQKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0
KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CisgICAg
ICAgIHByb3BlcnR5TmFtZS5pbXBsKCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgZmFzdERvbmVDYXNlID0ganVtcCgpOwpAQCAt
NTg3LDEzICs1ODcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVj
dAogewogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNz
VHlwZTo6R2V0UHVyZSk7CisgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6Okdl
dFB1cmUpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CkBAIC02
MzQsNyArNjM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlv
biksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
QWNjZXNzVHlwZTo6R2V0KTsKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6
R2V0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgSklUR2V0QnlJZEdl
bmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdAogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOworICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBmYXN0RG9uZUNhc2UgPSBq
dW1wKCk7CkBAIC01NzIsNiArNTcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChJbnN0cnVjdAogewogICAgIGludCByZXN1bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKICAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CiAKQEAgLTU3OSw3ICs1ODAsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKEluc3RydWN0CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldFB1cmUpOworICAgICAgICBpZGVudC0+
aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlw
ZTo6R2V0UHVyZSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
QEAgLTYyMCw3ICs2MjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qCiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9m
ZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7
CisgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJHQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJQ1N0YXRz
LmgiCisjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVk
ZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTkwLDk1ICs5MSw2
IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUIKICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwogfQogCi1zdGF0
aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciYgc2xvd1BhdGhGdW5jdGlv
biwKLSAgICBib29sIGNvbXBhY3QpCi17Ci0gICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQotICAg
IHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93
UGF0aEZ1bmN0aW9uKTsKLQotICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUg
b2Zmc2V0IG9mIHRoZSBsb2FkLgotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoCi0g
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0o
aW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCksCi0gICAgICAgIGJp
dHdpc2VfY2FzdDxpbnQzMl90PihzdHJ1Y3R1cmUtPmlkKCkpKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGlmIChjb21wYWN0KQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBh
Y3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jh
c2Uob2Zmc2V0KSk7Ci0gICAgZWxzZQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaElu
dDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShv
ZmZzZXQpKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGNvbXBhY3QpIHsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvVGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2Fk
T3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICB9Ci0jZW5kaWYK
LX0KLQotc3RhdGljIHZvaWQgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVM
YWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0o
aW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1h
Y3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkp
IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hh
YmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRP
ZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BS
KSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotICAgIH0KLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxp
bnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3Jl
KSwgMCk7Ci0jZWxzZQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBh
Y3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSks
IDApOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
MzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
MzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwp
OwotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gz
MldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1
cmVMYWJlbCksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8u
cGF0Y2guYmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsK
LSAgICB9Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwg
c3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRP
clN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNl
bmRpZgotfQotCi1zdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQotewotICAgIFJF
TEVBU0VfQVNTRVJUKHRhcmdldCk7Ci0gICAgCi0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5K
dW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpz
dGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoCi0gICAgICAgICAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoCi0gICAg
ICAgICAgICAgICAgICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRv
Q2FsbCkpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICByZXNldEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8p
OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdl
dCkpOwotfQotCiBlbnVtIElubGluZUNhY2hlQWN0aW9uIHsKICAgICBHaXZlVXBPbkNhY2hlLAog
ICAgIFJldHJ5Q2FjaGVMYXRlciwKQEAgLTI0MSw5ICsxNTMsMjAgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBuZXdDYXNlOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpIHsKLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKQotICAgICAgICAgICAg
bmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpBcnJheUxlbmd0aCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkK
KyAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoc3R1
YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCisgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0
Y2hwb2ludFNldCgpCisgICAgICAgICAgICAgICAgJiYgIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAg
ICYmIGFjdGlvbkZvckNlbGwodm0sIGJhc2VWYWx1ZS5hc0NlbGwoKSkgPT0gQXR0ZW1wdFRvQ2Fj
aGUKKyAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZVZhbHVlKSkpIHsKKyAgICAgICAgICAg
ICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigp
LCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAgICAgICAg
ICAgICAgIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCgqY29kZUJsb2NrLT52bSgp
LCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJh
eUxlbmd0aCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpKQogICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBB
Y2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgpOwogICAgICAgICBlbHNlIGlmIChEaXJlY3RBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oYmFzZVZhbHVl
KSkgewogICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBvdmVycmlkZXMsIHRoZW4gd2UgY2Fu
IGhhbmRsZSB0aGlzIGFzIGEgbm9ybWFsIHByb3BlcnR5IGxvYWQhIEd1YXJkaW5nCkBAIC0yNzYs
MjAgKzE5OSwyMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAg
ICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VD
ZWxsKTsKICAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKICAgICAgICAgICAg
IHJldHVybiBhY3Rpb247CisKICAgICAgICAgCiAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNj
ZXNzLgogICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQK
ICAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCiAgICAgICAgICAgICAmJiBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCiAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBv
aW50U2V0KCkKLSAgICAgICAgICAgICYmIGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpCi0gICAgICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFk
ZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
Ci0gICAgICAgICAgICAmJiBhY3Rpb24gPT0gQXR0ZW1wdFRvQ2FjaGUKICAgICAgICAgICAgICYm
ICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAg
JiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKKwogICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpHZXRCeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWUp
KTsKICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCeUlk
U2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSwgdHJ1ZSk7
CisKKyAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7
CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlUHJvcGVydHlBY2Nlc3MoKmNvZGVC
bG9jay0+dm0oKSwgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAg
ICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKICAgICAgICAgfQpAQCAtMzcwLDcgKzI5NCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkUmVwbGFj
ZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCksIHByb3BlcnR5TmFtZSkpOwog
ICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAg
IHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgcmVzdWx0LmNvZGUoKSk7CisgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChleGVjLT52bSgpLCBzdHViSW5mbywgQ29kZUxvY2F0
aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gcmVzdWx0
LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKQEAg
LTM4Miw3ICszMDYsNyBAQCB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNW
CiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCkt
Pm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAKICAgICBpZiAodHJ5Q2FjaGVHZXRCeUlE
KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0g
R2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bmN0
aW9uKGtpbmQpKTsKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuY3Rp
b24oa2luZCkpOwogfQogCiBzdGF0aWMgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0
ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRL
aW5kIHB1dEtpbmQpCkBAIC00MzMsMTYgKzM1NywxNCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVy
dHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAg
ICAgICAgICAgJiYgaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkKLSAgICAgICAg
ICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhP
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAgICAgICAgICAg
ICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5m
bywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0
dXJlLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgewogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwgc3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCi0gICAgICAgICAgICAgICAgICAgIGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtp
bmQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSh2bSwgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBs
YWNlKGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgfQpAQCAtNTI0LDEx
ICs0NDYsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdC5jb2RlKCkpOwotICAgICAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8p
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChyZXN1bHQuY29kZSgpKSk7CisKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wKHZtLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwog
ICAgIH0KICAgICAKICAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVw
T25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKQEAgLTU0MCw3ICs0NTksNyBAQCB2b2lkIHJlcGF0
Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsK
ICAgICAKICAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hl
KQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOworICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uKCksIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNo
SW4oCkBAIC01ODYsOCArNTA1LDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBh
dGNoSW4oCiAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgLy8gRklYTUU6IG1heWJlIHdlIHNob3VsZCBq
dXN0IHVzZSByZXdpcmVTdHViQXNKdW1wSGVyZT8KKyAgICAgICAgLy9JbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXAoKQorCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgK
LSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNo
YWJsZUp1bXBGb3JJbigpLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNv
ZGUoKSkpOwogICAgIH0KICAgICAKQEAgLTYwMCw3ICs1MjIsNyBAQCB2b2lkIHJlcGF0Y2hJbigK
IHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAg
aWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJ
bmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7CisgICAgICAg
IHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24oKSwgb3BlcmF0aW9uSW4pOwogfQogCiBzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZikK
QEAgLTk3MiwxNCArODk0LDEzIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKIAogdm9pZCBy
ZXNldEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgR2V0QnlJREtpbmQga2luZCkKIHsKLSAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1
bmN0aW9uKGtpbmQpKTsKLSAgICByZXNldEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpKTsKKyAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2lu
ZCkpOworICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcCgqY29kZUJsb2NrLT52bSgp
LCBzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lk
IHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQogewotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChj
b2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0
d2lzZV9jYXN0PFZfSklUT3BlcmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwog
ICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rpb247CiAgICAgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CkBAIC05OTEs
MTQgKzkxMiwxNCBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAg
ICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9Ci0gICAgcmVwYXRjaENh
bGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0
aW9uKTsKLSAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwotICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKKworICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uKCksIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0
dWJBc0p1bXAoKmNvZGVCbG9jay0+dm0oKSwgc3R1YkluZm8sIHN0dWJJbmZvLnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbigpKTsKIH0KIAogdm9pZCByZXNldEluKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLnBhdGNoYWJsZUp1bXBGb3JJbigpLCBzdHViSW5mby5zbG93
UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281541</attachid>
            <date>2016-06-17 00:19:51 -0700</date>
            <delta_ts>2016-06-17 15:20:47 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>77775</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwMjE1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMjAwLDYgKzIwMCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNv
ZGUvRXhpdGluZ0pJVFR5cGUuY3BwCiAgICAgYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKICAg
ICBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKKyAgICBieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCiAgICAgYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAogICAgIGJ5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZVNldC5jcHAKICAgICBieXRlY29kZS9KdW1wVGFibGUuY3BwCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTEyNzMsNiArMTI3Myw4IEBACiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTcz
OSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdp
c3RyeUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyQUFGN0NEMUQwRDMxQjMwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
QUFGN0NCMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNw
cCAqLzsgfTsKIAkJNzJBQUY3Q0UxRDBEMzFCMzAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyQUFGN0NDMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmggKi87IH07CisJCTc5MDVCQjY4MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJC
NjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgKi87IH07CisJCTc5MDVCQjY5
MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxp
bmVBY2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3OTE2MERCRDFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkxNjBEQkIxQzhFM0VDODAw
OEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCAqLzsgfTsKIAkJNzkxNjBEQkUxQzhFM0VDODAwOEMw
ODVBIC8qIFByb3h5UmV2b2tlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTE2MERCQzFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFD
NEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8q
IFBDVG9Db2RlT3JpZ2luTWFwLmNwcCAqLzsgfTsKQEAgLTM0NTUsNiArMzQ1Nyw4IEBACiAJCTcw
RUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBQUY3Q0IxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyQUFGN0NDMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzkw
NUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3OTA1QkI2NzFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUFjY2Vzcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTE2MERCQjFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlS
ZXZva2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJveHlSZXZv
a2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTE2MERCQzFDOEUzRUM4MDA4
QzA4NUEgLyogUHJveHlSZXZva2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJveHlSZXZva2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkyQ0IzNDcxQzRF
RUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBDVG9Db2RlT3JpZ2luTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTY1ODAsNiArNjU4NCw4IEBACiAJCQkJMEYwMzMyQzExOEIwMTc2MzAw
NUY5NzlBIC8qIEdldEJ5SWRWYXJpYW50LmNwcCAqLywKIAkJCQkwRjAzMzJDMjE4QjAxNzYzMDA1
Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuaCAqLywKIAkJCQkwRjBCODNBODE0QkNGNTVFMDA4ODVC
NEYgLyogSGFuZGxlckluZm8uaCAqLywKKwkJCQk3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyog
SW5saW5lQWNjZXNzLmNwcCAqLywKKwkJCQk3OTA1QkI2NzFEMTIwNTBFMDAxOUZFNTcgLyogSW5s
aW5lQWNjZXNzLmggKi8sCiAJCQkJMTQ4QTdCRUQxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNh
bGxGcmFtZS5jcHAgKi8sCiAJCQkJMTQ4QTdCRUUxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNh
bGxGcmFtZS5oICovLAogCQkJCTBGMjRFNTUzMTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxs
RnJhbWVTZXQuY3BwICovLApAQCAtNzMyNCw2ICs3MzMwLDcgQEAKIAkJCQkwRjJCOUNFOTE5RDBC
QTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDNDMzkyQUIxQzNCRUIwNTAwMjQxRjUzIC8qIEFzc2VtYmxlckNvbW1vbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5MDVCQjY5MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxp
bmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNDBFNEE3MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGUuaCBpbiBIZWFkZXJzICov
LApAQCAtOTMwNyw2ICs5MzE0LDcgQEAKIAkJCQkwRjZCOEFEODFDNEVEREEyMDA5NjkwNTIgLyog
QjNEdXBsaWNhdGVUYWlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Mjc3NzNERTFBQUY4M0FD
MDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIx
NDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk3OTA1QkI2ODFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRTA1MDI3MUFBOTA5NTYwMEQzM0IzMyAvKiBTY29wZWRBcmd1bWVudHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkYxQUFBODA2OTAwRDMzQjMzIC8qIFNjb3BlZEFy
Z3VtZW50c1RhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5MkFCQ0Y5MUJFQTlCRDIwMDY0
MDNBMCAvKiBSZW1vdGVBdXRvbWF0aW9uVGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12
N0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTk5LDYgKzE5OTksMjEgQEAgcHVibGlj
OgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A4SW1tOChPUF9OT1BfVDEsIDApOwogICAg
IH0KIAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50MTZfdCBub3BQc2V1ZG8oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE9QX05PUF9UMSB8IDA7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZmls
bE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVCghKHNpemUgJSBzaXplb2YoaW50MTZfdCkpKTsKKyAgICAgICAgc2l6ZV90IG4gPSBzaXpl
IC8gc2l6ZW9mKGludDE2X3QpOworICAgICAgICBmb3IgKGludDE2X3QqIHB0ciA9IHN0YXRpY19j
YXN0PGludDE2X3QqPihiYXNlKTsgbi0tOykgeworICAgICAgICAgICAgaW50MTZfdCBpbnNuID0g
bm9wUHNldWRvKCk7CisgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHB0cisrLCAmaW5zbiwg
c2l6ZW9mKGludDE2X3QpKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgbm9wdygpCiAg
ICAgewogICAgICAgICBtX2Zvcm1hdHRlci50d29Xb3JkT3AxNk9wMTYoT1BfTk9QX1QyYSwgT1Bf
Tk9QX1QyYik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjAyMTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNkZWZpbmUgQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlcl9oCiAKICNpbmNsdWRlICJBYm9ydFJlYXNvbi5oIgotI2luY2x1ZGUgIkFzc2VtYmxlckJ1
ZmZlci5oIgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkocmV2aXNpb24gMjAy
MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsMzkgKzYyLDYyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IH07CiAKICAgICBjbGFzcyBBc3NlbWJsZXJEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQXNzZW1ibGVyRGF0YSk7CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgSW5saW5l
Q2FwYWNpdHkgPSAxMjg7CiAgICAgcHVibGljOgogICAgICAgICBBc3NlbWJsZXJEYXRhKCkKLSAg
ICAgICAgICAgIDogbV9idWZmZXIobnVsbHB0cikKLSAgICAgICAgICAgICwgbV9jYXBhY2l0eSgw
KQorICAgICAgICAgICAgOiBtX2J1ZmZlcihtX2lubGluZUJ1ZmZlcikKKyAgICAgICAgICAgICwg
bV9jYXBhY2l0eShJbmxpbmVDYXBhY2l0eSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgQXNzZW1ibGVyRGF0YSh1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCisgICAgICAgIEFzc2Vt
YmxlckRhdGEoc2l6ZV90IGluaXRpYWxDYXBhY2l0eSkKICAgICAgICAgewotICAgICAgICAgICAg
bV9jYXBhY2l0eSA9IGluaXRpYWxDYXBhY2l0eTsKLSAgICAgICAgICAgIG1fYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MobV9jYXBhY2l0eSkpOworICAgICAgICAgICAgaWYg
KGluaXRpYWxDYXBhY2l0eSA8PSBJbmxpbmVDYXBhY2l0eSkgeworICAgICAgICAgICAgICAgIG1f
Y2FwYWNpdHkgPSBJbmxpbmVDYXBhY2l0eTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IG1f
aW5saW5lQnVmZmVyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2Nh
cGFjaXR5ID0gaW5pdGlhbENhcGFjaXR5OworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MobV9jYXBhY2l0eSkpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgQXNzZW1ibGVyRGF0YShBc3NlbWJsZXJEYXRhJiYgb3RoZXIp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYnVmZmVyID0gb3RoZXIubV9idWZmZXI7Ci0gICAg
ICAgICAgICBvdGhlci5tX2J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAob3RoZXIu
aXNJbmxpbmVCdWZmZXIoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NhcGFj
aXR5ID09IElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBtZW1jcHkobV9pbmxpbmVC
dWZmZXIsIG90aGVyLm1faW5saW5lQnVmZmVyLCBJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAg
ICAgICAgbV9idWZmZXIgPSBtX2lubGluZUJ1ZmZlcjsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIG1fYnVmZmVyID0gb3RoZXIubV9idWZmZXI7CiAgICAgICAgICAgICBtX2Nh
cGFjaXR5ID0gb3RoZXIubV9jYXBhY2l0eTsKKworICAgICAgICAgICAgb3RoZXIubV9idWZmZXIg
PSBudWxscHRyOwogICAgICAgICAgICAgb3RoZXIubV9jYXBhY2l0eSA9IDA7CiAgICAgICAgIH0K
IAogICAgICAgICBBc3NlbWJsZXJEYXRhJiBvcGVyYXRvcj0oQXNzZW1ibGVyRGF0YSYmIG90aGVy
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1ZmZlciA9IG90aGVyLm1fYnVmZmVyOwotICAg
ICAgICAgICAgb3RoZXIubV9idWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKG1fYnVm
ZmVyICYmICFpc0lubGluZUJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVm
ZmVyKTsKKworICAgICAgICAgICAgaWYgKG90aGVyLmlzSW5saW5lQnVmZmVyKCkpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jYXBhY2l0eSA9PSBJbmxpbmVDYXBhY2l0eSk7Cisg
ICAgICAgICAgICAgICAgbWVtY3B5KG1faW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZl
ciwgSW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gbV9pbmxpbmVC
dWZmZXI7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IG90
aGVyLm1fYnVmZmVyOwogICAgICAgICAgICAgbV9jYXBhY2l0eSA9IG90aGVyLm1fY2FwYWNpdHk7
CisKKyAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgICAgIG90
aGVyLm1fY2FwYWNpdHkgPSAwOwogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9
CiAKICAgICAgICAgfkFzc2VtYmxlckRhdGEoKQogICAgICAgICB7Ci0gICAgICAgICAgICBmYXN0
RnJlZShtX2J1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9idWZmZXIgJiYgIWlzSW5saW5lQnVm
ZmVyKCkpCisgICAgICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2hhciogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KQEAgLTEw
NCwxOSArMTI3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGdyb3codW5zaWdu
ZWQgZXh0cmFDYXBhY2l0eSA9IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fY2FwYWNpdHkg
PSBtX2NhcGFjaXR5ICsgbV9jYXBhY2l0eSAvIDIgKyBleHRyYUNhcGFjaXR5OwotICAgICAgICAg
ICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG1f
Y2FwYWNpdHkpKTsKKyAgICAgICAgICAgIGlmIChpc0lubGluZUJ1ZmZlcigpKSB7CisgICAgICAg
ICAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhtX2NhcGFj
aXR5KSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KG1fYnVmZmVyLCBtX2lubGluZUJ1ZmZlciwg
SW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9i
dWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG1fY2FwYWNp
dHkpKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBpc0lubGluZUJ1
ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyID09IG1faW5saW5lQnVmZmVyOyB9CiAgICAg
ICAgIGNoYXIqIG1fYnVmZmVyOworICAgICAgICBjaGFyIG1faW5saW5lQnVmZmVyW0lubGluZUNh
cGFjaXR5XTsKICAgICAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKICAgICB9OwogCiAgICAgY2xh
c3MgQXNzZW1ibGVyQnVmZmVyIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBpbml0aWFsQ2Fw
YWNpdHkgPSAxMjg7CiAgICAgcHVibGljOgogICAgICAgICBBc3NlbWJsZXJCdWZmZXIoKQotICAg
ICAgICAgICAgOiBtX3N0b3JhZ2UoaW5pdGlhbENhcGFjaXR5KQorICAgICAgICAgICAgOiBtX3N0
b3JhZ2UoKQogICAgICAgICAgICAgLCBtX2luZGV4KDApCiAgICAgICAgIHsKICAgICAgICAgfQpA
QCAtMTYzLDcgKzE5MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHVuc2lnbmVkIGRl
YnVnT2Zmc2V0KCkgeyByZXR1cm4gbV9pbmRleDsgfQogCi0gICAgICAgIEFzc2VtYmxlckRhdGEg
cmVsZWFzZUFzc2VtYmxlckRhdGEoKSB7IHJldHVybiBXVEZNb3ZlKG1fc3RvcmFnZSk7IH0KKyAg
ICAgICAgQXNzZW1ibGVyRGF0YSYmIHJlbGVhc2VBc3NlbWJsZXJEYXRhKCkgeyByZXR1cm4gV1RG
TW92ZShtX3N0b3JhZ2UpOyB9CiAKICAgICAgICAgLy8gTG9jYWxXcml0ZXIgaXMgYSB0cmljayB0
byBrZWVwIHRoZSBzdG9yYWdlIGJ1ZmZlciBhbmQgdGhlIGluZGV4CiAgICAgICAgIC8vIGluIG1l
bW9yeSB3aGlsZSBpc3N1aW5nIG11bHRpcGxlIFN0b3Jlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjAyMTUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyLDU0ICsxMDIsNjIgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFj
dEFuZExpbmtDb2RlKAogICAgIGFsbG9jYXRlKG1faW5pdGlhbFNpemUsIG93bmVyVUlELCBlZmZv
cnQpOwogICAgIGlmIChkaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm47CisKICAg
ICBWZWN0b3I8TGlua1JlY29yZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBqdW1wc1RvTGlu
ayA9IG1hY3JvQXNzZW1ibGVyLmp1bXBzVG9MaW5rKCk7CiAgICAgbV9hc3NlbWJsZXJTdG9yYWdl
ID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkucmVsZWFzZUFzc2VtYmxlckRh
dGEoKTsKICAgICB1aW50OF90KiBpbkRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPiht
X2Fzc2VtYmxlclN0b3JhZ2UuYnVmZmVyKCkpOwogCiAgICAgQXNzZW1ibGVyRGF0YSBvdXRCdWZm
ZXIobV9zaXplKTsKKwogICAgIHVpbnQ4X3QqIG91dERhdGEgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihvdXRCdWZmZXIuYnVmZmVyKCkpOwogICAgIHVpbnQ4X3QqIGNvZGVPdXREYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9jb2RlKTsKIAogICAgIGludCByZWFkUHRyID0g
MDsKICAgICBpbnQgd3JpdGVQdHIgPSAwOwogICAgIHVuc2lnbmVkIGp1bXBDb3VudCA9IGp1bXBz
VG9MaW5rLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwganVtcENvdW50OyAr
K2kpIHsKLSAgICAgICAgaW50IG9mZnNldCA9IHJlYWRQdHIgLSB3cml0ZVB0cjsKLSAgICAgICAg
QVNTRVJUKCEob2Zmc2V0ICYgMSkpOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIENvcHkgdGhl
IGluc3RydWN0aW9ucyBmcm9tIHRoZSBsYXN0IGp1bXAgdG8gdGhlIGN1cnJlbnQgb25lLgotICAg
ICAgICBzaXplX3QgcmVnaW9uU2l6ZSA9IGp1bXBzVG9MaW5rW2ldLmZyb20oKSAtIHJlYWRQdHI7
Ci0gICAgICAgIEluc3RydWN0aW9uVHlwZSogY29weVNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPEluc3RydWN0aW9uVHlwZSo+KGluRGF0YSArIHJlYWRQdHIpOwotICAgICAgICBJbnN0cnVj
dGlvblR5cGUqIGNvcHlFbmQgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0cnVjdGlvblR5cGUq
PihpbkRhdGEgKyByZWFkUHRyICsgcmVnaW9uU2l6ZSk7Ci0gICAgICAgIEluc3RydWN0aW9uVHlw
ZSogY29weURzdCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEluc3RydWN0aW9uVHlwZSo+KG91dERh
dGEgKyB3cml0ZVB0cik7Ci0gICAgICAgIEFTU0VSVCghKHJlZ2lvblNpemUgJSAyKSk7Ci0gICAg
ICAgIEFTU0VSVCghKHJlYWRQdHIgJSAyKSk7Ci0gICAgICAgIEFTU0VSVCghKHdyaXRlUHRyICUg
MikpOwotICAgICAgICB3aGlsZSAoY29weVNvdXJjZSAhPSBjb3B5RW5kKQotICAgICAgICAgICAg
KmNvcHlEc3QrKyA9ICpjb3B5U291cmNlKys7Ci0gICAgICAgIHJlY29yZExpbmtPZmZzZXRzKG1f
YXNzZW1ibGVyU3RvcmFnZSwgcmVhZFB0ciwganVtcHNUb0xpbmtbaV0uZnJvbSgpLCBvZmZzZXQp
OwotICAgICAgICByZWFkUHRyICs9IHJlZ2lvblNpemU7Ci0gICAgICAgIHdyaXRlUHRyICs9IHJl
Z2lvblNpemU7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gQ2FsY3VsYXRlIGFic29sdXRlIGFk
ZHJlc3Mgb2YgdGhlIGp1bXAgdGFyZ2V0LCBpbiB0aGUgY2FzZSBvZiBiYWNrd2FyZHMKLSAgICAg
ICAgLy8gYnJhbmNoZXMgd2UgbmVlZCB0byBiZSBwcmVjaXNlLCBmb3J3YXJkIGJyYW5jaGVzIHdl
IGFyZSBwZXNzaW1pc3RpYwotICAgICAgICBjb25zdCB1aW50OF90KiB0YXJnZXQ7Ci0gICAgICAg
IGlmIChqdW1wc1RvTGlua1tpXS50bygpID49IGp1bXBzVG9MaW5rW2ldLmZyb20oKSkKLSAgICAg
ICAgICAgIHRhcmdldCA9IGNvZGVPdXREYXRhICsganVtcHNUb0xpbmtbaV0udG8oKSAtIG9mZnNl
dDsgLy8gQ29tcGVuc2F0ZSBmb3Igd2hhdCB3ZSBoYXZlIGNvbGxhcHNlZCBzbyBmYXIKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdGFyZ2V0ID0gY29kZU91dERhdGEgKyBqdW1wc1RvTGlua1tp
XS50bygpIC0gZXhlY3V0YWJsZU9mZnNldEZvcihqdW1wc1RvTGlua1tpXS50bygpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBKdW1wTGlua1R5cGUganVtcExpbmtUeXBlID0gTWFjcm9Bc3NlbWJs
ZXI6OmNvbXB1dGVKdW1wVHlwZShqdW1wc1RvTGlua1tpXSwgY29kZU91dERhdGEgKyB3cml0ZVB0
ciwgdGFyZ2V0KTsKLSAgICAgICAgLy8gQ29tcGFjdCBicmFuY2ggaWYgd2UgY2FuLi4uCi0gICAg
ICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuQ29tcGFjdChqdW1wc1RvTGlua1tpXS50eXBlKCkp
KSB7Ci0gICAgICAgICAgICAvLyBTdGVwIGJhY2sgaW4gdGhlIHdyaXRlIHN0cmVhbQotICAgICAg
ICAgICAgaW50MzJfdCBkZWx0YSA9IE1hY3JvQXNzZW1ibGVyOjpqdW1wU2l6ZURlbHRhKGp1bXBz
VG9MaW5rW2ldLnR5cGUoKSwganVtcExpbmtUeXBlKTsKLSAgICAgICAgICAgIGlmIChkZWx0YSkg
ewotICAgICAgICAgICAgICAgIHdyaXRlUHRyIC09IGRlbHRhOwotICAgICAgICAgICAgICAgIHJl
Y29yZExpbmtPZmZzZXRzKG1fYXNzZW1ibGVyU3RvcmFnZSwganVtcHNUb0xpbmtbaV0uZnJvbSgp
IC0gZGVsdGEsIHJlYWRQdHIsIHJlYWRQdHIgLSB3cml0ZVB0cik7CisgICAgaWYgKG1fc2hvdWxk
UGVyZm9ybUJyYW5jaENvbXBhY3Rpb24pIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGp1bXBDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZFB0ciAt
IHdyaXRlUHRyOworICAgICAgICAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMSkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gQ29weSB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGxh
c3QganVtcCB0byB0aGUgY3VycmVudCBvbmUuCisgICAgICAgICAgICBzaXplX3QgcmVnaW9uU2l6
ZSA9IGp1bXBzVG9MaW5rW2ldLmZyb20oKSAtIHJlYWRQdHI7CisgICAgICAgICAgICBJbnN0cnVj
dGlvblR5cGUqIGNvcHlTb3VyY2UgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0cnVjdGlvblR5
cGUqPihpbkRhdGEgKyByZWFkUHRyKTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uVHlwZSogY29w
eUVuZCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEluc3RydWN0aW9uVHlwZSo+KGluRGF0YSArIHJl
YWRQdHIgKyByZWdpb25TaXplKTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uVHlwZSogY29weURz
dCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEluc3RydWN0aW9uVHlwZSo+KG91dERhdGEgKyB3cml0
ZVB0cik7CisgICAgICAgICAgICBBU1NFUlQoIShyZWdpb25TaXplICUgMikpOworICAgICAgICAg
ICAgQVNTRVJUKCEocmVhZFB0ciAlIDIpKTsKKyAgICAgICAgICAgIEFTU0VSVCghKHdyaXRlUHRy
ICUgMikpOworICAgICAgICAgICAgd2hpbGUgKGNvcHlTb3VyY2UgIT0gY29weUVuZCkKKyAgICAg
ICAgICAgICAgICAqY29weURzdCsrID0gKmNvcHlTb3VyY2UrKzsKKyAgICAgICAgICAgIHJlY29y
ZExpbmtPZmZzZXRzKG1fYXNzZW1ibGVyU3RvcmFnZSwgcmVhZFB0ciwganVtcHNUb0xpbmtbaV0u
ZnJvbSgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmVhZFB0ciArPSByZWdpb25TaXplOworICAg
ICAgICAgICAgd3JpdGVQdHIgKz0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIENhbGN1bGF0ZSBhYnNvbHV0ZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhcmdldCwg
aW4gdGhlIGNhc2Ugb2YgYmFja3dhcmRzCisgICAgICAgICAgICAvLyBicmFuY2hlcyB3ZSBuZWVk
IHRvIGJlIHByZWNpc2UsIGZvcndhcmQgYnJhbmNoZXMgd2UgYXJlIHBlc3NpbWlzdGljCisgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiB0YXJnZXQ7CisgICAgICAgICAgICBpZiAoanVtcHNUb0xp
bmtbaV0udG8oKSA+PSBqdW1wc1RvTGlua1tpXS5mcm9tKCkpCisgICAgICAgICAgICAgICAgdGFy
Z2V0ID0gY29kZU91dERhdGEgKyBqdW1wc1RvTGlua1tpXS50bygpIC0gb2Zmc2V0OyAvLyBDb21w
ZW5zYXRlIGZvciB3aGF0IHdlIGhhdmUgY29sbGFwc2VkIHNvIGZhcgorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHRhcmdldCA9IGNvZGVPdXREYXRhICsganVtcHNUb0xpbmtbaV0u
dG8oKSAtIGV4ZWN1dGFibGVPZmZzZXRGb3IoanVtcHNUb0xpbmtbaV0udG8oKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBKdW1wTGlua1R5cGUganVtcExpbmtUeXBlID0gTWFjcm9B
c3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZShqdW1wc1RvTGlua1tpXSwgY29kZU91dERhdGEgKyB3
cml0ZVB0ciwgdGFyZ2V0KTsKKyAgICAgICAgICAgIC8vIENvbXBhY3QgYnJhbmNoIGlmIHdlIGNh
bi4uLgorICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5Db21wYWN0KGp1bXBzVG9M
aW5rW2ldLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBTdGVwIGJhY2sgaW4gdGhlIHdy
aXRlIHN0cmVhbQorICAgICAgICAgICAgICAgIGludDMyX3QgZGVsdGEgPSBNYWNyb0Fzc2VtYmxl
cjo6anVtcFNpemVEZWx0YShqdW1wc1RvTGlua1tpXS50eXBlKCksIGp1bXBMaW5rVHlwZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlUHRy
IC09IGRlbHRhOworICAgICAgICAgICAgICAgICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fzc2Vt
YmxlclN0b3JhZ2UsIGp1bXBzVG9MaW5rW2ldLmZyb20oKSAtIGRlbHRhLCByZWFkUHRyLCByZWFk
UHRyIC0gd3JpdGVQdHIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGp1bXBzVG9MaW5rW2ldLnNldEZyb20od3JpdGVQdHIpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGp1bXBDb3VudDsgKytp
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghTWFjcm9Bc3NlbWJsZXI6OmNhbkNvbXBh
Y3QoanVtcHNUb0xpbmtbaV0udHlwZSgpKSk7CiAgICAgICAgIH0KLSAgICAgICAganVtcHNUb0xp
bmtbaV0uc2V0RnJvbSh3cml0ZVB0cik7CiAgICAgfQogICAgIC8vIENvcHkgZXZlcnl0aGluZyBh
ZnRlciB0aGUgbGFzdCBqdW1wCiAgICAgbWVtY3B5KG91dERhdGEgKyB3cml0ZVB0ciwgaW5EYXRh
ICsgcmVhZFB0ciwgbV9pbml0aWFsU2l6ZSAtIHJlYWRQdHIpOwpAQCAtMTYyLDkgKzE3MCwxNyBA
QCB2b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgfQogCiAgICAg
anVtcHNUb0xpbmsuY2xlYXIoKTsKLSAgICBzaHJpbmsod3JpdGVQdHIgKyBtX2luaXRpYWxTaXpl
IC0gcmVhZFB0cik7CiAKLSAgICBwZXJmb3JtSklUTWVtY3B5KG1fY29kZSwgb3V0QnVmZmVyLmJ1
ZmZlcigpLCBtX3NpemUpOworICAgIHNpemVfdCBjb21wYWN0U2l6ZSA9IHdyaXRlUHRyICsgbV9p
bml0aWFsU2l6ZSAtIHJlYWRQdHI7CisgICAgaWYgKG1fZXhlY3V0YWJsZU1lbW9yeSkgeworICAg
ICAgICBtX3NpemUgPSBjb21wYWN0U2l6ZTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5LT5z
aHJpbmsobV9zaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzaXplX3Qgbm9wU2l6ZUluQnl0
ZXMgPSBtX2luaXRpYWxTaXplIC0gY29tcGFjdFNpemU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKG91dERhdGEgKyBjb21wYWN0U2l6ZSwgbm9wU2l6
ZUluQnl0ZXMpOworICAgIH0KKworICAgIHBlcmZvcm1KSVRNZW1jcHkobV9jb2RlLCBvdXREYXRh
LCBtX3NpemUpOwogCiAjaWYgRFVNUF9MSU5LX1NUQVRJU1RJQ1MKICAgICBkdW1wTGlua1N0YXRp
c3RpY3MobV9jb2RlLCBtX2luaXRpYWxTaXplLCBtX3NpemUpOwpAQCAtMTk4LDcgKzIxNCw3IEBA
IHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3NlbWJsZXIKICAgICBjb3B5Q29tcGFj
dEFuZExpbmtDb2RlPHVpbnQxNl90PihtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7
CiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4o
bWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOwotI2VuZGlmCisjZW5kaWYgLy8gIUVO
QUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogICAgIG1fbGlua1Rhc2tzID0gV1RGTW92ZShtYWNy
b0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CiB9CkBAIC0yMDYsNiArMjIyLDcgQEAgdm9pZCBMaW5r
QnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0
ZShzaXplX3QgaW5pdGlhbFNpemUsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7CiAgICAgaWYgKG1fY29kZSkgeworICAgICAgICAvLyBGSVhNRTosIHdoZW4g
d2UncmUgcGFzc2VkIGFuIGluaXRpYWxTaXplIDwgbV9zaXplLCB3ZSBzaG91bGQgbm9wIHNsZWQg
YXQgdGhlIGVuZC4KICAgICAgICAgaWYgKGluaXRpYWxTaXplID4gbV9zaXplKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKQEAgLTIyMywxNCArMjQwLDYgQEAgdm9pZCBMaW5rQnVmZmVy
OjphbGxvY2F0ZShzaXplX3QgaW5pdGlhbAogICAgIG1fZGlkQWxsb2NhdGUgPSB0cnVlOwogfQog
Ci12b2lkIExpbmtCdWZmZXI6OnNocmluayhzaXplX3QgbmV3U2l6ZSkKLXsKLSAgICBpZiAoIW1f
ZXhlY3V0YWJsZU1lbW9yeSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2l6ZSA9IG5ld1NpemU7
Ci0gICAgbV9leGVjdXRhYmxlTWVtb3J5LT5zaHJpbmsobV9zaXplKTsKLX0KLQogdm9pZCBMaW5r
QnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKCkKIHsKICAgICBmb3IgKGF1dG8mIHRhc2sgOiBt
X2xpbmtUYXNrcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlu
a0J1ZmZlci5oCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsK
ICAgICB9CiAKLSAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwg
dm9pZCogY29kZSwgc2l6ZV90IHNpemUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9IEpJ
VENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpCisgICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYg
bWFjcm9Bc3NlbWJsZXIsIHZvaWQqIGNvZGUsIHNpemVfdCBzaXplLCBKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZv
cm1CcmFuY2hDb21wYWN0aW9uID0gdHJ1ZSkKICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICNpZiBF
TkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgICAgICwgbV9pbml0aWFsU2l6ZSgwKQpAQCAt
MTA3LDYgKzEwNywxMSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCiAj
ZW5kaWYKICAgICB7CisjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQorICAgICAgICBtX3No
b3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uID0gc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rp
b247CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBh
Y3Rpb24pOworI2VuZGlmCiAgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCAwLCBlZmZv
cnQpOwogICAgIH0KIApAQCAtMjUwLDcgKzI1NSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fY29kZTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogdGhpcyBkb2VzIG5vdCBhY2NvdW50IGZv
ciB0aGUgQXNzZW1ibGVyRGF0YSBzaXplIQorICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IGFj
Y291bnQgZm9yIHRoZSBBc3NlbWJsZXJEYXRhIHNpemUgd2hlbiB3ZSdyZSBnZW5lcmF0aW5nIGlu
dG8gYWxyZWFkeSAKKyAgICAvLyBhbGxvY2F0ZWQgZXhlY3V0YWJsZSBtZW1vcnkuCiAgICAgc2l6
ZV90IHNpemUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc2l6ZTsKQEAgLTI4Niw3ICsyOTIs
NiBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICB2b2lkIGFsbG9jYXRlKHNpemVfdCBpbml0
aWFsU2l6ZSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAgICB2b2lk
IHNocmluayhzaXplX3QgbmV3U2l6ZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxp
bmtDb2RlKE1hY3JvQXNzZW1ibGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0KTsKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCkBAIC0zMDksNiArMzE0LDcgQEAg
cHJpdmF0ZToKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgc2l6ZV90IG1faW5p
dGlhbFNpemU7CiAgICAgQXNzZW1ibGVyRGF0YSBtX2Fzc2VtYmxlclN0b3JhZ2U7CisgICAgYm9v
bCBtX3Nob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uIHsgdHJ1ZSB9OwogI2VuZGlmCiAgICAg
Ym9vbCBtX2RpZEFsbG9jYXRlOwogICAgIHZvaWQqIG1fY29kZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShy
ZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4Nyw2ICszMDg3LDE0IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAocmVzdWx0KTsKICAgICB9CiAKKyAg
ICBQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbV9tYWtl
SnVtcFBhdGNoYWJsZSA9IHRydWU7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoMzIoY29u
ZCwgbGVmdCwgaW1tKTsKKyAgICAgICAgbV9tYWtlSnVtcFBhdGNoYWJsZSA9IGZhbHNlOworICAg
ICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChyZXN1bHQpOworICAgIH0KKwogICAgIFBhdGNoYWJs
ZUp1bXAgcGF0Y2hhYmxlQnJhbmNoNjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIHJlZywgVHJ1c3RlZEltbTY0IGltbSkKICAgICB7CiAgICAgICAgIG1fbWFrZUp1bXBQYXRj
aGFibGUgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODY4LDYgKzE4NjgsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gUGF0
Y2hhYmxlSnVtcChyZXN1bHQpOwogICAgIH0KIAorICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxl
QnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJ
bW0zMiBpbW0pCisgICAgeworICAgICAgICBtX21ha2VKdW1wUGF0Y2hhYmxlID0gdHJ1ZTsKKyAg
ICAgICAgSnVtcCByZXN1bHQgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBpbW0pOworICAgICAgICBt
X21ha2VKdW1wUGF0Y2hhYmxlID0gZmFsc2U7CisgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1w
KHJlc3VsdCk7CisgICAgfQorCiAgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2hQdHJX
aXRoUGF0Y2goUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIERhdGFMYWJl
bFB0ciYgZGF0YUxhYmVsLCBUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gVHJ1c3Rl
ZEltbVB0cigwKSkKICAgICB7CiAgICAgICAgIG1fbWFrZUp1bXBQYXRjaGFibGUgPSB0cnVlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzksNiArNDM5LDkgQEAgdm9pZCBDb2RlQmxvY2s6
OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6
CiAgICAgICAgICAgICBvdXQucHJpbnRmKCJ1bnNldCIpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIkFycmF5TGVuZ3RoIik7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJK
U0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZvaWQgZHVtcENhY2hlU2l6ZXNBbmRD
cmFzaChWTSYgdm0pCit7CisgICAgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBH
UFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IEpTVmFsdWVSZWdzIHJlZ3MoYmFzZSwgdmFsdWUpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBy
ZWdzKGJhc2UpOworI2VuZGlmCisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZt
KTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHZhbHVlOworICAgICAgICBqaXQubG9h
ZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLCB2YWx1ZSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CisgICAgICAgIGppdC5wYXRj
aGFibGVCcmFuY2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHZhbHVl
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGlndW91c1NoYXBlKSk7
CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgdmFs
dWUpOworICAgICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQUiwgcmVncyk7CisKKyAgICAgICAg
ZGF0YUxvZygiYXJyYXkgbGVuZ3RoIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5j
b2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBq
aXQoJnZtKTsKKworICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOworICAgICAgICBqaXQubG9h
ZFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgdmFsdWUpOworICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUiA9IHZhbHVlOworICAgICAgICBqaXQubG9hZFZhbHVlKAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIDB4MDAwYWIyMWNhKSwgcmVncyk7CisK
KyAgICAgICAgZGF0YUxvZygib3V0IG9mIGxpbmUgb2Zmc2V0IGNhY2hlIHNpemU6ICIsIGppdC5t
X2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBqaXQucGF0Y2hhYmxlQnJh
bmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAwMGFiMjFj
YSkpOworICAgICAgICBqaXQubG9hZFZhbHVlKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZSwgMHgwMDBhYjIxY2EpLCByZWdzKTsKKworICAgICAgICBkYXRhTG9nKCJp
bmxpbmUgb2Zmc2V0IGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2Rl
U2l6ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQo
JnZtKTsKKworICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOworCisgICAgICAgIGppdC5zdG9y
ZVZhbHVlKAorICAgICAgICAgICAgcmVncywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwg
MHgwMDBhYjIxY2EpKTsKKworICAgICAgICBkYXRhTG9nKCJyZXBsYWNlIGNhY2hlIHNpemU6ICIs
IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBqaXQucGF0Y2hh
YmxlQnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAw
MGFiMjFjYSkpOworCisgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgaml0
LnN0b3JlVmFsdWUoCisgICAgICAgICAgICByZWdzLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZSwgMTIwMzQyKSk7CisKKyAgICAgICAgZGF0YUxvZygicmVwbGFjZSBv
dXQgb2YgbGluZSBjYWNoZSBzaXplOiAiLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNp
emUoKSwgIlxuIik7CisgICAgfQorCisgICAgQ1JBU0goKTsKK30KKworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rpb24+CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGxpbmtJbmxpbmVPckdv
VG9TbG93UGF0aChjb25zdCBjaGFyKiBuYW1lLCBDQ2FsbEhlbHBlcnMmIGppdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgY29u
c3QgYm9vbCBzaG91bGREdW1wQ2FjaGVTaXplc0FuZENyYXNoID0gZmFsc2U7CisgICAgaWYgKHNo
b3VsZER1bXBDYWNoZVNpemVzQW5kQ3Jhc2gpCisgICAgICAgIGR1bXBDYWNoZVNpemVzQW5kQ3Jh
c2goKmppdC52bSgpKTsKKworICAgIGlmIChqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNp
emUoKSA8PSBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplKSB7CisgICAgICAgIHdoaWxlIChqaXQu
bV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSA8IHN0dWJJbmZvLnBhdGNoLmlubGluZVNp
emUpCisgICAgICAgICAgICBqaXQubm9wKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0
Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPT0gc3R1YkluZm8ucGF0Y2guaW5saW5l
U2l6ZSk7CisgICAgICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7CisgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnBhdGNoLnN0YXJ0LmRhdGFM
b2NhdGlvbigpLCBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplLCBKSVRDb21waWxhdGlvbk11c3RT
dWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOworICAgICAgICBmdW5jdGlvbihsaW5rQnVm
ZmVyKTsKKyAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIklubGluZUFjY2Vzc1R5
cGU6ICclcyciLCBuYW1lKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBi
b29sIGZhaWxJZkNhbnRJbmxpbmUgPSBmYWxzZTsKKyAgICBpZiAoZmFpbElmQ2FudElubGluZSkg
eworICAgICAgICBkYXRhTG9nKCJGYWlsdXJlIGZvcjogIiwgbmFtZSwgIlxuIik7CisgICAgICAg
IGRhdGFMb2coInJlYWwgc2l6ZTogIiwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXpl
KCksICIgaW5saW5lIHNpemU6Iiwgc3R1YkluZm8ucGF0Y2guaW5saW5lU2l6ZSwgIlxuIik7Cisg
ICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzIHJlcGxhY2VtZW50SklU
KGppdC52bSgpKTsKKyAgICBhdXRvIGp1bXBUb1Nsb3dQYXRoID0gcmVwbGFjZW1lbnRKSVQuanVt
cCgpOworICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBiZWNhdXNlIG5vYm9keSBzaG91
bGQganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCisgICAgUkVMRUFTRV9BU1NFUlQocmVw
bGFjZW1lbnRKSVQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSA8IHN0dWJJbmZvLnBh
dGNoLmlubGluZVNpemUpOworICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7
CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHJlcGxhY2VtZW50SklULCBzdHViSW5mby5wYXRj
aC5zdGFydC5kYXRhTG9jYXRpb24oKSwgcmVwbGFjZW1lbnRKSVQubV9hc3NlbWJsZXIuYnVmZmVy
KCkuY29kZVNpemUoKSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbmVlZHNCcmFuY2hDb21w
YWN0aW9uKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvU2xvd1BhdGgsIHN0dWJJbmZvLnNs
b3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKKworICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
KCJJbmxpbmVBY2Nlc3MgbGlua2luZyBhIGp1bXAgdG8gc2xvdyBwYXRoIGJlY2F1c2Ugd2UgcmFu
IG91dCBvZiByb29tIGlubGluZSIpKTsKK30KKwordm9pZCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
UHJvcGVydHlBY2Nlc3MoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdCgmdm0pOworCisgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8u
dmFsdWVSZWdzKCk7CisKKyAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQucGF0Y2hhYmxl
QnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KHN0cnVjdHVyZS0+aWQoKSkpKTsKKyAgICBHUFJSZWcgc3RvcmFnZTsKKyAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgc3RvcmFnZSA9IGJhc2U7CisgICAgZWxzZSB7
CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdG9y
YWdlID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgIH0KKworICAgIGppdC5sb2FkVmFsdWUoCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2UsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKG9mZnNldCkpLCB2YWx1ZSk7CisKKyAgICBsaW5rSW5saW5lT3JHb1RvU2xvd1BhdGgoInBy
b3BlcnR5IGFjY2VzcyIsIGppdCwgc3R1YkluZm8sIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoYnJhbmNoVG9TbG93UGF0aCwgc3R1YkluZm8u
c2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOworICAgIH0pOworfQorCitBTFdBWVNfSU5MSU5FIHN0
YXRpYyBHUFJSZWcgZ2V0U2NyYXRjaFJlZ2lzdGVyKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBh
dGNoLnVzZWRSZWdpc3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUikpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guYmFzZVRhZ0dQUikpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpKTsKKyNlbmRpZgorICAgIEdQUlJlZyBzY3JhdGNo
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIGlmIChhbGxvY2F0b3IuZGlk
UmV1c2VSZWdpc3RlcnMoKSkKKyAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgcmV0
dXJuIHNjcmF0Y2g7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lz
dGVyKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXR1cm4gZ2V0U2NyYXRj
aFJlZ2lzdGVyKHN0dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOworfQorCitib29sIElubGluZUFj
Y2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGlmIChpc0lubGluZU9mZnNl
dChvZmZzZXQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBoYXNGcmVlUmVn
aXN0ZXIoc3R1YkluZm8pOworfQorCit2b2lkIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJv
cGVydHlSZXBsYWNlKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIEFTU0VSVChjYW5H
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworCisgICAgQ0Nh
bGxIZWxwZXJzIGppdCgmdm0pOworCisgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1
YkluZm8udmFsdWVSZWdzKCk7CisKKyAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQucGF0
Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSkpKTsKKworICAgIEdQUlJlZyBzdG9yYWdlOworICAg
IGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICBzdG9yYWdlID0gYmFzZTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgc3RvcmFnZSA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbyk7
CisgICAgICAgIEFTU0VSVChzdG9yYWdlICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc3RvcmFnZSk7CisgICAgfQorCisgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAg
IHZhbHVlLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShvZmZzZXQpKSk7CisKKyAgICBsaW5rSW5saW5lT3JHb1RvU2xvd1BhdGgoInByb3BlcnR5
IHJlcGxhY2UiLCBqaXQsIHN0dWJJbmZvLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgbGlua0J1ZmZlci5saW5rKGJyYW5jaFRvU2xvd1BhdGgsIHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbigpKTsKKyAgICB9KTsKK30KKworYm9vbCBJbmxpbmVBY2Nlc3M6Omlz
Q2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5
KiBhcnJheSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJ
c0FycmF5KTsKKworICAgIGlmICghaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGFycmF5LT5pbmRleGluZ1R5cGUoKSA9PSBBcnJh
eVdpdGhJbnQzMgorICAgICAgICB8fCBhcnJheS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRo
RG91YmxlCisgICAgICAgIHx8IGFycmF5LT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250
aWd1b3VzOworfQorCit2b2lkIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChWTSYg
dm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywgYXJyYXkpKTsK
KworICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2
YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOworICAgIEdQUlJlZyBzY3JhdGNoID0gZ2V0U2Ny
YXRjaFJlZ2lzdGVyKHN0dWJJbmZvKTsKKworICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdT
aGFwZU1hc2spLCBzY3JhdGNoKTsKKyAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQucGF0
Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5cGUoKSkpOworICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSksIHZhbHVlLnBheWxvYWRHUFIoKSk7CisgICAgaml0LmJveEludDMyKHZhbHVlLnBh
eWxvYWRHUFIoKSwgdmFsdWUpOworCisgICAgbGlua0lubGluZU9yR29Ub1Nsb3dQYXRoKCJhcnJh
eSBsZW5ndGgiLCBqaXQsIHN0dWJJbmZvLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgbGlua0J1ZmZlci5saW5rKGJyYW5jaFRvU2xvd1BhdGgsIHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbigpKTsKKyAgICB9KTsKK30KKwordm9pZCBJbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXAoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVM
b2NhdGlvbkxhYmVsIHRhcmdldCkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAg
ICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBz
bGVkIGhlcmUgYmVjYXVzZSBub2JvZHkgc2hvdWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxl
IG9mIGFuIElDLgorICAgIFJFTEVBU0VfQVNTRVJUKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5j
b2RlU2l6ZSgpIDwgc3R1YkluZm8ucGF0Y2guaW5saW5lU2l6ZSk7CisgICAgYm9vbCBuZWVkc0Jy
YW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBz
dHViSW5mby5wYXRjaC5zdGFydC5kYXRhTG9jYXRpb24oKSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZl
cigpLmNvZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29t
cGFjdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIHRhcmdldCk7CisKKyAgICBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSW5saW5lQWNjZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1
bXAiKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmxpbmVBY2Nlc3NfaAorI2Rl
ZmluZSBJbmxpbmVBY2Nlc3NfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVM
b2NhdGlvbi5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU0FycmF5OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlU3R1
YkluZm87CitjbGFzcyBWTTsKKworY2xhc3MgSW5saW5lQWNjZXNzIHsKK3B1YmxpYzoKKworICAg
IC8vIFdlIHVzZSBzaXplIHRoZSBmb3Igb3V0IG9mIGxpbmUgb2Zmc2V0cyBiZWNhdXNlIHRoYXQn
cyBsYXJnZXIuCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZUZvclByb3BlcnR5QWNj
ZXNzKCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDIzOworI2VsaWYg
Q1BVKFg4NikKKyAgICAgICAgcmV0dXJuIDI3OworI2VsaWYgQ1BVKEFSTTY0KQorICAgICAgICBy
ZXR1cm4gNDA7CisjZWxpZiBDUFUoQVJNKQorI2lmIENQVShBUk1fVEhVTUIyKQorICAgICAgICBy
ZXR1cm4gNDg7CisjZWxzZQorICAgICAgICByZXR1cm4gNTA7CisjZW5kaWYKKyNlbHNlCisjZXJy
b3IgInVuc3VwcG9ydGVkIHBsYXRmb3JtIgorI2VuZGlmCisgICAgfQorCisgICAgLy8gV2UgdXNl
IHNpemUgdGhlIGZvciBvdXQgb2YgbGluZSBvZmZzZXRzIGJlY2F1c2UgdGhhdCdzIGxhcmdlci4K
KyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzaXplRm9yUHJvcGVydHlSZXBsYWNlKCkKKyAg
ICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDIzOworI2VsaWYgQ1BVKFg4NikK
KyAgICAgICAgcmV0dXJuIDI3OworI2VsaWYgQ1BVKEFSTTY0KQorICAgICAgICByZXR1cm4gNDA7
CisjZWxpZiBDUFUoQVJNKQorI2lmIENQVShBUk1fVEhVTUIyKQorICAgICAgICByZXR1cm4gNDg7
CisjZWxzZQorICAgICAgICByZXR1cm4gNTA7CisjZW5kaWYKKyNlbHNlCisjZXJyb3IgInVuc3Vw
cG9ydGVkIHBsYXRmb3JtIgorI2VuZGlmCisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3Qgc2l6ZUZvckxlbmd0aEFjY2VzcygpCisgICAgeworI2lmIENQVShYODZfNjQpCisgICAg
ICAgIHJldHVybiAyNjsKKyNlbGlmIENQVShYODYpCisgICAgICAgIHJldHVybiAyNzsKKyNlbGlm
IENQVShBUk02NCkKKyAgICAgICAgcmV0dXJuIDMyOworI2VsaWYgQ1BVKEFSTSkKKyNpZiBDUFUo
QVJNX1RIVU1CMikKKyAgICAgICAgcmV0dXJuIDMwOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIDUw
OworI2VuZGlmCisjZWxzZQorI2Vycm9yICJ1bnN1cHBvcnRlZCBwbGF0Zm9ybSIKKyNlbmRpZgor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvcGVydHlBY2Nlc3MoVk0mLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMg
Ym9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQ
cm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7
CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5m
byYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFZNJiwg
U3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1
YkFzSnVtcChWTSYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWwpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYg
Ly8gSW5saW5lQWNjZXNzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjAyMTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1MSwxMSArMTU1MSw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9s
eW1vcnBoaWNBY2Nlc3MKICAgICBzdGF0ZS5pZGVudCA9ICZpZGVudDsKICAgICAKICAgICBzdGF0
ZS5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsK
LSAgICBzdGF0ZS52YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BS
KSwKLSNlbmRpZgotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZh
bHVlR1BSKSk7CisgICAgc3RhdGUudmFsdWVSZWdzID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAK
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVz
ZWRSZWdpc3RlcnMpOwogICAgIHN0YXRlLmFsbG9jYXRvciA9ICZhbGxvY2F0b3I7CkBAIC0xNzUz
LDE0ICsxNzQ5LDExIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MK
ICAgICAgICAgcmV0dXJuIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdhdmVVcDsKICAgICB9CiAK
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPQotICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0RvbmUpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmRv
bmVMb2NhdGlvbigpOwogICAgICAgICAKICAgICBsaW5rQnVmZmVyLmxpbmsoc3RhdGUuc3VjY2Vz
cywgc3VjY2Vzc0xhYmVsKTsKIAotICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgZmFpbHVy
ZSwKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgIGxpbmtCdWZmZXIubGluayhm
YWlsdXJlLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiAgICAgCiAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIiAiLCBzdHViSW5mby5jb2Rl
T3JpZ2luLCAiOiBHZW5lcmF0aW5nIHBvbHltb3JwaGljIGFjY2VzcyBzdHViIGZvciAiLCBsaXN0
RHVtcChjYXNlcyksICJcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
R2V0QnlJZFNlbGYoCiAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CiB9CiAKK3ZvaWQg
U3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxlbmd0aCgpCit7CisgICAgY2FjaGVUeXBlID0g
Q2FjaGVUeXBlOjpBcnJheUxlbmd0aDsKK30KKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBjYWNoZVR5cGUgPSBD
YWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOwpAQCAtODcsNiArOTIsNyBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgIGNhc2Ug
Q2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxh
Y2U6CisgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xMDIsNiArMTA4LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWJvdXRU
b0RpZSgpCiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgIGNhc2UgQ2FjaGVUeXBlOjpH
ZXRCeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0y
NTcsNiArMjY0LDcgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdAog
ewogICAgIHN3aXRjaCAoY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0Ogor
ICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRC
eUlkUmVwbGFjZToKQEAgLTI3NSw2ICsyODMsNyBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpj
b250YWluc1BDKHZvaWQqCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdS5zdHVi
LT5jb250YWluc1BDKHBjKTsKIH0KLSNlbmRpZgorCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDcgKzU3LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAg
IFVuc2V0LAogICAgIEdldEJ5SWRTZWxmLAogICAgIFB1dEJ5SWRSZXBsYWNlLAotICAgIFN0dWIK
KyAgICBTdHViLAorICAgIEFycmF5TGVuZ3RoCiB9OwogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
byB7CkBAIC02OCw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICB+U3RydWN0dXJlU3R1YkluZm8oKTsK
IAogICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKENvZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9i
amVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQpOworICAgIHZvaWQgaW5pdEFycmF5TGVuZ3Ro
KCk7CiAgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlKiBi
YXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBpbml0U3R1YihD
b2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+KTsKIApAQCAtMTQz
LDEzICsxNDUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CisgICAgYm9vbCBjb250YWlu
c1BDKHZvaWQqIHBjKSBjb25zdDsKIAogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7CiAKLSAgICBib29sIGNvbnRhaW5zUEModm9pZCog
cGMpIGNvbnN0OwotCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkBAIC0xNjUs
MjUgKzE2NSwzOSBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlU2V0IGJ1ZmZlcmVkU3RydWN0dXJl
czsKICAgICAKICAgICBzdHJ1Y3QgeworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydDsg
Ly8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNh
Y2hlcywgb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW4nIGNhY2hlcy4K
KyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgdWludDMyX3QgaW5s
aW5lU2l6ZTsKKyAgICAgICAgaW50MzJfdCBkZWx0YUZyb21TdGFydFRvQ2FsbExvY2F0aW9uOwor
ICAgICAgICBpbnQzMl90IGRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0OworCiAgICAgICAg
IGludDhfdCBiYXNlR1BSOworICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7CiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICAgICAgaW50OF90IHZhbHVlVGFnR1BSOwogICAgICAgICBpbnQ4X3QgYmFz
ZVRhZ0dQUjsKICNlbmRpZgotICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7Ci0gICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnM7Ci0gICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9Eb25lOwot
ICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvSnVtcDsKLSAgICAgICAgaW50MzJfdCBkZWx0YUNh
bGxUb1Nsb3dDYXNlOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOwot
I2Vsc2UKLSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlOwotICAgICAg
ICBpbnQzMl90IGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlOwotI2VuZGlmCiAgICAgfSBw
YXRjaDsKIAorICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uKCkgeyByZXR1
cm4gcGF0Y2guc3RhcnQuY2FsbEF0T2Zmc2V0KHBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9DYWxsTG9j
YXRpb24pOyB9CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZUxvY2F0aW9uKCkgeyByZXR1cm4g
cGF0Y2guc3RhcnQubGFiZWxBdE9mZnNldChwYXRjaC5pbmxpbmVTaXplKTsgfQorICAgIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0
LmxhYmVsQXRPZmZzZXQocGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9Cisg
ICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wRm9ySW4oKQorICAgIHsgCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6SW4pOworICAgICAgICBy
ZXR1cm4gcGF0Y2guc3RhcnQuanVtcEF0T2Zmc2V0KDApOworICAgIH0KKworICAgIEpTVmFsdWVS
ZWdzIHZhbHVlUmVncygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3Mo
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4o
cGF0Y2gudmFsdWVUYWdHUFIpLAorI2VuZGlmCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHBhdGNoLnZhbHVlR1BSKSk7CisgICAgfQorCisKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGU7CiAgICAgQ2FjaGVUeXBlIGNhY2hlVHlwZTsKICAgICB1aW50OF90IGNvdW50ZG93bjsgLy8g
V2UgcmVwYXRjaCBvbmx5IHdoZW4gdGhpcyBpcyB6ZXJvLiBJZiBub3QgemVybywgd2UgZGVjcmVt
ZW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsMTEgKzI1OCwyMCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9pbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IGluZm8gPSAqbV9pbnNbaV0ubV9zdHViSW5mbzsKLSAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93
UGF0aEdlbmVyYXRvci0+Y2FsbCgpKTsKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9kb25lKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGVs
dGFDYWxsVG9KdW1wID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fanVtcCkpOwotICAgICAgICBpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICAgICAgaW5mby5w
YXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fc2xvd1BhdGhH
ZW5lcmF0b3ItPmxhYmVsKCkpKTsKKworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2p1bXApOworICAgICAgICBpbmZvLnBh
dGNoLnN0YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAgcHRyZGlmZl90IGlubGluZVNpemUgPSBNYWNy
b0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICAgICAgc3RhcnQs
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2RvbmUpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaW5saW5lU2l6ZSA+PSAwKTsKKyAgICAgICAgaW5mby5wYXRjaC5pbmxpbmVTaXpl
ID0gaW5saW5lU2l6ZTsKKworICAgICAgICBpbmZvLnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9DYWxs
TG9jYXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAg
ICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRo
R2VuZXJhdG9yLT5jYWxsKCkpKTsKKworICAgICAgICBpbmZvLnBhdGNoLmRlbHRhRnJvbVN0YXJ0
VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9z
bG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOwogICAgIH0KICAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw4ICsxODYsNyBAQCB2
b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICAgICAg
ICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kU3R1YkluZm8oQ29kZU9yaWdpbihj
YWxsQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvKTsKIAotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAg
ICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVz
cygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw5ICsxOTcsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKAogICAgIAogICAgIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFu
ZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2Rl
T3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCB0eXBlKTsKKyAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCksIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBpZGVudGlmaWVyVUlE
KGlkZW50aWZpZXJOdW1iZXIpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JOb25l
LCBiYXNlUGF5bG9hZEdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9h
ZEdQUiksIHR5cGUpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICAgICAgdXNl
ZFJlZ2lzdGVycy5zZXQocmVzdWx0R1BSLCBmYWxzZSk7CiAgICAgfQogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCB0eXBlKTsKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNv
ZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBpZGVudGlmaWVyVUlEKGlkZW50aWZp
ZXJOdW1iZXIpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgdHlwZSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwogICAgIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDIxNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxODMsMjEgKzYxODMsMTkgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5M
b2NhdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aENhbGwpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNo
LmRlbHRhQ2FsbFRvSnVtcCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9u
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsUmV0dXJuTG9j
YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhCZWdpbikpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGp1bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5l
U2l6ZSA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby0+cGF0Y2guaW5saW5lU2l6ZSA9IGlubGluZVNpemU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb0Nh
bGxMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhDYWxsKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRo
U3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHNsb3dQYXRoQmVnaW4pKTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0pOwpAQCAtNzYxNiw3ICs3NjE0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAg
ICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVEdldEJ5SWRHZW5lcmF0b3I+OjpjcmVhdGUo
CiAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgbm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjYWxsU2l0ZUluZGV4LAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHVpZCwgSlNWYWx1ZVJlZ3Mo
cGFyYW1zWzFdLmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1z
WzBdLmdwcigpKSwgdHlwZSk7CiAKICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmdlbmVyYXRl
RmFzdFBhdGgoaml0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksOCArMjksOSBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiSW5saW5lQWNj
ZXNzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY5
LDI1ICs3MCwxOSBAQCBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogCiB2b2lk
IEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVm
ZmVyJiBzbG93UGF0aCkKIHsKLSAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlv
biA9IHNsb3dQYXRoLmxvY2F0aW9uT2YobV9jYWxsKTsKLSAgICBtX3N0dWJJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgbV9zdHViSW5mby0+cGF0Y2gu
ZGVsdGFDaGVja0ltbVRvQ2FsbCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoCi0gICAgICAgIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVJbW0pLCBjYWxs
UmV0dXJuTG9jYXRpb24pOwotICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0cnVjdHVyZUNoZWNrKSk7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0xvYWRP
clN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAg
ICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUp
KTsKLSNlbHNlCi0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9y
ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNh
bGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3RhZ0xvYWRPclN0b3JlKSk7
Ci0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0
dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOwotI2VuZGlm
Ci0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlv
biwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4pKTsKLSAgICBtX3N0dWJJbmZv
LT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9u
T2YobV9kb25lKSk7CisgICAgQVNTRVJUKG1fc3RhcnQuaXNTZXQoKSk7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWwgc3RhcnQgPSBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fc3RhcnQpOworICAgIG1fc3R1
YkluZm8tPnBhdGNoLnN0YXJ0ID0gc3RhcnQ7CisKKyAgICBpbnQzMl90IGlubGluZVNpemUgPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBzdGFydCwg
ZmFzdFBhdGgubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICBBU1NFUlQoaW5saW5lU2l6ZSA+IDAp
OworICAgIG1fc3R1YkluZm8tPnBhdGNoLmlubGluZVNpemUgPSBpbmxpbmVTaXplOworCisgICAg
bV9zdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb0NhbGxMb2NhdGlvbiA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIHN0YXJ0LCBzbG93UGF0
aC5sb2NhdGlvbk9mKG1fc2xvd1BhdGhDYWxsKSk7CisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVs
dGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKAorICAgICAgICBzdGFydCwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Nsb3dQ
YXRoQmVnaW4pKTsKIH0KIAogdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKQpAQCAtOTUsMzggKzkwLDI5IEBAIHZvaWQgSklUQnlJZEdlbmVyYXRv
cjo6ZmluYWxpemUoTGlua0J1ZmYKICAgICBmaW5hbGl6ZShsaW5rQnVmZmVyLCBsaW5rQnVmZmVy
KTsKIH0KIAotdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKE1h
Y3JvQXNzZW1ibGVyJiBqaXQpCit2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdENv
bW1vbihNYWNyb0Fzc2VtYmxlciYgaml0LCBzaXplX3QgaW5saW5lSUNTaXplKQogewotICAgIG1f
c3RydWN0dXJlQ2hlY2sgPSBqaXQucGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9iYXNlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAg
ICAgICAgbV9zdHJ1Y3R1cmVJbW0sIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpOwor
ICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBzaXplX3Qgc3RhcnRTaXplID0gaml0Lm1f
YXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCk7CisgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQu
anVtcCgpOworICAgIHdoaWxlIChqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSAt
IHN0YXJ0U2l6ZSA8IGlubGluZUlDU2l6ZSkKKyAgICAgICAgaml0Lm5vcCgpOworICAgIEFTU0VS
VChqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSAtIHN0YXJ0U2l6ZSA9PSBpbmxp
bmVJQ1NpemUpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwogfQogCiBKSVRHZXRCeUlkR2Vu
ZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAotICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9yKAot
ICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2Vk
UmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSkKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlKQorICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNh
bGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSkKKyAgICAsIG1f
aXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lID09IGNvZGVCbG9jay0+dm0oKS0+cHJvcGVydHlO
YW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRH
UFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CiAKIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewotICAgIGdlbmVyYXRlRmFz
dFBhdGhDaGVja3Moaml0KTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1fbG9hZE9y
U3RvcmUgPSBqaXQubG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5wYXlsb2FkR1BSKCksIDApLCBtX3ZhbHVl
LnBheWxvYWRHUFIoKSkubGFiZWwoKTsKLSNlbHNlCi0gICAgbV90YWdMb2FkT3JTdG9yZSA9IGpp
dC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgMCksIG1fdmFsdWUudGFnR1BSKCkp
LmxhYmVsKCk7Ci0gICAgbV9sb2FkT3JTdG9yZSA9IGppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJl
c3NPZmZzZXRQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLnBh
eWxvYWRHUFIoKSwgMCksIG1fdmFsdWUucGF5bG9hZEdQUigpKS5sYWJlbCgpOwotI2VuZGlmCi0g
ICAgCi0gICAgbV9kb25lID0gaml0LmxhYmVsKCk7CisgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGpp
dCwgbV9pc0xlbmd0aEFjY2VzcyA/IElubGluZUFjY2Vzczo6c2l6ZUZvckxlbmd0aEFjY2Vzcygp
IDogSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKIEpJVFB1dEJ5
SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCkBAIC0xNDMsMTkgKzEyOSw3IEBAIEpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IKIAogdm9pZCBKSVRQdXRCeUlk
R2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7Ci0gICAg
Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyhqaXQpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgbV9sb2FkT3JTdG9yZSA9IGppdC5zdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAg
ICAgICAgbV92YWx1ZS5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFz
ZS5wYXlsb2FkR1BSKCksIDApKS5sYWJlbCgpOwotI2Vsc2UKLSAgICBtX3RhZ0xvYWRPclN0b3Jl
ID0gaml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKAotICAgICAgICBtX3ZhbHVlLnRh
Z0dQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSku
bGFiZWwoKTsKLSAgICBtX2xvYWRPclN0b3JlID0gaml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKAotICAgICAgICBtX3ZhbHVlLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgMCkpLmxhYmVsKCk7Ci0jZW5kaWYKLSAgICAKLSAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKKyAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxp
bmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eVJlcGxhY2UoKSk7CiB9CiAKIFZfSklUT3BlcmF0aW9u
X0VTc2lKSkkgSklUUHV0QnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbigpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDMwICs2OCwzMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZXBvcnRTbG93UGF0aENhbGwoTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IHNsb3dQYXRoQmVnaW4sIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCiAgICAgewogICAgICAg
ICBtX3Nsb3dQYXRoQmVnaW4gPSBzbG93UGF0aEJlZ2luOwotICAgICAgICBtX2NhbGwgPSBjYWxs
OworICAgICAgICBtX3Nsb3dQYXRoQ2FsbCA9IGNhbGw7CiAgICAgfQogICAgIAogICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UGF0
aEJlZ2luOyB9Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzbG93UGF0aEp1bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2xvd1Bh
dGhKdW1wLmlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zbG93UGF0aEp1bXA7CisgICAgfQog
CiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtC
dWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVy
Jik7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKE1h
Y3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUZhc3RDb21tb24oTWFjcm9Bc3NlbWJs
ZXImLCBzaXplX3Qgc2l6ZSk7CiAgICAgCiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpT
VmFsdWVSZWdzIG1fdmFsdWU7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMy
IG1fc3RydWN0dXJlSW1tOwotICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc3Ry
dWN0dXJlQ2hlY2s7Ci0gICAgQXNzZW1ibGVyTGFiZWwgbV9sb2FkT3JTdG9yZTsKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgIEFzc2VtYmxlckxhYmVsIG1fdGFnTG9hZE9yU3RvcmU7Ci0jZW5k
aWYKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVn
aW47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOworICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1Bh
dGhKdW1wOwogfTsKIAogY2xhc3MgSklUR2V0QnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRCeUlk
R2VuZXJhdG9yIHsKQEAgLTk5LDEwICs5OSwxMyBAQCBwdWJsaWM6CiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvcigpIHsgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJs
b2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBB
Y2Nlc3NUeXBlKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRl
eCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIFVuaXF1ZWRTdHJpbmdJbXBsKiBw
cm9wZXJ0eU5hbWUsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBBY2Nlc3NUeXBlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKKworcHJpdmF0ZToKKyAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CiB9OwogCiBj
bGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjky
LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdAogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3M6
OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlw
ZTo6R2V0KTsKKyAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBmYXN0RG9uZUNhc2Ug
PSBqdW1wKCk7CkBAIC01ODcsMTMgKzU4NywxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKEluc3RydWN0CiB7CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CiAgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAKICAgICBlbWl0TG9hZChiYXNl
LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBy
ZWdUMSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgoY3VycmVudElu
c3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
QWNjZXNzVHlwZTo6R2V0UHVyZSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKQEAgLTYzNCw3ICs2MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qCiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgoY3Vy
cmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOworICAgICAgICBpZGVudC0+aW1wbCgpLCBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBBY2Nlc3NUeXBlOjpHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsyMjIsNyBA
QCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CisgICAgICAgIHByb3BlcnR5
TmFtZS5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nl
c3NUeXBlOjpHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIAogICAgIGZh
c3REb25lQ2FzZSA9IGp1bXAoKTsKQEAgLTU3Miw2ICs1NzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKEluc3RydWN0CiB7CiAgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKIApAQCAtNTc5
LDcgKzU4MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3QKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0UHVyZSk7Cisg
ICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwpAQCAtNjIwLDcgKzYyMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZChJbnN0cnVjdGlvbioKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNj
ZXNzVHlwZTo6R2V0KTsKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2lu
Y2x1ZGUgIklDU3RhdHMuaCIKKyNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKICNpbmNsdWRlICJK
SVQuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgpA
QCAtOTAsOTUgKzkxLDYgQEAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2Rl
QgogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLCBuZXdDYWxsZWVGdW5jdGlv
bik7CiB9CiAKLXN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyJiBz
bG93UGF0aEZ1bmN0aW9uLAotICAgIGJvb2wgY29tcGFjdCkKLXsKLSAgICAvLyBPbmx5IG9wdGlt
aXplIG9uY2UhCi0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOwotCi0gICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVy
ZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hJbnQzMigKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
KSwKLSAgICAgICAgYml0d2lzZV9jYXN0PGludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSkpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGNvbXBhY3QpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKLSAgICBlbHNlCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMy
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJl
bGF0aXZlVG9CYXNlKG9mZnNldCkpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAo
Y29tcGFjdCkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zm
c2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9m
ZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvUGF5bG9hZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwot
ICAgIH0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCByZXNldEdldEJ5SURDaGVja0FuZExvYWQo
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
MzJXaXRoUGF0Y2goKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0
dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZv
LnBhdGNoLmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7
Ci0gICAgfQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWws
IHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
b21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlKSwgMCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgcmVzZXRQdXRCeUlE
Q2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFD
aGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
dmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25B
ZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51
c2VkUG9pbnRlcikpOwotICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0
cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JT
dG9yZSksIDApOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJn
ZXQpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0KTsKLSAgICAKLSAgICBpZiAoTWFjcm9B
c3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcygK
LSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJB
dE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5k
ZWx0YUNoZWNrSW1tVG9DYWxsKSksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJn
ZXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc2V0R2V0QnlJRENoZWNrQW5k
TG9hZChzdHViSW5mbyk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAot
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAg
ICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwodGFyZ2V0KSk7Ci19Ci0KIGVudW0gSW5saW5lQ2FjaGVBY3Rpb24gewogICAgIEdp
dmVVcE9uQ2FjaGUsCiAgICAgUmV0cnlDYWNoZUxhdGVyLApAQCAtMjQxLDkgKzE1MywyMiBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkgewotICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkp
CisgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgeworICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgJiYg
c2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQorICAgICAgICAgICAgICAgICYmICFzbG90Lndh
dGNocG9pbnRTZXQoKQorICAgICAgICAgICAgICAgICYmICFiYXNlVmFsdWUuYXNDZWxsKCktPnN0
cnVjdHVyZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAg
ICAmJiBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlVmFsdWUuYXNDZWxsKCkpID09IEF0dGVtcHRUb0Nh
Y2hlCisgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVu
Z3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSkpKSB7CisKKyAgICAgICAg
ICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAgICAg
ICAgICAgICAgIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCgqY29kZUJsb2NrLT52
bSgpLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlVmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVu
Z3RoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpKQorICAgICAgICB9
IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkKICAgICAgICAgICAgIG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U3RyaW5nTGVu
Z3RoKTsKICAgICAgICAgZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5
bmFtaWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIC8v
IElmIHRoZXJlIHdlcmUgb3ZlcnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBhcyBhIG5v
cm1hbCBwcm9wZXJ0eSBsb2FkISBHdWFyZGluZwpAQCAtMjc2LDIwICsyMDEsMjEgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICBJbmxpbmVDYWNoZUFj
dGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7CiAgICAgICAgIGlmIChh
Y3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCiAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCiAg
ICAgICAgIAogICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KICAgICAgICAgaWYgKHN0
dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAmJiBzbG90
LmlzQ2FjaGVhYmxlVmFsdWUoKQogICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJh
c2VWYWx1ZQogICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0gICAgICAgICAg
ICAmJiBpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAgICAgJiYg
TWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNl
dFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICAgICAgJiYgYWN0
aW9uID09IEF0dGVtcHRUb0NhY2hlCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVBy
b3h5KSB7CisKICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIHRydWUpOworCisgICAgICAgICAgICByZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBhcHByb3By
aWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVByb3BlcnR5QWNjZXNzKCpjb2RlQmxvY2stPnZtKCksIHN0dWJJbmZv
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgc3R1YkluZm8u
aW5pdEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KQEAgLTM3
MCw3ICsyOTYsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCgpLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1
YkluZm8sIHJlc3VsdC5jb2RlKCkpOworICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJB
c0p1bXAoZXhlYy0+dm0oKSwgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsKHJlc3VsdC5jb2Rl
KCkpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/
IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CkBAIC0zODIsNyArMzA4LDcgQEAgdm9p
ZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgIEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCku
aGVhcCk7CiAgICAgCiAgICAgaWYgKHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAg
ICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CisgICAgICAg
IHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24oKSwgYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKIH0KIAogc3Rh
dGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0
aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQpAQCAtNDMz
LDE2ICszNTksMTQgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAog
ICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICYmIGlzSW5saW5l
T2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAgJiYgTWFjcm9Bc3Nl
bWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpj
YW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRm9y
KGlkZW50LmltcGwoKSkpIHsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50KSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxm
QWNjZXNzKAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRl
T3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7CisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2Uodm0sIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShjb2RlQmxvY2ssIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKICAgICAgICAgICAgIH0KQEAgLTUyNCwxMSArNDQ4LDggQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OlB1dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7
CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAg
ICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0p1bXApLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkp
OworCisgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcCh2bSwgc3R1YkluZm8s
IENvZGVMb2NhdGlvbkxhYmVsKHJlc3VsdC5jb2RlKCkpKTsKICAgICB9CiAgICAgCiAgICAgcmV0
dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hl
TGF0ZXI7CkBAIC01NDAsNyArNDYxLDcgQEAgdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVgogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNv
ZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCiAgICAgaWYgKHRyeUNh
Y2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENh
bGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9w
cmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgcmVw
YXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigp
LCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogfQog
CiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKApAQCAtNTg2LDggKzUwNywx
MSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCkpOwogICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7
CisgICAgICAgIC8vIEZJWE1FOiBtYXliZSB3ZSBzaG91bGQganVzdCB1c2UgcmV3aXJlU3R1YkFz
SnVtcEhlcmU/CisgICAgICAgIC8vSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKCkKKwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksCisgICAgICAgICAgICBzdHViSW5mby5wYXRjaGFibGVKdW1wRm9ySW4oKSwKICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHJlc3VsdC5jb2RlKCkpKTsKICAgICB9CiAgICAg
CkBAIC02MDAsNyArNTI0LDcgQEAgdm9pZCByZXBhdGNoSW4oCiB7CiAgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIGlmICh0cnlSZXBhdGNoSW4oZXhl
YywgYmFzZSwgaWRlbnQsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNo
ZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uSW4pOworICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5j
b2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIG9wZXJhdGlvbkluKTsK
IH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYpCkBAIC05NzIsMTQgKzg5NiwxMyBA
QCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAKIHZvaWQgcmVzZXRHZXRCeUlEKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5SURLaW5kIGtp
bmQpCiB7Ci0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7Ci0gICAg
cmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAg
cmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICBJbmxpbmVBY2Nl
c3M6OnJld2lyZVN0dWJBc0p1bXAoKmNvZGVCbG9jay0+dm0oKSwgc3R1YkluZm8sIHN0dWJJbmZv
LnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKIH0KIAogdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBWX0pJ
VE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9K
SVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIFZfSklUT3BlcmF0
aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJh
dGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbigpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBWX0pJVE9wZXJhdGlvbl9F
U3NpSkpJIG9wdGltaXplZEZ1bmN0aW9uOwogICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwpAQCAtOTkxLDE0ICs5MTQsMTQgQEAgdm9pZCBy
ZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIAogICAgICAgICBBU1NFUlQodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
KTsKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CiAgICAgfQotICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgcmVzZXRQdXRC
eUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1
bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisKKyAgICByZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBvcHRpbWl6ZWRG
dW5jdGlvbik7CisgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKCpjb2RlQmxvY2st
PnZtKCksIHN0dWJJbmZvLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiB9CiAK
IHZvaWQgcmVzZXRJbihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5m
by5wYXRjaGFibGVKdW1wRm9ySW4oKSwgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281594</attachid>
            <date>2016-06-17 15:20:47 -0700</date>
            <delta_ts>2016-06-19 11:51:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>86461</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAyMTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBA
QAorMjAxNi0wNi0xNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBXZSBzaG91bGQgYmUgYWJsZSB0byBnZW5lcmF0ZSBtb3JlIHR5cGVzIG9mIElDcyBpbmxpbmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODcxOQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjY4MjU2NDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB3ZSBlbWl0
IGNvZGUgZm9yICpieUlkIElDcyBpbmxpbmUuCisgICAgICAgIFdlIG5vIGxvbmdlciBrZWVwIGRh
dGEgbGFiZWxzIHRvIHBhdGNoIHN0cnVjdHVyZSBjaGVja3MsIGV0Yy4KKyAgICAgICAgSW5zdGVh
ZCwgd2UganVzdCByZWdlbmVyYXRlIHRoZSBlbnRpcmUgSUMgaW50byBhIGRlc2lnbmF0ZWQKKyAg
ICAgICAgcmVnaW9uIG9mIGNvZGUgdGhhdCB0aGUgQmFzZWxpbmUvREZHL0ZUTCBKSVQgd2lsbCBl
bWl0IGlubGluZS4KKyAgICAgICAgVGhpcyBtYWtlcyBpdCBtdWNoIHNpbXBsZXIgdG8gcGF0Y2gg
aW5saW5lIElDcy4gQWxsIHRoYXQncworICAgICAgICBuZWVkZWQgdG8gcGF0Y2ggYW4gaW5saW5l
IElDIGlzIHRvIG1lbWNweSB0aGUgY29kZSBmcm9tCisgICAgICAgIGEgbWFjcm8gYXNzZW1ibGVy
IGlubGluZSB1c2luZyBMaW5rQnVmZmVyLgorCisgICAgICAgIFRvIHN1cHBvcnQgdGhpcyBjaGFu
Z2UsIEkndmUgcmV3b3JrZWQgdGhlIGZpZWxkcyBpbnNpZGUKKyAgICAgICAgU3RydWN0dXJlU3R1
YkluZm8uIEl0IG5vdyBoYXMgb25lIGZpZWxkIHRoYXQgaXMgdGhlIENvZGVMb2NhdGlvbkxhYmVs
IAorICAgICAgICBvZiB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQy4gVGhlbiBpdCBoYXMgYSBm
ZXcgaW50cyB0aGF0IHRyYWNrIGRlbHRhcworICAgICAgICB0byBvdGhlciBsb2NhdGlvbnMgaW4g
dGhlIElDIHN1Y2ggYXMgdGhlIHNsb3cgcGF0aCBzdGFydCwgc2xvdyBwYXRoIGNhbGwsIHRoZQor
ICAgICAgICBJQ3MgJ2RvbmUnIGxvY2F0aW9uLiBXZSB1c2VkIHRvIHBlcmZvcm0gbWF0aCBvbiB0
aGVzZSBpbnRzIGluIGEgYnVuY2ggb2YgZGlmZmVyZW50CisgICAgICAgIHBsYWNlcy4gSSd2ZSBj
b25zb2xpZGF0ZWQgdGhhdCBtYXRoIGludG8gbWV0aG9kcyBpbnNpZGUgU3RydWN0dXJlU3R1Yklu
Zm8uCisKKyAgICAgICAgVG8gZ2VuZXJhdGUgaW5saW5lIElDcywgSSd2ZSBpbXBsZW1lbnRlZCBh
IG5ldyBjbGFzcyBjYWxsZWQgSW5saW5lQWNjZXNzLgorICAgICAgICBJbmxpbmVBY2Nlc3MgaXMg
c3RhdGVsZXNzOiBpdCBqdXN0IGhhcyBhIGJ1bmNoIG9mIHN0YXRpYyBtZXRob2RzIGZvcgorICAg
ICAgICBnZW5lcmF0aW5nIGNvZGUgaW50byB0aGUgaW5saW5lIHJlZ2lvbiBzcGVjaWZpZWQgYnkg
U3RydWN0dXJlU3R1YkluZm8uCisgICAgICAgIFJlcGF0Y2ggd2lsbCBub3cgZGVjaWRlIHdoZW4g
aXQgd2FudHMgdG8gZ2VuZXJhdGUgc3VjaCBhbiBpbmxpbmUKKyAgICAgICAgSUMsIGFuZCBpdCB3
aWxsIGFzayBJbmxpbmVBY2Nlc3MgdG8gZG8gc28uCisKKyAgICAgICAgSSd2ZSBpbXBsZW1lbnRl
ZCB0aHJlZSB0eXBlcyBvZiBpbmxpbmUgSUNzIHRvIGJlZ2luIHdpdGggKGV4dGVuZGluZworICAg
ICAgICB0aGlzIGluIHRoZSBmdXR1cmUgc2hvdWxkIGJlIGVhc3kpOgorICAgICAgICAtIFNlbGYg
cHJvcGVydHkgbG9hZHMgKGJvdGggaW5saW5lIGFuZCBvdXQgb2YgbGluZSBvZmZzZXRzKS4KKyAg
ICAgICAgLSBTZWxmIHByb3BlcnR5IHJlcGxhY2UgKGJvdGggaW5saW5lIGFuZCBvdXQgb2YgbGlu
ZSBvZmZzZXRzKS4KKyAgICAgICAgLSBBcnJheSBsZW5ndGggb24gc3BlY2lmaWMgYXJyYXkgdHlw
ZXMuCisgICAgICAgIChBbiBlYXN5IGV4dGVuc2lvbiB3b3VsZCBiZSB0byBpbXBsZW1lbnQgSlNT
dHJpbmcgbGVuZ3RoLikKKworICAgICAgICBUbyBrbm93IGhvdyBtdWNoIGlubGluZSBzcGFjZSB0
byByZXNlcnZlLCBJJ3ZlIGltcGxlbWVudGVkIGEKKyAgICAgICAgbWV0aG9kIHRoYXQgc3R1YnMg
b3V0IHRoZSB2YXJpb3VzIGlubGluZSBjYWNoZSBzaGFwZXMgYW5kIAorICAgICAgICBkdW1wcyB0
aGVpciBzaXplLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHNwYWNlCisgICAg
ICAgIHRvIHNhdmUgaW5saW5lLiBXaGVuIElubGluZUFjY2VzcyBlbmRzIHVwIGdlbmVyYXRpbmcg
bW9yZQorICAgICAgICBjb2RlIHRoYW4gY2FuIGZpdCBpbmxpbmUsIGl0IHdpbGwgcmVwbGFjZSB0
aGUgZW50aXJlIElDIHdpdGgKKyAgICAgICAgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguIFRoaXMg
d2lsbCBjYXVzZSB0aGUgSUMgdG8gYmUgcmVnZW5lcmF0ZWQKKyAgICAgICAgYXMgYSBQb2x5bW9y
cGhpY0FjY2VzcyBsYXRlciBvbi4KKworICAgICAgICBUbyBtYWtlIGdlbmVyYXRpbmcgY29kZSBp
bnRvIGFscmVhZHkgYWxsb2NhdGVkIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGVmZmljaWVu
dCwgSSd2ZSBtYWRlIEFzc2VtYmxlckRhdGEgaGF2ZSAxMjggYnl0ZXMgb2YgaW5saW5lIHN0b3Jh
Z2UuCisgICAgICAgIFRoaXMgc2F2ZXMgdXMgYSBtYWxsb2Mgd2hlbiBzcGxhdHRpbmcgY29kZSBp
bnRvIHRoZSBpbmxpbmUgcmVnaW9uLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBhc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJs
ZXI6Om5vcCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpub3BQc2V1ZG8pOgorICAg
ICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6ZmlsbE5vcHMpOgorICAgICAgICAoSlNDOjpBUk12
N0Fzc2VtYmxlcjo6bm9wdyk6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmg6CisgICAgICAg
IChKU0M6OkFzc2VtYmxlckRhdGE6OkFzc2VtYmxlckRhdGEpOgorICAgICAgICAoSlNDOjpBc3Nl
bWJsZXJEYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJEYXRhOjp+QXNz
ZW1ibGVyRGF0YSk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckRhdGE6OmJ1ZmZlcik6CisgICAg
ICAgIChKU0M6OkFzc2VtYmxlckRhdGE6Omdyb3cpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJE
YXRhOjppc0lubGluZUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6QXNz
ZW1ibGVyQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpkZWJ1Z09mZnNl
dCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6cmVsZWFzZUFzc2VtYmxlckRhdGEp
OgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZm
ZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6YWxsb2NhdGUpOgorICAg
ICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKToKKyAgICAgICAgKEpT
Qzo6TGlua0J1ZmZlcjo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTGlu
a0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAg
ICAgKEpTQzo6TGlua0J1ZmZlcjo6ZGVidWdBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TGlua0J1
ZmZlcjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmNvZGUpOgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnBhdGNoYWJsZUJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6cGF0Y2hhYmxlQnJhbmNoNjQpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnBh
dGNoYWJsZUJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cGF0
Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6SW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXNoKToKKyAgICAgICAgKEpTQzo6
bGlua0lubGluZU9yR29Ub1Nsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6Z2V0U2NyYXRjaFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6aGFzRnJlZVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SW5saW5l
QWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlNDOjpJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6Oklu
bGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6cmV3aXJlU3R1YkFzSnVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNz
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFj
ZSk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6c2l6ZUZvckxlbmd0aEFjY2Vzcyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdl
dEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxl
bmd0aCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxh
Y2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWJvdXRUb0RpZSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZVN0dWJJbmZvOjpjb250YWluc1BDKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6Y29uc2lkZXJDYWNo
aW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNsb3dQYXRoQ2FsbExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRvbmVMb2NhdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpzbG93UGF0aFN0YXJ0TG9jYXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cGF0Y2hhYmxlSnVtcEZvckluKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZhbHVlUmVncyk6CisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlu
ayk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlSW4pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpnZXRCeUlkKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAg
IChKU0M6OkpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdENvbW1vbik6CisgICAgICAgIChK
U0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpT
Qzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAoSlND
OjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
SklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpJVEJ5
SWRHZW5lcmF0b3I6OnJlcG9ydFNsb3dQYXRoQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVEJ5SWRH
ZW5lcmF0b3I6OnNsb3dQYXRoQmVnaW4pOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9y
OjpzbG93UGF0aEp1bXApOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRH
ZXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2dldF9ieV9pZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAo
SlNDOjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAg
ICAgIChKU0M6OnJlcGF0Y2hHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVHZW5l
cmljUHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAg
ICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlSZXBhdGNoSW4p
OgorICAgICAgICAoSlNDOjpyZXBhdGNoSW4pOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6
CisgICAgICAgIChKU0M6OnJlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJ
RCk6CisgICAgICAgIChKU0M6OnJlc2V0SW4pOgorICAgICAgICAoSlNDOjpyZXBhdGNoQnlJZFNl
bGZBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXNldEdldEJ5SURDaGVja0FuZExv
YWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SURDaGVja0FuZExvYWQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpyZXBsYWNlV2l0aEp1bXApOiBEZWxldGVkLgorCiAyMDE2
LTA2LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQmFzZWxp
bmUgSklUIHNob3VsZCBiZSBjb25jdXJyZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAogICAgIGJ5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
CisgICAgYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAogICAgIGJ5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5jcHAKICAgICBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWVTZXQuY3BwCiAgICAgYnl0ZWNv
ZGUvSnVtcFRhYmxlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjczLDYgKzEyNzMsOCBA
QAogCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkFBRjdDRDFEMEQzMUIzMDA1RTYwQkUg
LyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUgLyogSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgKi87IH07CiAJCTcyQUFGN0NFMUQwRDMxQjMw
MDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBRjdDQzFEMEQzMThCMDA1RTYwQkUg
LyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oICovOyB9OworCQk3OTA1QkI2ODFEMTIw
NTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MDVCQjY2MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVB
Y2Nlc3MuY3BwICovOyB9OworCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNj
ZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTA1
QkI2NzFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzkxNjBEQkQxQzhFM0VDODAwOEMwODVB
IC8qIFByb3h5UmV2b2tlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5MTYwREJCMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5jcHAgKi87
IH07CiAJCTc5MTYwREJFMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkxNjBEQkMxQzhFM0VDODAw
OEMwODVBIC8qIFByb3h5UmV2b2tlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzkyQ0IzNDkxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3Jp
Z2luTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi87IH07
CkBAIC0zNDU1LDYgKzM0NTcsOCBAQAogCQk3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVt
cGxhdGVSZWdpc3RyeUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1w
bGF0ZVJlZ2lzdHJ5S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQUFGN0NC
MUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkFBRjdDQzFEMEQzMThC
MDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MDVCQjY2MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxp
bmVBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5l
QWNjZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzkwNUJCNjcxRDEyMDUw
RTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmxpbmVBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkxNjBE
QkIxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5UmV2b2tlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzkxNjBEQkMxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5UmV2b2tlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdp
bk1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQQ1RvQ29kZU9y
aWdpbk1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTgwLDYgKzY1ODQs
OCBAQAogCQkJCTBGMDMzMkMxMThCMDE3NjMwMDVGOTc5QSAvKiBHZXRCeUlkVmFyaWFudC5jcHAg
Ki8sCiAJCQkJMEYwMzMyQzIxOEIwMTc2MzAwNUY5NzlBIC8qIEdldEJ5SWRWYXJpYW50LmggKi8s
CiAJCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8sCisJCQkJ
NzkwNUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgKi8sCisJCQkJNzkw
NUJCNjcxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovLAogCQkJCTE0OEE3QkVE
MUI4Mjk3NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwICovLAogCQkJCTE0OEE3QkVF
MUI4Mjk3NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuaCAqLywKIAkJCQkwRjI0RTU1MzE3
RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCAqLywKQEAgLTczMjQsNiAr
NzMzMCw3IEBACiAJCQkJMEYyQjlDRTkxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQzM5MkFCMUMzQkVCMDUwMDI0
MUY1MyAvKiBBc3NlbWJsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMy
OERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTA1
QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERG
R09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQwRTRBNzFDNDk3Rjc0MDBBNTc3RkEg
LyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTkzMDcsNiArOTMxNCw3IEBACiAJCQkJ
MEY2QjhBRDgxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTI3NzczREUxQUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0Nv
dW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzkwNUJCNjgxRDEyMDUwRTAwMTlGRTU3IC8q
IElubGluZUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyNzFBQTkwOTU2MDBE
MzNCMzMgLyogU2NvcGVkQXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTA1MDJG
MUFBQTgwNjkwMEQzM0IzMyAvKiBTY29wZWRBcmd1bWVudHNUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5OTJBQkNGOTFCRUE5QkQyMDA2NDAzQTAgLyogUmVtb3RlQXV0b21hdGlvblRhcmdl
dC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNdjdBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk5OSw2ICsxOTk5LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29y
ZE9wOEltbTgoT1BfTk9QX1QxLCAwKTsKICAgICB9CiAKKyAgICBzdGF0aWMgY29uc3RleHByIGlu
dDE2X3Qgbm9wUHNldWRvKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPUF9OT1BfVDEgfCAwOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXpl
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzaXplICUgc2l6ZW9mKGludDE2X3Qp
KSk7CisgICAgICAgIHNpemVfdCBuID0gc2l6ZSAvIHNpemVvZihpbnQxNl90KTsKKyAgICAgICAg
Zm9yIChpbnQxNl90KiBwdHIgPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oYmFzZSk7IG4tLTspIHsK
KyAgICAgICAgICAgIGludDE2X3QgaW5zbiA9IG5vcFBzZXVkbygpOworICAgICAgICAgICAgcGVy
Zm9ybUpJVE1lbWNweShwdHIrKywgJmluc24sIHNpemVvZihpbnQxNl90KSk7CisgICAgICAgIH0K
KyAgICB9CisKICAgICB2b2lkIG5vcHcoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudHdv
V29yZE9wMTZPcDE2KE9QX05PUF9UMmEsIE9QX05PUF9UMmIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBA
CiAjZGVmaW5lIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJfaAogCiAjaW5jbHVkZSAiQWJvcnRSZWFz
b24uaCIKLSNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRp
b24uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJPcHRp
b25zLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNz
ZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDM5ICs2
Miw2MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgY2xhc3MgQXNzZW1ibGVyRGF0
YSB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFzc2VtYmxlckRhdGEpOworICAgICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IElubGluZUNhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoK
ICAgICAgICAgQXNzZW1ibGVyRGF0YSgpCi0gICAgICAgICAgICA6IG1fYnVmZmVyKG51bGxwdHIp
Ci0gICAgICAgICAgICAsIG1fY2FwYWNpdHkoMCkKKyAgICAgICAgICAgIDogbV9idWZmZXIobV9p
bmxpbmVCdWZmZXIpCisgICAgICAgICAgICAsIG1fY2FwYWNpdHkoSW5saW5lQ2FwYWNpdHkpCiAg
ICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEFzc2VtYmxlckRhdGEodW5zaWduZWQgaW5p
dGlhbENhcGFjaXR5KQorICAgICAgICBBc3NlbWJsZXJEYXRhKHNpemVfdCBpbml0aWFsQ2FwYWNp
dHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBpbml0aWFsQ2FwYWNpdHk7
Ci0gICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1f
Y2FwYWNpdHkpKTsKKyAgICAgICAgICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPD0gSW5saW5lQ2Fw
YWNpdHkpIHsKKyAgICAgICAgICAgICAgICBtX2NhcGFjaXR5ID0gSW5saW5lQ2FwYWNpdHk7Cisg
ICAgICAgICAgICAgICAgbV9idWZmZXIgPSBtX2lubGluZUJ1ZmZlcjsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgbV9jYXBhY2l0eSA9IGluaXRpYWxDYXBhY2l0eTsKKyAg
ICAgICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1f
Y2FwYWNpdHkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEFzc2VtYmxl
ckRhdGEoQXNzZW1ibGVyRGF0YSYmIG90aGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1
ZmZlciA9IG90aGVyLm1fYnVmZmVyOwotICAgICAgICAgICAgb3RoZXIubV9idWZmZXIgPSBudWxs
cHRyOworICAgICAgICAgICAgaWYgKG90aGVyLmlzSW5saW5lQnVmZmVyKCkpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQob3RoZXIubV9jYXBhY2l0eSA9PSBJbmxpbmVDYXBhY2l0eSk7CisgICAg
ICAgICAgICAgICAgbWVtY3B5KG1faW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZlciwg
SW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gbV9pbmxpbmVCdWZm
ZXI7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IG90aGVy
Lm1fYnVmZmVyOwogICAgICAgICAgICAgbV9jYXBhY2l0eSA9IG90aGVyLm1fY2FwYWNpdHk7CisK
KyAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgICAgIG90aGVy
Lm1fY2FwYWNpdHkgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgQXNzZW1ibGVyRGF0YSYgb3Bl
cmF0b3I9KEFzc2VtYmxlckRhdGEmJiBvdGhlcikKICAgICAgICAgewotICAgICAgICAgICAgbV9i
dWZmZXIgPSBvdGhlci5tX2J1ZmZlcjsKLSAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIGlmIChtX2J1ZmZlciAmJiAhaXNJbmxpbmVCdWZmZXIoKSkKKyAg
ICAgICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChvdGhl
ci5pc0lubGluZUJ1ZmZlcigpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY2Fw
YWNpdHkgPT0gSW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgICAgIG1lbWNweShtX2lubGlu
ZUJ1ZmZlciwgb3RoZXIubV9pbmxpbmVCdWZmZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAgICAg
ICAgICAgICBtX2J1ZmZlciA9IG1faW5saW5lQnVmZmVyOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgbV9idWZmZXIgPSBvdGhlci5tX2J1ZmZlcjsKICAgICAgICAgICAgIG1f
Y2FwYWNpdHkgPSBvdGhlci5tX2NhcGFjaXR5OworCisgICAgICAgICAgICBvdGhlci5tX2J1ZmZl
ciA9IG51bGxwdHI7CiAgICAgICAgICAgICBvdGhlci5tX2NhcGFjaXR5ID0gMDsKICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCiAgICAgICAgIH5Bc3NlbWJsZXJEYXRhKCkK
ICAgICAgICAgewotICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgICAgICAgICAg
aWYgKG1fYnVmZmVyICYmICFpc0lubGluZUJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIGZhc3RG
cmVlKG1fYnVmZmVyKTsKICAgICAgICAgfQogCiAgICAgICAgIGNoYXIqIGJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyOyB9CkBAIC0xMDQsMTkgKzEyNywyNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBncm93KHVuc2lnbmVkIGV4dHJhQ2FwYWNpdHkgPSAwKQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2NhcGFjaXR5ID0gbV9jYXBhY2l0eSArIG1fY2FwYWNpdHkgLyAy
ICsgZXh0cmFDYXBhY2l0eTsKLSAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgICAgICAgICBpZiAo
aXNJbmxpbmVCdWZmZXIoKSkgeworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KGZhc3RNYWxsb2MobV9jYXBhY2l0eSkpOworICAgICAgICAgICAgICAgIG1lbWNw
eShtX2J1ZmZlciwgbV9pbmxpbmVCdWZmZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZh
c3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CiAgICAgICAgIH0KIAogICAgIHByaXZh
dGU6CisgICAgICAgIGJvb2wgaXNJbmxpbmVCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ciA9PSBtX2lubGluZUJ1ZmZlcjsgfQogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICAgICAg
Y2hhciBtX2lubGluZUJ1ZmZlcltJbmxpbmVDYXBhY2l0eV07CiAgICAgICAgIHVuc2lnbmVkIG1f
Y2FwYWNpdHk7CiAgICAgfTsKIAogICAgIGNsYXNzIEFzc2VtYmxlckJ1ZmZlciB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgaW5pdGlhbENhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoKICAg
ICAgICAgQXNzZW1ibGVyQnVmZmVyKCkKLSAgICAgICAgICAgIDogbV9zdG9yYWdlKGluaXRpYWxD
YXBhY2l0eSkKKyAgICAgICAgICAgIDogbV9zdG9yYWdlKCkKICAgICAgICAgICAgICwgbV9pbmRl
eCgwKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTE2Myw3ICsxOTEsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB1bnNpZ25lZCBkZWJ1Z09mZnNldCgpIHsgcmV0dXJuIG1faW5kZXg7
IH0KIAotICAgICAgICBBc3NlbWJsZXJEYXRhIHJlbGVhc2VBc3NlbWJsZXJEYXRhKCkgeyByZXR1
cm4gV1RGTW92ZShtX3N0b3JhZ2UpOyB9CisgICAgICAgIEFzc2VtYmxlckRhdGEmJiByZWxlYXNl
QXNzZW1ibGVyRGF0YSgpIHsgcmV0dXJuIFdURk1vdmUobV9zdG9yYWdlKTsgfQogCiAgICAgICAg
IC8vIExvY2FsV3JpdGVyIGlzIGEgdHJpY2sgdG8ga2VlcCB0aGUgc3RvcmFnZSBidWZmZXIgYW5k
IHRoZSBpbmRleAogICAgICAgICAvLyBpbiBtZW1vcnkgd2hpbGUgaXNzdWluZyBtdWx0aXBsZSBT
dG9yZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw1NCArMTAyLDYzIEBA
IHZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICBhbGxvY2F0ZSht
X2luaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBpZiAoZGlkRmFpbFRvQWxsb2Nh
dGUoKSkKICAgICAgICAgcmV0dXJuOworCiAgICAgVmVjdG9yPExpbmtSZWNvcmQsIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiYganVtcHNUb0xpbmsgPSBtYWNyb0Fzc2VtYmxlci5qdW1wc1RvTGlu
aygpOwogICAgIG1fYXNzZW1ibGVyU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVy
LmJ1ZmZlcigpLnJlbGVhc2VBc3NlbWJsZXJEYXRhKCk7CiAgICAgdWludDhfdCogaW5EYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9hc3NlbWJsZXJTdG9yYWdlLmJ1ZmZlcigpKTsK
IAogICAgIEFzc2VtYmxlckRhdGEgb3V0QnVmZmVyKG1fc2l6ZSk7CisKICAgICB1aW50OF90KiBv
dXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ob3V0QnVmZmVyLmJ1ZmZlcigpKTsK
ICAgICB1aW50OF90KiBjb2RlT3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1f
Y29kZSk7CiAKICAgICBpbnQgcmVhZFB0ciA9IDA7CiAgICAgaW50IHdyaXRlUHRyID0gMDsKICAg
ICB1bnNpZ25lZCBqdW1wQ291bnQgPSBqdW1wc1RvTGluay5zaXplKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGp1bXBDb3VudDsgKytpKSB7Ci0gICAgICAgIGludCBvZmZzZXQgPSBy
ZWFkUHRyIC0gd3JpdGVQdHI7Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDEpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAvLyBDb3B5IHRoZSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgbGFzdCBq
dW1wIHRvIHRoZSBjdXJyZW50IG9uZS4KLSAgICAgICAgc2l6ZV90IHJlZ2lvblNpemUgPSBqdW1w
c1RvTGlua1tpXS5mcm9tKCkgLSByZWFkUHRyOwotICAgICAgICBJbnN0cnVjdGlvblR5cGUqIGNv
cHlTb3VyY2UgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0cnVjdGlvblR5cGUqPihpbkRhdGEg
KyByZWFkUHRyKTsKLSAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlKiBjb3B5RW5kID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8SW5zdHJ1Y3Rpb25UeXBlKj4oaW5EYXRhICsgcmVhZFB0ciArIHJlZ2lvblNp
emUpOwotICAgICAgICBJbnN0cnVjdGlvblR5cGUqIGNvcHlEc3QgPSByZWludGVycHJldF9jYXN0
X3B0cjxJbnN0cnVjdGlvblR5cGUqPihvdXREYXRhICsgd3JpdGVQdHIpOwotICAgICAgICBBU1NF
UlQoIShyZWdpb25TaXplICUgMikpOwotICAgICAgICBBU1NFUlQoIShyZWFkUHRyICUgMikpOwot
ICAgICAgICBBU1NFUlQoISh3cml0ZVB0ciAlIDIpKTsKLSAgICAgICAgd2hpbGUgKGNvcHlTb3Vy
Y2UgIT0gY29weUVuZCkKLSAgICAgICAgICAgICpjb3B5RHN0KysgPSAqY29weVNvdXJjZSsrOwot
ICAgICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fzc2VtYmxlclN0b3JhZ2UsIHJlYWRQdHIsIGp1
bXBzVG9MaW5rW2ldLmZyb20oKSwgb2Zmc2V0KTsKLSAgICAgICAgcmVhZFB0ciArPSByZWdpb25T
aXplOwotICAgICAgICB3cml0ZVB0ciArPSByZWdpb25TaXplOwotICAgICAgICAgICAgCi0gICAg
ICAgIC8vIENhbGN1bGF0ZSBhYnNvbHV0ZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhcmdldCwgaW4g
dGhlIGNhc2Ugb2YgYmFja3dhcmRzCi0gICAgICAgIC8vIGJyYW5jaGVzIHdlIG5lZWQgdG8gYmUg
cHJlY2lzZSwgZm9yd2FyZCBicmFuY2hlcyB3ZSBhcmUgcGVzc2ltaXN0aWMKLSAgICAgICAgY29u
c3QgdWludDhfdCogdGFyZ2V0OwotICAgICAgICBpZiAoanVtcHNUb0xpbmtbaV0udG8oKSA+PSBq
dW1wc1RvTGlua1tpXS5mcm9tKCkpCi0gICAgICAgICAgICB0YXJnZXQgPSBjb2RlT3V0RGF0YSAr
IGp1bXBzVG9MaW5rW2ldLnRvKCkgLSBvZmZzZXQ7IC8vIENvbXBlbnNhdGUgZm9yIHdoYXQgd2Ug
aGF2ZSBjb2xsYXBzZWQgc28gZmFyCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRhcmdldCA9
IGNvZGVPdXREYXRhICsganVtcHNUb0xpbmtbaV0udG8oKSAtIGV4ZWN1dGFibGVPZmZzZXRGb3Io
anVtcHNUb0xpbmtbaV0udG8oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgSnVtcExpbmtUeXBl
IGp1bXBMaW5rVHlwZSA9IE1hY3JvQXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcHNUb0xp
bmtbaV0sIGNvZGVPdXREYXRhICsgd3JpdGVQdHIsIHRhcmdldCk7Ci0gICAgICAgIC8vIENvbXBh
Y3QgYnJhbmNoIGlmIHdlIGNhbi4uLgotICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkNv
bXBhY3QoanVtcHNUb0xpbmtbaV0udHlwZSgpKSkgewotICAgICAgICAgICAgLy8gU3RlcCBiYWNr
IGluIHRoZSB3cml0ZSBzdHJlYW0KLSAgICAgICAgICAgIGludDMyX3QgZGVsdGEgPSBNYWNyb0Fz
c2VtYmxlcjo6anVtcFNpemVEZWx0YShqdW1wc1RvTGlua1tpXS50eXBlKCksIGp1bXBMaW5rVHlw
ZSk7Ci0gICAgICAgICAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAgICAgICAgICB3cml0ZVB0ciAt
PSBkZWx0YTsKLSAgICAgICAgICAgICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fzc2VtYmxlclN0
b3JhZ2UsIGp1bXBzVG9MaW5rW2ldLmZyb20oKSAtIGRlbHRhLCByZWFkUHRyLCByZWFkUHRyIC0g
d3JpdGVQdHIpOworICAgIGlmIChtX3Nob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wQ291bnQ7ICsraSkgeworICAgICAg
ICAgICAgaW50IG9mZnNldCA9IHJlYWRQdHIgLSB3cml0ZVB0cjsKKyAgICAgICAgICAgIEFTU0VS
VCghKG9mZnNldCAmIDEpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENvcHkg
dGhlIGluc3RydWN0aW9ucyBmcm9tIHRoZSBsYXN0IGp1bXAgdG8gdGhlIGN1cnJlbnQgb25lLgor
ICAgICAgICAgICAgc2l6ZV90IHJlZ2lvblNpemUgPSBqdW1wc1RvTGlua1tpXS5mcm9tKCkgLSBy
ZWFkUHRyOworICAgICAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlKiBjb3B5U291cmNlID0gcmVpbnRl
cnByZXRfY2FzdF9wdHI8SW5zdHJ1Y3Rpb25UeXBlKj4oaW5EYXRhICsgcmVhZFB0cik7CisgICAg
ICAgICAgICBJbnN0cnVjdGlvblR5cGUqIGNvcHlFbmQgPSByZWludGVycHJldF9jYXN0X3B0cjxJ
bnN0cnVjdGlvblR5cGUqPihpbkRhdGEgKyByZWFkUHRyICsgcmVnaW9uU2l6ZSk7CisgICAgICAg
ICAgICBJbnN0cnVjdGlvblR5cGUqIGNvcHlEc3QgPSByZWludGVycHJldF9jYXN0X3B0cjxJbnN0
cnVjdGlvblR5cGUqPihvdXREYXRhICsgd3JpdGVQdHIpOworICAgICAgICAgICAgQVNTRVJUKCEo
cmVnaW9uU2l6ZSAlIDIpKTsKKyAgICAgICAgICAgIEFTU0VSVCghKHJlYWRQdHIgJSAyKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoISh3cml0ZVB0ciAlIDIpKTsKKyAgICAgICAgICAgIHdoaWxlIChj
b3B5U291cmNlICE9IGNvcHlFbmQpCisgICAgICAgICAgICAgICAgKmNvcHlEc3QrKyA9ICpjb3B5
U291cmNlKys7CisgICAgICAgICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fzc2VtYmxlclN0b3Jh
Z2UsIHJlYWRQdHIsIGp1bXBzVG9MaW5rW2ldLmZyb20oKSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IHJlYWRQdHIgKz0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIHdyaXRlUHRyICs9IHJlZ2lvblNp
emU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUg
YWRkcmVzcyBvZiB0aGUganVtcCB0YXJnZXQsIGluIHRoZSBjYXNlIG9mIGJhY2t3YXJkcworICAg
ICAgICAgICAgLy8gYnJhbmNoZXMgd2UgbmVlZCB0byBiZSBwcmVjaXNlLCBmb3J3YXJkIGJyYW5j
aGVzIHdlIGFyZSBwZXNzaW1pc3RpYworICAgICAgICAgICAgY29uc3QgdWludDhfdCogdGFyZ2V0
OworICAgICAgICAgICAgaWYgKGp1bXBzVG9MaW5rW2ldLnRvKCkgPj0ganVtcHNUb0xpbmtbaV0u
ZnJvbSgpKQorICAgICAgICAgICAgICAgIHRhcmdldCA9IGNvZGVPdXREYXRhICsganVtcHNUb0xp
bmtbaV0udG8oKSAtIG9mZnNldDsgLy8gQ29tcGVuc2F0ZSBmb3Igd2hhdCB3ZSBoYXZlIGNvbGxh
cHNlZCBzbyBmYXIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBj
b2RlT3V0RGF0YSArIGp1bXBzVG9MaW5rW2ldLnRvKCkgLSBleGVjdXRhYmxlT2Zmc2V0Rm9yKGp1
bXBzVG9MaW5rW2ldLnRvKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgSnVtcExp
bmtUeXBlIGp1bXBMaW5rVHlwZSA9IE1hY3JvQXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVt
cHNUb0xpbmtbaV0sIGNvZGVPdXREYXRhICsgd3JpdGVQdHIsIHRhcmdldCk7CisgICAgICAgICAg
ICAvLyBDb21wYWN0IGJyYW5jaCBpZiB3ZSBjYW4uLi4KKyAgICAgICAgICAgIGlmIChNYWNyb0Fz
c2VtYmxlcjo6Y2FuQ29tcGFjdChqdW1wc1RvTGlua1tpXS50eXBlKCkpKSB7CisgICAgICAgICAg
ICAgICAgLy8gU3RlcCBiYWNrIGluIHRoZSB3cml0ZSBzdHJlYW0KKyAgICAgICAgICAgICAgICBp
bnQzMl90IGRlbHRhID0gTWFjcm9Bc3NlbWJsZXI6Omp1bXBTaXplRGVsdGEoanVtcHNUb0xpbmtb
aV0udHlwZSgpLCBqdW1wTGlua1R5cGUpOworICAgICAgICAgICAgICAgIGlmIChkZWx0YSkgewor
ICAgICAgICAgICAgICAgICAgICB3cml0ZVB0ciAtPSBkZWx0YTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVjb3JkTGlua09mZnNldHMobV9hc3NlbWJsZXJTdG9yYWdlLCBqdW1wc1RvTGlua1tpXS5m
cm9tKCkgLSBkZWx0YSwgcmVhZFB0ciwgcmVhZFB0ciAtIHdyaXRlUHRyKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBqdW1wc1RvTGlua1tpXS5zZXRGcm9t
KHdyaXRlUHRyKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghQVNTRVJU
X0RJU0FCTEVEKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwganVtcENv
dW50OyArK2kpCisgICAgICAgICAgICAgICAgQVNTRVJUKCFNYWNyb0Fzc2VtYmxlcjo6Y2FuQ29t
cGFjdChqdW1wc1RvTGlua1tpXS50eXBlKCkpKTsKICAgICAgICAgfQotICAgICAgICBqdW1wc1Rv
TGlua1tpXS5zZXRGcm9tKHdyaXRlUHRyKTsKICAgICB9CiAgICAgLy8gQ29weSBldmVyeXRoaW5n
IGFmdGVyIHRoZSBsYXN0IGp1bXAKICAgICBtZW1jcHkob3V0RGF0YSArIHdyaXRlUHRyLCBpbkRh
dGEgKyByZWFkUHRyLCBtX2luaXRpYWxTaXplIC0gcmVhZFB0cik7CkBAIC0xNjIsOSArMTcxLDE3
IEBAIHZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICB9CiAKICAg
ICBqdW1wc1RvTGluay5jbGVhcigpOwotICAgIHNocmluayh3cml0ZVB0ciArIG1faW5pdGlhbFNp
emUgLSByZWFkUHRyKTsKIAotICAgIHBlcmZvcm1KSVRNZW1jcHkobV9jb2RlLCBvdXRCdWZmZXIu
YnVmZmVyKCksIG1fc2l6ZSk7CisgICAgc2l6ZV90IGNvbXBhY3RTaXplID0gd3JpdGVQdHIgKyBt
X2luaXRpYWxTaXplIC0gcmVhZFB0cjsKKyAgICBpZiAobV9leGVjdXRhYmxlTWVtb3J5KSB7Cisg
ICAgICAgIG1fc2l6ZSA9IGNvbXBhY3RTaXplOworICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnkt
PnNocmluayhtX3NpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBub3BTaXplSW5C
eXRlcyA9IG1faW5pdGlhbFNpemUgLSBjb21wYWN0U2l6ZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMob3V0RGF0YSArIGNvbXBhY3RTaXplLCBub3BT
aXplSW5CeXRlcyk7CisgICAgfQorCisgICAgcGVyZm9ybUpJVE1lbWNweShtX2NvZGUsIG91dERh
dGEsIG1fc2l6ZSk7CiAKICNpZiBEVU1QX0xJTktfU1RBVElTVElDUwogICAgIGR1bXBMaW5rU3Rh
dGlzdGljcyhtX2NvZGUsIG1faW5pdGlhbFNpemUsIG1fc2l6ZSk7CkBAIC0xOTgsNyArMjE1LDcg
QEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogICAgIGNvcHlDb21w
YWN0QW5kTGlua0NvZGU8dWludDE2X3Q+KG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0
KTsKICNlbGlmIENQVShBUk02NCkKICAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVpbnQzMl90
PihtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7Ci0jZW5kaWYKKyNlbmRpZiAvLyAh
RU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQogCiAgICAgbV9saW5rVGFza3MgPSBXVEZNb3ZlKG1h
Y3JvQXNzZW1ibGVyLm1fbGlua1Rhc2tzKTsKIH0KQEAgLTIwNiw2ICsyMjMsOCBAQCB2b2lkIExp
bmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyCiB2b2lkIExpbmtCdWZmZXI6OmFsbG9j
YXRlKHNpemVfdCBpbml0aWFsU2l6ZSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKIHsKICAgICBpZiAobV9jb2RlKSB7CisgICAgICAgIC8vIEZJWE1FOiwgd2hl
biB3ZSdyZSBwYXNzZWQgYW4gaW5pdGlhbFNpemUgPCBtX3NpemUsIHdlIHNob3VsZCBub3Agc2xl
ZCBhdCB0aGUgZW5kLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU4ODg4CiAgICAgICAgIGlmIChpbml0aWFsU2l6ZSA+IG1fc2l6ZSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC0yMjMsMTQgKzI0Miw2IEBAIHZvaWQgTGlua0J1
ZmZlcjo6YWxsb2NhdGUoc2l6ZV90IGluaXRpYWwKICAgICBtX2RpZEFsbG9jYXRlID0gdHJ1ZTsK
IH0KIAotdm9pZCBMaW5rQnVmZmVyOjpzaHJpbmsoc2l6ZV90IG5ld1NpemUpCi17Ci0gICAgaWYg
KCFtX2V4ZWN1dGFibGVNZW1vcnkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3NpemUgPSBuZXdT
aXplOwotICAgIG1fZXhlY3V0YWJsZU1lbW9yeS0+c2hyaW5rKG1fc2l6ZSk7Ci19Ci0KIHZvaWQg
TGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiB7CiAgICAgZm9yIChhdXRvJiB0YXNr
IDogbV9saW5rVGFza3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAg
cHVibGljOgogICAgICAgICBsaW5rQ29kZShtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9y
dCk7CiAgICAgfQogCi0gICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJs
ZXIsIHZvaWQqIGNvZGUsIHNpemVfdCBzaXplLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQg
PSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKQorICAgIExpbmtCdWZmZXIoTWFjcm9Bc3NlbWJs
ZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0ID0gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgYm9vbCBzaG91bGRQ
ZXJmb3JtQnJhbmNoQ29tcGFjdGlvbiA9IHRydWUpCiAgICAgICAgIDogbV9zaXplKHNpemUpCiAj
aWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQogICAgICAgICAsIG1faW5pdGlhbFNpemUoMCkK
QEAgLTEwNyw2ICsxMDcsMTEgQEAgcHVibGljOgogICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNl
KQogI2VuZGlmCiAgICAgeworI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKKyAgICAgICAg
bV9zaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbiA9IHNob3VsZFBlcmZvcm1CcmFuY2hDb21w
YWN0aW9uOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNob3VsZFBlcmZvcm1CcmFuY2hD
b21wYWN0aW9uKTsKKyNlbmRpZgogICAgICAgICBsaW5rQ29kZShtYWNyb0Fzc2VtYmxlciwgMCwg
ZWZmb3J0KTsKICAgICB9CiAKQEAgLTI1MCw3ICsyNTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2NvZGU7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3QgYWNjb3Vu
dCBmb3IgdGhlIEFzc2VtYmxlckRhdGEgc2l6ZSEKKyAgICAvLyBGSVhNRTogdGhpcyBkb2VzIG5v
dCBhY2NvdW50IGZvciB0aGUgQXNzZW1ibGVyRGF0YSBzaXplIHdoZW4gd2UncmUgZ2VuZXJhdGlu
ZyBpbnRvIGFscmVhZHkgCisgICAgLy8gYWxsb2NhdGVkIGV4ZWN1dGFibGUgbWVtb3J5LgogICAg
IHNpemVfdCBzaXplKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NpemU7CkBAIC0yODYsNyAr
MjkyLDYgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCBhbGxvY2F0ZShzaXplX3Qg
aW5pdGlhbFNpemUsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAg
dm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlv
bkVmZm9ydCk7CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQpAQCAtMzA5LDYgKzMxNCw3
IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQogICAgIHNpemVfdCBt
X2luaXRpYWxTaXplOwogICAgIEFzc2VtYmxlckRhdGEgbV9hc3NlbWJsZXJTdG9yYWdlOworICAg
IGJvb2wgbV9zaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbiB7IHRydWUgfTsKICNlbmRpZgog
ICAgIGJvb2wgbV9kaWRBbGxvY2F0ZTsKICAgICB2b2lkKiBtX2NvZGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwODcsNiArMzA4NywxNCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKHJlc3VsdCk7CiAgICAgfQog
CisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIGltbSkKKyAgICB7CisgICAgICAgIG1f
bWFrZUp1bXBQYXRjaGFibGUgPSB0cnVlOworICAgICAgICBKdW1wIHJlc3VsdCA9IGJyYW5jaDMy
KGNvbmQsIGxlZnQsIGltbSk7CisgICAgICAgIG1fbWFrZUp1bXBQYXRjaGFibGUgPSBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAocmVzdWx0KTsKKyAgICB9CisKICAgICBQYXRj
aGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCByZWcsIFRydXN0ZWRJbW02NCBpbW0pCiAgICAgewogICAgICAgICBtX21ha2VKdW1w
UGF0Y2hhYmxlID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiAyMDIxNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg2OCw2ICsxODY4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IFBhdGNoYWJsZUp1bXAocmVzdWx0KTsKICAgICB9CiAKKyAgICBQYXRjaGFibGVKdW1wIHBhdGNo
YWJsZUJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVz
dGVkSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbV9tYWtlSnVtcFBhdGNoYWJsZSA9IHRydWU7
CisgICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1tKTsKKyAgICAg
ICAgbV9tYWtlSnVtcFBhdGNoYWJsZSA9IGZhbHNlOworICAgICAgICByZXR1cm4gUGF0Y2hhYmxl
SnVtcChyZXN1bHQpOworICAgIH0KKwogICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRh
TGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IFRy
dXN0ZWRJbW1QdHIoMCkpCiAgICAgewogICAgICAgICBtX21ha2VKdW1wUGF0Y2hhYmxlID0gdHJ1
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDYgKzQzOSw5IEBAIHZvaWQgQ29kZUJs
b2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVu
c2V0OgogICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCJBcnJheUxlbmd0aCIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKworI2lmIEVOQUJMRShKSVQpCisK
KyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVk
ZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzaChWTSYgdm0p
Cit7CisgICAgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBHUFJSZWcgdmFsdWUg
PSBHUFJJbmZvOjpyZWdUMTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEpTVmFsdWVSZWdz
IHJlZ3MoYmFzZSwgdmFsdWUpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZWdzKGJhc2UpOwor
I2VuZGlmCisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHZhbHVlOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7
CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwg
SW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CisgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gz
MigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGlndW91c1NoYXBlKSk7CisgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHZhbHVlLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgdmFsdWUpOworICAgICAg
ICBqaXQuYm94SW50MzIoc2NyYXRjaEdQUiwgcmVncyk7CisKKyAgICAgICAgZGF0YUxvZygiYXJy
YXkgbGVuZ3RoIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAi
XG4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKwor
ICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLAorICAgICAgICAgICAgdmFsdWUpOworICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9
IHZhbHVlOworICAgICAgICBqaXQubG9hZFZhbHVlKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIDB4MDAwYWIyMWNhKSwgcmVncyk7CisKKyAgICAgICAgZGF0
YUxvZygib3V0IG9mIGxpbmUgb2Zmc2V0IGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5i
dWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENDYWxs
SGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOworICAgICAg
ICBqaXQubG9hZFZhbHVlKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgMHgwMDBhYjIxY2EpLCByZWdzKTsKKworICAgICAgICBkYXRhTG9nKCJpbmxpbmUgb2Zmc2V0
IGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4i
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAg
ICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOworCisgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAg
ICAgICAgICAgcmVncywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgMHgwMDBhYjIxY2Ep
KTsKKworICAgICAgICBkYXRhTG9nKCJyZXBsYWNlIGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2Vt
Ymxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOwor
CisgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgaml0LnN0b3JlVmFsdWUo
CisgICAgICAgICAgICByZWdzLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSwgMTIwMzQyKSk7CisKKyAgICAgICAgZGF0YUxvZygicmVwbGFjZSBvdXQgb2YgbGluZSBj
YWNoZSBzaXplOiAiLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgIlxuIik7
CisgICAgfQorCisgICAgQ1JBU0goKTsKK30KKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rp
b24+CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGxpbmtJbmxpbmVPckdvVG9TbG93UGF0aChj
b25zdCBjaGFyKiBuYW1lLCBDQ2FsbEhlbHBlcnMmIGppdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgaWYgKGppdC5tX2Fzc2Vt
Ymxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDw9IHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUpIHsK
KyAgICAgICAgd2hpbGUgKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDwgc3R1
YkluZm8ucGF0Y2guaW5saW5lU2l6ZSkKKyAgICAgICAgICAgIGppdC5ub3AoKTsKKworICAgICAg
ICBBU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPT0gc3R1YkluZm8u
cGF0Y2guaW5saW5lU2l6ZSk7CisgICAgICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0g
ZmFsc2U7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnBhdGNo
LnN0YXJ0LmRhdGFMb2NhdGlvbigpLCBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplLCBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOworICAgICAgICBBU1NF
UlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAgICAgICBmdW5jdGlvbihsaW5rQnVmZmVyKTsK
KyAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIklubGluZUFjY2Vzc1R5cGU6ICcl
cyciLCBuYW1lKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIGhl
bHBmdWwgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2l6ZSBmb3IgaW5saW5lIElDcyBvbiB2YXJpb3Vz
CisgICAgLy8gcGxhdGZvcm1zLiBZb3Ugd2FudCB0byBjaG9vc2UgYSBzaXplIHRoYXQgdXN1YWxs
eSBzdWNjZWVkcywgYnV0IHNvbWV0aW1lcworICAgIC8vIHRoZXJlIG1heSBiZSB2YXJpYWJpbGl0
eSBpbiBsZW5ndGggb2YgdGhlIGNvZGUgd2UgZ2VuZXJhdGUganVzdCBiZWNhdXNlCisgICAgLy8g
b2YgcmFuZG9tbmVzcy4gSXQncyBoZWxwZnVsIHRvIGZsaXAgdGhpcyBvbiB3aGVuIHJ1bm5pbmcg
dGVzdHMgb3IgYnJvd3NpbmcKKyAgICAvLyB0aGUgd2ViIGp1c3QgdG8gc2VlIGhvdyBvZnRlbiBp
dCBmYWlscy4gWW91IGRvbid0IHdhbnQgYW4gSUMgc2l6ZSB0aGF0IGFsd2F5cyBmYWlscy4KKyAg
ICBjb25zdCBib29sIGZhaWxJZkNhbnRJbmxpbmUgPSBmYWxzZTsKKyAgICBpZiAoZmFpbElmQ2Fu
dElubGluZSkgeworICAgICAgICBkYXRhTG9nKCJGYWlsdXJlIGZvcjogIiwgbmFtZSwgIlxuIik7
CisgICAgICAgIGRhdGFMb2coInJlYWwgc2l6ZTogIiwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigp
LmNvZGVTaXplKCksICIgaW5saW5lIHNpemU6Iiwgc3R1YkluZm8ucGF0Y2guaW5saW5lU2l6ZSwg
IlxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzIHJlcGxh
Y2VtZW50SklUKGppdC52bSgpKTsKKyAgICBhdXRvIGp1bXBUb1Nsb3dQYXRoID0gcmVwbGFjZW1l
bnRKSVQuanVtcCgpOworICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBiZWNhdXNlIG5v
Ym9keSBzaG91bGQganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCisgICAgYm9vbCBuZWVk
c0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIocmVw
bGFjZW1lbnRKSVQsIHN0dWJJbmZvLnBhdGNoLnN0YXJ0LmRhdGFMb2NhdGlvbigpLCByZXBsYWNl
bWVudEpJVC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBKSVRDb21waWxhdGlvbk11
c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOworICAgIFJFTEVBU0VfQVNTRVJUKGxp
bmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvU2xvd1BhdGgs
IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKKworICAgIEZJTkFMSVpFX0NPREUo
bGlua0J1ZmZlciwgKCJJbmxpbmVBY2Nlc3MgbGlua2luZyBhIGp1bXAgdG8gc2xvdyBwYXRoIGJl
Y2F1c2Ugd2UgcmFuIG91dCBvZiByb29tIGlubGluZSIpKTsKK30KKwordm9pZCBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQor
eworICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2
YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOworCisgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRo
ID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYml0
d2lzZV9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUtPmlkKCkpKSk7CisgICAgR1BSUmVnIHN0b3Jh
Z2U7CisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHN0b3JhZ2UgPSBi
YXNlOworICAgIGVsc2UgeworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUucGF5bG9hZEdQUigp
KTsKKyAgICAgICAgc3RvcmFnZSA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICB9CisKKyAgICBq
aXQubG9hZFZhbHVlKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgdmFsdWUpOworCisgICAgbGlua0lubGluZU9y
R29Ub1Nsb3dQYXRoKCJwcm9wZXJ0eSBhY2Nlc3MiLCBqaXQsIHN0dWJJbmZvLCBbJl0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGJyYW5jaFRvU2xv
d1BhdGgsIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKKyAgICB9KTsKK30KKwor
QUxXQVlTX0lOTElORSBzdGF0aWMgR1BSUmVnIGdldFNjcmF0Y2hSZWdpc3RlcihTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9j
YXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICBhbGxvY2F0b3IubG9jayhz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpKTsKKyAgICBhbGxvY2F0
b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VUYWdHUFIpKTsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSk7CisjZW5kaWYKKyAg
ICBHUFJSZWcgc2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCisgICAgICAgIHJldHVybiBJbnZhbGlk
R1BSUmVnOworICAgIHJldHVybiBzY3JhdGNoOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBi
b29sIGhhc0ZyZWVSZWdpc3RlcihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAg
cmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKK30K
KworYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKK30KKwordm9pZCBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sK
KyAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvZmZz
ZXQpKTsKKworICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVl
UmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOworCisgICAgYXV0byBicmFuY2hUb1Ns
b3dQYXRoID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUtPmlkKCkpKSk7CisKKyAgICBHUFJS
ZWcgc3RvcmFnZTsKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgc3Rv
cmFnZSA9IGJhc2U7CisgICAgZWxzZSB7CisgICAgICAgIHN0b3JhZ2UgPSBnZXRTY3JhdGNoUmVn
aXN0ZXIoc3R1YkluZm8pOworICAgICAgICBBU1NFUlQoc3RvcmFnZSAhPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2UpOworICAgIH0KKworICAgIGppdC5zdG9y
ZVZhbHVlKAorICAgICAgICB2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZSwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSkpOworCisgICAgbGlua0lubGluZU9yR29Ub1Ns
b3dQYXRoKCJwcm9wZXJ0eSByZXBsYWNlIiwgaml0LCBzdHViSW5mbywgWyZdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhicmFuY2hUb1Nsb3dQYXRo
LCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CisgICAgfSk7Cit9CisKK2Jvb2wg
SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgSlNBcnJheSogYXJyYXkpCit7CisgICAgQVNTRVJUKGFycmF5LT5pbmRleGluZ1R5
cGUoKSAmIElzQXJyYXkpOworCisgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gYXJyYXktPmluZGV4aW5nVHlwZSgp
ID09IEFycmF5V2l0aEludDMyCisgICAgICAgIHx8IGFycmF5LT5pbmRleGluZ1R5cGUoKSA9PSBB
cnJheVdpdGhEb3VibGUKKyAgICAgICAgfHwgYXJyYXktPmluZGV4aW5nVHlwZSgpID09IEFycmF5
V2l0aENvbnRpZ3VvdXM7Cit9CisKK3ZvaWQgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVu
Z3RoKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkK
K3sKKyAgICBBU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywgYXJyYXkpKTsK
KworICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2
YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOworICAgIEdQUlJlZyBzY3JhdGNoID0gZ2V0U2Ny
YXRjaFJlZ2lzdGVyKHN0dWJJbmZvKTsKKworICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdT
aGFwZU1hc2spLCBzY3JhdGNoKTsKKyAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQucGF0
Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5cGUoKSkpOworICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSksIHZhbHVlLnBheWxvYWRHUFIoKSk7CisgICAgaml0LmJveEludDMyKHZhbHVlLnBh
eWxvYWRHUFIoKSwgdmFsdWUpOworCisgICAgbGlua0lubGluZU9yR29Ub1Nsb3dQYXRoKCJhcnJh
eSBsZW5ndGgiLCBqaXQsIHN0dWJJbmZvLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgbGlua0J1ZmZlci5saW5rKGJyYW5jaFRvU2xvd1BhdGgsIHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbigpKTsKKyAgICB9KTsKK30KKwordm9pZCBJbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXAoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVM
b2NhdGlvbkxhYmVsIHRhcmdldCkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAg
ICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBz
bGVkIGhlcmUgYmVjYXVzZSBub2JvZHkgc2hvdWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxl
IG9mIGFuIElDLgorICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7CisgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8ucGF0Y2guc3RhcnQuZGF0YUxvY2F0
aW9uKCksIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOworICAgIFJFTEVBU0VfQVNTRVJU
KGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgdGFyZ2V0
KTsKKworICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJJbmxpbmVBY2Nlc3M6IGxpbmtp
bmcgY29uc3RhbnQganVtcCIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIElubGlu
ZUFjY2Vzc19oCisjZGVmaW5lIElubGluZUFjY2Vzc19oCisKKyNpZiBFTkFCTEUoSklUKQorCisj
aW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXk7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIFZNOworCitjbGFzcyBJbmxpbmVBY2Nlc3Mgewor
cHVibGljOgorCisgICAgLy8gV2UgdXNlIHNpemUgdGhlIGZvciBvdXQgb2YgbGluZSBvZmZzZXRz
IGJlY2F1c2UgdGhhdCdzIGxhcmdlci4KKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzaXpl
Rm9yUHJvcGVydHlBY2Nlc3MoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1
cm4gMjM7CisjZWxpZiBDUFUoWDg2KQorICAgICAgICByZXR1cm4gMjc7CisjZWxpZiBDUFUoQVJN
NjQpCisgICAgICAgIHJldHVybiA0MDsKKyNlbGlmIENQVShBUk0pCisjaWYgQ1BVKEFSTV9USFVN
QjIpCisgICAgICAgIHJldHVybiA0ODsKKyNlbHNlCisgICAgICAgIHJldHVybiA1MDsKKyNlbmRp
ZgorI2Vsc2UKKyNlcnJvciAidW5zdXBwb3J0ZWQgcGxhdGZvcm0iCisjZW5kaWYKKyAgICB9CisK
KyAgICAvLyBXZSB1c2Ugc2l6ZSB0aGUgZm9yIG91dCBvZiBsaW5lIG9mZnNldHMgYmVjYXVzZSB0
aGF0J3MgbGFyZ2VyLgorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemVGb3JQcm9wZXJ0
eVJlcGxhY2UoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4gMjM7Cisj
ZWxpZiBDUFUoWDg2KQorICAgICAgICByZXR1cm4gMjc7CisjZWxpZiBDUFUoQVJNNjQpCisgICAg
ICAgIHJldHVybiA0MDsKKyNlbGlmIENQVShBUk0pCisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAg
ICAgIHJldHVybiA0ODsKKyNlbHNlCisgICAgICAgIHJldHVybiA1MDsKKyNlbmRpZgorI2Vsc2UK
KyNlcnJvciAidW5zdXBwb3J0ZWQgcGxhdGZvcm0iCisjZW5kaWYKKyAgICB9CisKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBzaXplRm9yTGVuZ3RoQWNjZXNzKCkKKyAgICB7CisjaWYgQ1BV
KFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDI2OworI2VsaWYgQ1BVKFg4NikKKyAgICAgICAgcmV0
dXJuIDI3OworI2VsaWYgQ1BVKEFSTTY0KQorICAgICAgICByZXR1cm4gMzI7CisjZWxpZiBDUFUo
QVJNKQorI2lmIENQVShBUk1fVEhVTUIyKQorICAgICAgICByZXR1cm4gMzA7CisjZWxzZQorICAg
ICAgICByZXR1cm4gNTA7CisjZW5kaWYKKyNlbHNlCisjZXJyb3IgInVuc3VwcG9ydGVkIHBsYXRm
b3JtIgorI2VuZGlmCisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVTZWxmUHJvcGVy
dHlBY2Nlc3MoVk0mLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3Ry
dWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIHZvaWQgZ2VuZXJh
dGVTZWxmUHJvcGVydHlSZXBsYWNlKFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUq
LCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0
aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgdm9pZCBnZW5lcmF0
ZUFycmF5TGVuZ3RoKFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3Rh
dGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcChWTSYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxv
Y2F0aW9uTGFiZWwpOworCisgICAgLy8gVGhpcyBpcyBoZWxwZnVsIHdoZW4gZGV0ZXJtaW5pbmcg
dGhlIHNpemUgb2YgYW4gSUMgb24KKyAgICAvLyB2YXJpb3VzIHBsYXRmb3Jtcy4gV2hlbiBhZGRp
bmcgYSBuZXcgdHlwZSBvZiBJQywgaW1wbGVtZW50CisgICAgLy8gaXRzIHBsYWNlaG9sZGVyIGNv
ZGUgaGVyZSwgYW5kIGxvZyB0aGUgc2l6ZS4gVGhhdCB3YXkgd2UKKyAgICAvLyBjYW4gaW50ZWxs
aWdlbnRseSBjaG9vc2Ugc2l6ZXMgb24gdmFyaW91cyBwbGF0Zm9ybXMuCisgICAgTk9fUkVUVVJO
X0RVRV9UT19DUkFTSCB2b2lkIGR1bXBDYWNoZVNpemVzQW5kQ3Jhc2goVk0mKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIElu
bGluZUFjY2Vzc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NTEsMTEgKzE1NTEsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3Jw
aGljQWNjZXNzCiAgICAgc3RhdGUuaWRlbnQgPSAmaWRlbnQ7CiAgICAgCiAgICAgc3RhdGUuYmFz
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAg
c3RhdGUudmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCi0j
ZW5kaWYKLSAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
UikpOworICAgIHN0YXRlLnZhbHVlUmVncyA9IHN0dWJJbmZvLnZhbHVlUmVncygpOwogCiAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVn
aXN0ZXJzKTsKICAgICBzdGF0ZS5hbGxvY2F0b3IgPSAmYWxsb2NhdG9yOwpAQCAtMTc1MywxNCAr
MTc0OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAg
ICAgIHJldHVybiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpHYXZlVXA7CiAgICAgfQogCi0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25l
KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5kb25lTG9j
YXRpb24oKTsKICAgICAgICAgCiAgICAgbGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nlc3MsIHN1
Y2Nlc3NMYWJlbCk7CiAKLSAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgIGZhaWx1cmUsCi0g
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoZmFpbHVy
ZSwgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogICAgIAogICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdp
biwgIjogR2VuZXJhdGluZyBwb2x5bW9ycGhpYyBhY2Nlc3Mgc3R1YiBmb3IgIiwgbGlzdER1bXAo
Y2FzZXMpLCAiXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNiArNjMsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5
SWRTZWxmKAogICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogfQogCit2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjppbml0QXJyYXlMZW5ndGgoKQoreworICAgIGNhY2hlVHlwZSA9IENhY2hl
VHlwZTo6QXJyYXlMZW5ndGg7Cit9CisKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRC
eUlkUmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgY2FjaGVUeXBlID0gQ2FjaGVU
eXBlOjpQdXRCeUlkUmVwbGFjZTsKQEAgLTg3LDYgKzkyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6ZGVyZWYoKQogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICBjYXNlIENhY2hl
VHlwZTo6R2V0QnlJZFNlbGY6CiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgor
ICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMTAyLDYgKzEwOCw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmFib3V0VG9EaWUo
KQogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6CiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgIGNhc2UgQ2Fj
aGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjU3LDYg
KzI2NCw3IEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXQKIHsKICAg
ICBzd2l0Y2ggKGNhY2hlVHlwZSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBj
YXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNh
c2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJl
cGxhY2U6CkBAIC0yNzUsNiArMjgzLDcgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y29udGFp
bnNQQyh2b2lkKgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHUuc3R1Yi0+Y29u
dGFpbnNQQyhwYyk7CiB9Ci0jZW5kaWYKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBVbnNl
dCwKICAgICBHZXRCeUlkU2VsZiwKICAgICBQdXRCeUlkUmVwbGFjZSwKLSAgICBTdHViCisgICAg
U3R1YiwKKyAgICBBcnJheUxlbmd0aAogfTsKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewpA
QCAtNjgsNiArNjksNyBAQCBwdWJsaWM6CiAgICAgflN0cnVjdHVyZVN0dWJJbmZvKCk7CiAKICAg
ICB2b2lkIGluaXRHZXRCeUlkU2VsZihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RT
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICB2b2lkIGluaXRBcnJheUxlbmd0aCgpOwog
ICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9i
amVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQpOwogICAgIHZvaWQgaW5pdFN0dWIoQ29kZUJs
b2NrKiwgc3RkOjp1bmlxdWVfcHRyPFBvbHltb3JwaGljQWNjZXNzPik7CiAKQEAgLTE0MywxMyAr
MTQ1LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIENv
ZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOworICAgIGJvb2wgY29udGFpbnNQQyh2
b2lkKiBwYykgY29uc3Q7CiAKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4OwogCi0gICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBj
b25zdDsKLQogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpAQCAtMTY1LDI1ICsx
NjUsMzkgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCBidWZmZXJlZFN0cnVjdHVyZXM7CiAg
ICAgCiAgICAgc3RydWN0IHsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQ7IC8vIFRo
aXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMs
IG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luJyBjYWNoZXMuCisgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgICAgIHVpbnQzMl90IGlubGluZVNp
emU7CisgICAgICAgIGludDMyX3QgZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9u
OworICAgICAgICBpbnQzMl90IGRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0OworCiAgICAg
ICAgIGludDhfdCBiYXNlR1BSOworICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7CiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICAgICAgaW50OF90IHZhbHVlVGFnR1BSOwogICAgICAgICBpbnQ4X3Qg
YmFzZVRhZ0dQUjsKICNlbmRpZgotICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7Ci0gICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7Ci0gICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9Eb25l
OwotICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvSnVtcDsKLSAgICAgICAgaW50MzJfdCBkZWx0
YUNhbGxUb1Nsb3dDYXNlOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3Jl
OwotI2Vsc2UKLSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlOwotICAg
ICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlOwotI2VuZGlmCiAgICAg
fSBwYXRjaDsKIAorICAgIENvZGVMb2NhdGlvbkNhbGwgc2xvd1BhdGhDYWxsTG9jYXRpb24oKSB7
IHJldHVybiBwYXRjaC5zdGFydC5jYWxsQXRPZmZzZXQocGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Ns
b3dQYXRoQ2FsbExvY2F0aW9uKTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsIGRvbmVMb2NhdGlv
bigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZzZXQocGF0Y2guaW5saW5lU2l6ZSk7
IH0KKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFN0YXJ0TG9jYXRpb24oKSB7IHJldHVy
biBwYXRjaC5zdGFydC5sYWJlbEF0T2Zmc2V0KHBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0
aFN0YXJ0KTsgfQorICAgIENvZGVMb2NhdGlvbkp1bXAgcGF0Y2hhYmxlSnVtcEZvckluKCkKKyAg
ICB7IAorICAgICAgICBBU1NFUlQoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpJbik7CisgICAg
ICAgIHJldHVybiBwYXRjaC5zdGFydC5qdW1wQXRPZmZzZXQoMCk7CisgICAgfQorCisgICAgSlNW
YWx1ZVJlZ3MgdmFsdWVSZWdzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
UmVncygKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BS
UmVnPihwYXRjaC52YWx1ZVRhZ0dQUiksCisjZW5kaWYKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEdQUlJlZz4ocGF0Y2gudmFsdWVHUFIpKTsKKyAgICB9CisKKwogICAgIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZTsKICAgICBDYWNoZVR5cGUgY2FjaGVUeXBlOwogICAgIHVpbnQ4X3QgY291bnRkb3du
OyAvLyBXZSByZXBhdGNoIG9ubHkgd2hlbiB0aGlzIGlzIHplcm8uIElmIG5vdCB6ZXJvLCB3ZSBk
ZWNyZW1lbnQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OCwxMSArMjU4LDIwIEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2lucy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgaW5mbyA9ICptX2luc1tpXS5tX3N0dWJJbmZvOwotICAgICAgICBDb2RlTG9jYXRpb25D
YWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5t
X3Nsb3dQYXRoR2VuZXJhdG9yLT5jYWxsKCkpOwotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2RvbmUpKTsKLSAgICAgICAgaW5mby5wYXRj
aC5kZWx0YUNhbGxUb0p1bXAgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxv
Y2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9qdW1wKSk7Ci0gICAgICAg
IGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICBp
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93
UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOworCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0
YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fanVtcCk7CisgICAgICAgIGlu
Zm8ucGF0Y2guc3RhcnQgPSBzdGFydDsKKworICAgICAgICBwdHJkaWZmX3QgaW5saW5lU2l6ZSA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAgICBz
dGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fZG9uZSkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbmxpbmVTaXplID49IDApOworICAgICAgICBpbmZvLnBhdGNoLmlubGlu
ZVNpemUgPSBpbmxpbmVTaXplOworCisgICAgICAgIGluZm8ucGF0Y2guZGVsdGFGcm9tU3RhcnRU
b1Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVu
Q29kZVB0cigKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNb
aV0ubV9zbG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKSk7CisKKyAgICAgICAgaW5mby5wYXRjaC5k
ZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKICAgICB9CiAgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYs
OCArMTg2LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAg
ICAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZv
KENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mbyk7CiAKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1Yklu
Zm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcs
OSArMTk3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCgKICAgICAKICAg
ICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0
ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5z
aXplKCkpOwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2Rl
QmxvY2soKSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VUYWdHUFJPck5vbmUsIGJhc2VQYXlsb2FkR1BSKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgdHlwZSk7CisgICAgICAg
IG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywg
aWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIs
IHJlc3VsdFBheWxvYWRHUFIpLCB0eXBlKTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aChtX2ppdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2OCw4ICsxNjgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVP
CiAgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KHJlc3VsdEdQUiwgZmFsc2UpOwogICAgIH0KICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNv
ZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgdHlwZSk7CisgICAgICAgIG1faml0LmNv
ZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywgaWRlbnRpZmll
clVJRChpZGVudGlmaWVyTnVtYmVyKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIHR5cGUpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1f
aml0KTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTgzLDIxICs2MTgzLDE5IEBAIHByaXZhdGU6CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsUmV0dXJuTG9jYXRpb24gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhDYWxsKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxs
VG9Eb25lID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoZG9uZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0p1bXAgPQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxS
ZXR1cm5Mb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihqdW1wKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbFJldHVybkxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoQmVnaW4pKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFy
dCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihqdW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guc3RhcnQgPSBzdGFydDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3QgaW5saW5lU2l6ZSA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
ZG9uZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGlubGluZVNpemUgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmlubGluZVNpemUgPSBpbmxpbmVTaXplOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRh
RnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhDYWxsKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVs
dGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoQmVnaW4pKTsKKwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNzYxNiw3ICs3NjE0LDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVEdldEJ5
SWRHZW5lcmF0b3I+OjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2so
KSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0ZUluZGV4LAotICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFd
LmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIHVpZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKICAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgdHlwZSk7CiAKICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOSBAQAogI2lmIEVOQUJM
RShKSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CisjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTY5LDI1ICs3MCwxOSBAQCBKSVRCeUlkR2VuZXJhdG9yOjpKSVRC
eUlkR2VuZXJhdG9yKAogCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZm
ZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsKLSAgICBDb2RlTG9jYXRpb25D
YWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2YobV9jYWxsKTsKLSAg
ICBtX3N0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0g
ICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCA9IE1hY3JvQXNzZW1ibGVy
OjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGZhc3RQYXRoLmxvY2F0aW9uT2Yo
bV9zdHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9jYXRpb24pOwotICAgIG1fc3R1YkluZm8tPnBh
dGNoLmRlbHRhQ2FsbFRvSnVtcCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZiht
X3N0cnVjdHVyZUNoZWNrKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX3N0dWJJbmZvLT5w
YXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2Nh
dGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKLSNlbHNlCi0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVs
dGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25P
ZihtX3RhZ0xvYWRPclN0b3JlKSk7Ci0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Q
YXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9s
b2FkT3JTdG9yZSkpOwotI2VuZGlmCi0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9T
bG93Q2FzZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVn
aW4pKTsKLSAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRp
b24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9kb25lKSk7CisgICAgQVNTRVJUKG1fc3RhcnQuaXNT
ZXQoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBmYXN0UGF0aC5sb2NhdGlvbk9m
KG1fc3RhcnQpOworICAgIG1fc3R1YkluZm8tPnBhdGNoLnN0YXJ0ID0gc3RhcnQ7CisKKyAgICBp
bnQzMl90IGlubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKAorICAgICAgICBzdGFydCwgZmFzdFBhdGgubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICBB
U1NFUlQoaW5saW5lU2l6ZSA+IDApOworICAgIG1fc3R1YkluZm8tPnBhdGNoLmlubGluZVNpemUg
PSBpbmxpbmVTaXplOworCisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Ns
b3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKKyAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0aENhbGwp
KTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIHN0YXJ0
LCBzbG93UGF0aC5sb2NhdGlvbk9mKG1fc2xvd1BhdGhCZWdpbikpOwogfQogCiB2b2lkIEpJVEJ5
SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkBAIC05NSwzOCAr
OTAsMjkgQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZgogICAgIGZp
bmFsaXplKGxpbmtCdWZmZXIsIGxpbmtCdWZmZXIpOwogfQogCi12b2lkIEpJVEJ5SWRHZW5lcmF0
b3I6OmdlbmVyYXRlRmFzdFBhdGhDaGVja3MoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3ZvaWQgSklU
QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0Q29tbW9uKE1hY3JvQXNzZW1ibGVyJiBqaXQsIHNp
emVfdCBpbmxpbmVJQ1NpemUpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVDaGVjayA9IGppdC5wYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICBtX3N0cnVjdHVyZUltbSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSk7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwor
ICAgIHNpemVfdCBzdGFydFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUo
KTsKKyAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5qdW1wKCk7CisgICAgd2hpbGUgKGppdC5tX2Fz
c2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIC0gc3RhcnRTaXplIDwgaW5saW5lSUNTaXplKQor
ICAgICAgICBqaXQubm9wKCk7CisgICAgQVNTRVJUKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5j
b2RlU2l6ZSgpIC0gc3RhcnRTaXplID09IGlubGluZUlDU2l6ZSk7CisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7CiB9CiAKIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3Io
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCi0gICAg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSkKLSAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIGNvZGVCbG9jaywgY29kZU9yaWdp
biwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlKQorICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFs
dWVSZWdzIHZhbHVlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgOiBKSVRCeUlkR2VuZXJh
dG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdp
c3RlcnMsIGJhc2UsIHZhbHVlKQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUg
PT0gY29kZUJsb2NrLT52bSgpLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0K
IAogdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJiBqaXQpCiB7Ci0gICAgZ2VuZXJhdGVGYXN0UGF0aENoZWNrcyhqaXQpOwotICAgIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgbV9sb2FkT3JTdG9yZSA9IGppdC5sb2FkNjRXaXRoQ29tcGFj
dEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9i
YXNlLnBheWxvYWRHUFIoKSwgMCksIG1fdmFsdWUucGF5bG9hZEdQUigpKS5sYWJlbCgpOwotI2Vs
c2UKLSAgICBtX3RhZ0xvYWRPclN0b3JlID0gaml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09m
ZnNldFBhdGNoKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9h
ZEdQUigpLCAwKSwgbV92YWx1ZS50YWdHUFIoKSkubGFiZWwoKTsKLSAgICBtX2xvYWRPclN0b3Jl
ID0gaml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSwgbV92YWx1ZS5wYXls
b2FkR1BSKCkpLmxhYmVsKCk7Ci0jZW5kaWYKLSAgICAKLSAgICBtX2RvbmUgPSBqaXQubGFiZWwo
KTsKKyAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5l
QWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9w
ZXJ0eUFjY2VzcygpKTsKIH0KIAogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVy
YXRvcigKQEAgLTE0MywxOSArMTI5LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcgogCiB2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgo
TWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKLSAgICBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKGppdCk7
Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2xvYWRPclN0b3JlID0gaml0LnN0b3Jl
NjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKAotICAgICAgICBtX3ZhbHVlLnBheWxvYWRHUFIoKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgMCkpLmxhYmVsKCk7
Ci0jZWxzZQotICAgIG1fdGFnTG9hZE9yU3RvcmUgPSBqaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zm
c2V0UGF0Y2goCi0gICAgICAgIG1fdmFsdWUudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG1fYmFzZS5wYXlsb2FkR1BSKCksIDApKS5sYWJlbCgpOwotICAgIG1fbG9hZE9yU3RvcmUg
PSBqaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIG1fdmFsdWUucGF5
bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAw
KSkubGFiZWwoKTsKLSNlbmRpZgotICAgIAotICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworICAg
IGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVw
bGFjZSgpKTsKIH0KIAogVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBKSVRQdXRCeUlkR2VuZXJhdG9y
OjpzbG93UGF0aEZ1bmN0aW9uKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwMjE1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsMzAgKzY4LDMwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydFNsb3dQ
YXRoQ2FsbChNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhCZWdpbiwgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbCkKICAgICB7CiAgICAgICAgIG1fc2xvd1BhdGhCZWdpbiA9IHNsb3dQYXRo
QmVnaW47Ci0gICAgICAgIG1fY2FsbCA9IGNhbGw7CisgICAgICAgIG1fc2xvd1BhdGhDYWxsID0g
Y2FsbDsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoQmVn
aW4oKSBjb25zdCB7IHJldHVybiBtX3Nsb3dQYXRoQmVnaW47IH0KLSAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzbG93UGF0aEp1bXAoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNoZWNrLm1f
anVtcDsgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQobV9zbG93UGF0aEp1bXAuaXNTZXQoKSk7CisgICAgICAgIHJl
dHVybiBtX3Nsb3dQYXRoSnVtcDsKKyAgICB9CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZm
ZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsK
ICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImKTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGhDaGVja3MoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdl
bmVyYXRlRmFzdENvbW1vbihNYWNyb0Fzc2VtYmxlciYsIHNpemVfdCBzaXplKTsKICAgICAKICAg
ICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKICAgICAKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgbV9zdHJ1Y3R1cmVJbW07Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zdHJ1Y3R1cmVDaGVjazsKLSAgICBBc3NlbWJsZXJM
YWJlbCBtX2xvYWRPclN0b3JlOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgQXNzZW1ibGVy
TGFiZWwgbV90YWdMb2FkT3JTdG9yZTsKLSNlbmRpZgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBtX2NhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCiBjbGFzcyBKSVRHZXRC
eUlkR2VuZXJhdG9yIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewpAQCAtOTksMTAgKzk5LDEz
IEBAIHB1YmxpYzoKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yKCkgeyB9CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUpOworICAgICAgICBDb2RlQmxv
Y2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywgVW5pcXVlZFN0cmluZ0ltcGwqIHByb3BlcnR5TmFtZSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUpOwogICAgIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworCitwcml2YXRlOgorICAgIGJv
b2wgbV9pc0xlbmd0aEFjY2VzczsKIH07CiAKIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgOiBw
dWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDIwMjE1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJ
VDo6ZW1pdEdldEJ5VmFsV2l0CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5k
ZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOworICAgICAgICBwcm9wZXJ0eU5h
bWUuaW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKIAogICAgIGZhc3REb25lQ2FzZSA9IGp1bXAoKTsKQEAgLTU4NywxMyArNTg3LDE0
IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3QKIHsKICAgICBpbnQg
ZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgYmFzZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zm
c2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25s
eShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldFB1cmUp
OworICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwpAQCAtNjM0LDcgKzYzNSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbioKIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6Okdl
dCk7CisgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDIxNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjpl
bWl0R2V0QnlWYWxXaXQKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNz
VHlwZTo6R2V0KTsKKyAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgZmFzdERvbmVDYXNlID0ganVtcCgpOwpAQCAtNTcy
LDYgKzU3Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3QKIHsK
ICAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAg
ICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwogCkBAIC01NzksNyArNTgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdAogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
CiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldFB1cmUpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CkBAIC02MjAsNyArNjIx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOworICAgICAgICBpZGVu
dC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNz
VHlwZTo6R2V0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMDIxNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAj
aW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSUNTdGF0cy5oIgorI2luY2x1ZGUg
IklubGluZUFjY2Vzcy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJVElubGluZXMu
aCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCkBAIC05MCw5NSArOTEsNiBAQCBzdGF0aWMgdm9p
ZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hDYWxsKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAotc3RhdGljIHZvaWQgcmVwYXRj
aEJ5SWRTZWxmQWNjZXNzKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHImIHNsb3dQYXRoRnVuY3Rpb24sCi0gICAgYm9vbCBj
b21wYWN0KQotewotICAgIC8vIE9ubHkgb3B0aW1pemUgb25jZSEKLSAgICByZXBhdGNoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7
Ci0KLSAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUg
bG9hZC4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKAotICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLAotICAgICAgICBiaXR3aXNlX2Nhc3Q8aW50
MzJfdD4oc3RydWN0dXJlLT5pZCgpKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoY29t
cGFjdCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpOwot
ICAgIGVsc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSk7Ci0jZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChjb21wYWN0KSB7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3Rv
cmUpLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21w
YWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUp
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0
b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2
b2lkIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6
Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0
aFBhdGNoKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUiksCi0gICAgICAgICAg
ICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSAgICB9Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2Vk
UG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwotI2Vsc2UK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgot
fQotCi1zdGF0aWMgdm9pZCByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQotewotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxh
YmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShp
bnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKLSAgICBpZiAoTWFj
cm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkg
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9m
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIp
LAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwot
I2Vsc2UKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
VGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0jZW5kaWYKLX0KLQotc3Rh
dGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh0
YXJnZXQpOwotICAgIAotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRj
aGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBs
YWNlV2l0aEp1bXAoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAg
ICAtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpKSwKLSAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKLSAgICAKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoCi0gICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0p1bXApLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKLX0KLQogZW51
bSBJbmxpbmVDYWNoZUFjdGlvbiB7CiAgICAgR2l2ZVVwT25DYWNoZSwKICAgICBSZXRyeUNhY2hl
TGF0ZXIsCkBAIC0yNDEsOSArMTUzLDE5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUdldEJ5SUQKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKIAog
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7Ci0gICAg
ICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkKKyAgICAgICAgaWYgKGlzSlNBcnJheShiYXNl
VmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlw
ZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVl
CisgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3Ro
KHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSkpKSB7CisKKyAgICAgICAgICAg
ICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9u
KCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CisgICAgICAg
ICAgICAgICAgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKCpjb2RlQmxvY2stPnZt
KCksIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSkpOworICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5n
dGgpOwotICAgICAgICBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpCisgICAgICAgIH0g
ZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpKQogICAgICAgICAgICAgbmV3Q2FzZSA9IEFj
Y2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5n
dGgpOwogICAgICAgICBlbHNlIGlmIChEaXJlY3RBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHlu
YW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgLy8g
SWYgdGhlcmUgd2VyZSBvdmVycmlkZXMsIHRoZW4gd2UgY2FuIGhhbmRsZSB0aGlzIGFzIGEgbm9y
bWFsIHByb3BlcnR5IGxvYWQhIEd1YXJkaW5nCkBAIC0yNzYsMjAgKzE5OCwyMCBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgIElubGluZUNhY2hlQWN0
aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKICAgICAgICAgaWYgKGFj
dGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKICAgICAgICAgICAgIHJldHVybiBhY3Rpb247Ci0gICAg
ICAgIAorCiAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgogICAgICAgICBpZiAoc3R1
YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICYmIHNsb3Qu
aXNDYWNoZWFibGVWYWx1ZSgpCiAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZVZhbHVlCiAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAgICAg
ICYmIGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpCi0gICAgICAgICAgICAmJiBN
YWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0
UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgICAgICAmJiBhY3Rp
b24gPT0gQXR0ZW1wdFRvQ2FjaGUKICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJv
eHkpIHsKKwogICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkU2VsZlBhdGNoLCBz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgIElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoKmNvZGVCbG9jay0+dm0oKSwgc3R1
YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICBzdHVi
SW5mby5pbml0R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQpA
QCAtMzcwLDcgKzI5Miw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5
SUQKICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBiYXNl
VmFsdWUuY2xhc3NJbmZvT3JOdWxsKCksIHByb3BlcnR5TmFtZSkpOwogICAgICAgICAKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgIHJlcGxhY2VXaXRoSnVt
cChzdHViSW5mbywgcmVzdWx0LmNvZGUoKSk7CisgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcChleGVjLT52bSgpLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0
LmNvZGUoKSkpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKQEAgLTM4Miw3ICszMDQsNyBA
QCB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgR0NTYWZlQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+
dm0oKS5oZWFwKTsKICAgICAKICAgICBpZiAodHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1
ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkK
LSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAg
ICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2Fs
bExvY2F0aW9uKCksIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CiB9
CiAKIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkK
QEAgLTQzMywxNiArMzU1LDE0IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5SUQKICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50
KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc3R1
YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAmJiBp
c0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAgICAgICAgICYmIE1h
Y3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZl
VG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICYmIElubGluZUFj
Y2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hl
ZE9mZnNldCgpKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPmluZmVycmVk
VHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlcGF0Y2hC
eUlkU2VsZkFjY2VzcygKLSAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBzdHViSW5mbywg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLAotICAgICAgICAgICAgICAgICAgICBhcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRo
Q2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2Uodm0sIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShjb2RlQmxv
Y2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgIH0KQEAgLTUyNCwxMSArNDQ0LDggQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50KSk7CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgp
KTsKLSAgICAgICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0
LmNvZGUoKSkpOworCisgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcCh2bSwg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsKHJlc3VsdC5jb2RlKCkpKTsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBS
ZXRyeUNhY2hlTGF0ZXI7CkBAIC01NDAsNyArNDU3LDcgQEAgdm9pZCByZXBhdGNoUHV0QnlJRChF
eGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCiAgICAg
aWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlO
YW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAg
cmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAg
ICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2Fs
bExvY2F0aW9uKCksIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRL
aW5kKSk7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCkBAIC01
ODYsOCArNTAzLDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQpKTsKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dC5jb2RlKCkpOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAgICAg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoYWJsZUp1
bXBGb3JJbigpLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkp
OwogICAgIH0KICAgICAKQEAgLTYwMCw3ICs1MTgsNyBAQCB2b2lkIHJlcGF0Y2hJbigKIHsKICAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgaWYgKHRy
eVJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSA9
PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7CisgICAgICAgIHJlcGF0
Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigp
LCBvcGVyYXRpb25Jbik7CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNKiwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmKQpAQCAt
OTcyLDE0ICs4OTAsMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogCiB2b2lkIHJlc2V0
R2V0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBHZXRCeUlES2luZCBraW5kKQogewotICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rp
b24oa2luZCkpOwotICAgIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChzdHViSW5mbyk7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9T
bG93Q2FzZSkpOworICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhD
YWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQp
KTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoKmNvZGVCbG9jay0+dm0oKSwg
c3R1YkluZm8sIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKIH0KIAogdm9pZCBy
ZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKIHsKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24g
PSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENhbGxUYXJnZXQoY29k
ZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdp
c2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ss
IHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwog
ICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rpb247CiAgICAgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CkBAIC05OTEs
MTQgKzkwOCwxNCBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAg
ICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9Ci0gICAgcmVwYXRjaENh
bGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0
aW9uKTsKLSAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwotICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKKworICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSwgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcCgqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhT
dGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lkIHJlc2V0SW4oQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEp1bXAoc3R1YkluZm8ucGF0Y2hhYmxlSnVtcEZvckluKCksIHN0dWJJbmZvLnNs
b3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281621</attachid>
            <date>2016-06-19 11:51:37 -0700</date>
            <delta_ts>2016-06-19 12:30:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>93670</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAyMTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OSBA
QAorMjAxNi0wNi0xNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBXZSBzaG91bGQgYmUgYWJsZSB0byBnZW5lcmF0ZSBtb3JlIHR5cGVzIG9mIElDcyBpbmxpbmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODcxOQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjY4MjU2NDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB3ZSBlbWl0
IGNvZGUgZm9yICpieUlkIElDcyBpbmxpbmUuCisgICAgICAgIFdlIG5vIGxvbmdlciBrZWVwIGRh
dGEgbGFiZWxzIHRvIHBhdGNoIHN0cnVjdHVyZSBjaGVja3MsIGV0Yy4KKyAgICAgICAgSW5zdGVh
ZCwgd2UganVzdCByZWdlbmVyYXRlIHRoZSBlbnRpcmUgSUMgaW50byBhIGRlc2lnbmF0ZWQKKyAg
ICAgICAgcmVnaW9uIG9mIGNvZGUgdGhhdCB0aGUgQmFzZWxpbmUvREZHL0ZUTCBKSVQgd2lsbCBl
bWl0IGlubGluZS4KKyAgICAgICAgVGhpcyBtYWtlcyBpdCBtdWNoIHNpbXBsZXIgdG8gcGF0Y2gg
aW5saW5lIElDcy4gQWxsIHRoYXQncworICAgICAgICBuZWVkZWQgdG8gcGF0Y2ggYW4gaW5saW5l
IElDIGlzIHRvIG1lbWNweSB0aGUgY29kZSBmcm9tCisgICAgICAgIGEgbWFjcm8gYXNzZW1ibGVy
IGlubGluZSB1c2luZyBMaW5rQnVmZmVyLiBUaGlzIGFyY2hpdGVjdHVyZQorICAgICAgICB3aWxs
IGJlIGVhc3kgdG8gZXh0ZW5kIGludG8gb3RoZXIgZm9ybXMgb2YgSUNzLCBzdWNoIGFzIG9uZQor
ICAgICAgICBmb3IgYWRkLCBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgIFRvIHN1cHBvcnQgdGhp
cyBjaGFuZ2UsIEkndmUgcmV3b3JrZWQgdGhlIGZpZWxkcyBpbnNpZGUKKyAgICAgICAgU3RydWN0
dXJlU3R1YkluZm8uIEl0IG5vdyBoYXMgb25lIGZpZWxkIHRoYXQgaXMgdGhlIENvZGVMb2NhdGlv
bkxhYmVsIAorICAgICAgICBvZiB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQy4gVGhlbiBpdCBo
YXMgYSBmZXcgaW50cyB0aGF0IHRyYWNrIGRlbHRhcworICAgICAgICB0byBvdGhlciBsb2NhdGlv
bnMgaW4gdGhlIElDIHN1Y2ggYXMgdGhlIHNsb3cgcGF0aCBzdGFydCwgc2xvdyBwYXRoIGNhbGws
IHRoZQorICAgICAgICBJQ3MgJ2RvbmUnIGxvY2F0aW9uLiBXZSB1c2VkIHRvIHBlcmZvcm0gbWF0
aCBvbiB0aGVzZSBpbnRzIGluIGEgYnVuY2ggb2YgZGlmZmVyZW50CisgICAgICAgIHBsYWNlcy4g
SSd2ZSBjb25zb2xpZGF0ZWQgdGhhdCBtYXRoIGludG8gbWV0aG9kcyBpbnNpZGUgU3RydWN0dXJl
U3R1YkluZm8uCisKKyAgICAgICAgVG8gZ2VuZXJhdGUgaW5saW5lIElDcywgSSd2ZSBpbXBsZW1l
bnRlZCBhIG5ldyBjbGFzcyBjYWxsZWQgSW5saW5lQWNjZXNzLgorICAgICAgICBJbmxpbmVBY2Nl
c3MgaXMgc3RhdGVsZXNzOiBpdCBqdXN0IGhhcyBhIGJ1bmNoIG9mIHN0YXRpYyBtZXRob2RzIGZv
cgorICAgICAgICBnZW5lcmF0aW5nIGNvZGUgaW50byB0aGUgaW5saW5lIHJlZ2lvbiBzcGVjaWZp
ZWQgYnkgU3RydWN0dXJlU3R1YkluZm8uCisgICAgICAgIFJlcGF0Y2ggd2lsbCBub3cgZGVjaWRl
IHdoZW4gaXQgd2FudHMgdG8gZ2VuZXJhdGUgc3VjaCBhbiBpbmxpbmUKKyAgICAgICAgSUMsIGFu
ZCBpdCB3aWxsIGFzayBJbmxpbmVBY2Nlc3MgdG8gZG8gc28uCisKKyAgICAgICAgSSd2ZSBpbXBs
ZW1lbnRlZCB0aHJlZSB0eXBlcyBvZiBpbmxpbmUgSUNzIHRvIGJlZ2luIHdpdGggKGV4dGVuZGlu
ZworICAgICAgICB0aGlzIGluIHRoZSBmdXR1cmUgc2hvdWxkIGJlIGVhc3kpOgorICAgICAgICAt
IFNlbGYgcHJvcGVydHkgbG9hZHMgKGJvdGggaW5saW5lIGFuZCBvdXQgb2YgbGluZSBvZmZzZXRz
KS4KKyAgICAgICAgLSBTZWxmIHByb3BlcnR5IHJlcGxhY2UgKGJvdGggaW5saW5lIGFuZCBvdXQg
b2YgbGluZSBvZmZzZXRzKS4KKyAgICAgICAgLSBBcnJheSBsZW5ndGggb24gc3BlY2lmaWMgYXJy
YXkgdHlwZXMuCisgICAgICAgIChBbiBlYXN5IGV4dGVuc2lvbiB3b3VsZCBiZSB0byBpbXBsZW1l
bnQgSlNTdHJpbmcgbGVuZ3RoLikKKworICAgICAgICBUbyBrbm93IGhvdyBtdWNoIGlubGluZSBz
cGFjZSB0byByZXNlcnZlLCBJJ3ZlIGltcGxlbWVudGVkIGEKKyAgICAgICAgbWV0aG9kIHRoYXQg
c3R1YnMgb3V0IHRoZSB2YXJpb3VzIGlubGluZSBjYWNoZSBzaGFwZXMgYW5kIAorICAgICAgICBk
dW1wcyB0aGVpciBzaXplLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHNwYWNl
CisgICAgICAgIHRvIHNhdmUgaW5saW5lLiBXaGVuIElubGluZUFjY2VzcyBlbmRzIHVwIGdlbmVy
YXRpbmcgbW9yZQorICAgICAgICBjb2RlIHRoYW4gY2FuIGZpdCBpbmxpbmUsIHdlIHdpbGwgZmFs
bCBiYWNrIHRvIGdlbmVyYXRpbmcKKyAgICAgICAgY29kZSB3aXRoIFBvbHltb3JwaGljQWNjZXNz
IGluc3RlYWQuCisKKyAgICAgICAgVG8gbWFrZSBnZW5lcmF0aW5nIGNvZGUgaW50byBhbHJlYWR5
IGFsbG9jYXRlZCBleGVjdXRhYmxlIG1lbW9yeQorICAgICAgICBlZmZpY2llbnQsIEkndmUgbWFk
ZSBBc3NlbWJsZXJEYXRhIGhhdmUgMTI4IGJ5dGVzIG9mIGlubGluZSBzdG9yYWdlLgorICAgICAg
ICBUaGlzIHNhdmVzIHVzIGEgbWFsbG9jIHdoZW4gc3BsYXR0aW5nIGNvZGUgaW50byB0aGUgaW5s
aW5lIHJlZ2lvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gdGlkaWVzIHVwIExpbmtCdWZm
ZXIncyBBUEkgZm9yIGdlbmVyYXRpbmcKKyAgICAgICAgaW50byBhbHJlYWR5IGFsbG9jYXRlZCBl
eGVjdXRhYmxlIG1lbW9yeS4gTm93LCB3aGVuIGdlbmVyYXRpbmcKKyAgICAgICAgY29kZSB0aGF0
IGhhcyBsZXNzIHNpemUgdGhhbiB0aGUgYWxyZWFkeSBhbGxvY2F0ZWQgc3BhY2UsIExpbmtCdWZm
ZXIKKyAgICAgICAgd2lsbCBmaWxsIHRoZSBleHRyYSBzcGFjZSB3aXRoIG5vcHMuIEFsc28sIGlm
IGJyYW5jaCBjb21wYWN0aW9uIHNocmlua3MKKyAgICAgICAgdGhlIGNvZGUsIExpbmtCdWZmZXIg
d2lsbCBhZGQgYSBub3Agc2xlZCBhdCB0aGUgZW5kIG9mIHRoZSBzaHJ1bmtlbgorICAgICAgICBj
b2RlIHRvIHRha2UgdXAgdGhlIGVudGlyZSBhbGxvY2F0ZWQgc2l6ZS4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6OkFSTXY3QXNzZW1ibGVyOjpub3ApOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxl
cjo6bm9wUHNldWRvKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmZpbGxOb3BzKToK
KyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6Om5vcHcpOgorICAgICAgICAqIGFzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJEYXRhOjpBc3NlbWJsZXJEYXRhKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibGVyRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibGVyRGF0YTo6fkFzc2VtYmxlckRhdGEpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJE
YXRhOjpidWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJEYXRhOjpncm93KToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibGVyRGF0YTo6aXNJbmxpbmVCdWZmZXIpOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXI6OkFzc2VtYmxlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmxl
ckJ1ZmZlcjo6ZGVidWdPZmZzZXQpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OnJl
bGVhc2VBc3NlbWJsZXJEYXRhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5jcHA6
CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUpOgorICAg
ICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rQ29kZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZm
ZXI6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXph
dGlvbik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OnNocmluayk6IERlbGV0ZWQuCisgICAg
ICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6
TGlua0J1ZmZlcik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmRlYnVnQWRkcmVzcyk6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OnNpemUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVy
Ojpjb2RlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpwYXRjaGFibGVCcmFuY2gzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnBhdGNoYWJsZUJyYW5jaDY0KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTXY3OjpwYXRjaGFibGVCcmFuY2gzMik6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNdjc6OnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdl
dEJ5SWRDYWNoZVN0YXR1cyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFz
aCk6CisgICAgICAgIChKU0M6OmxpbmtJbmxpbmVPckdvVG9TbG93UGF0aCk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6Z2VuZXJhdGVQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChKU0M6
OmdldFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgIChKU0M6Omhhc0ZyZWVSZWdpc3Rlcik6Cisg
ICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxh
Y2UpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgp
OgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXApOgorICAgICAgICAqIGJ5
dGVjb2RlL0lubGluZUFjY2Vzcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpzaXplRm9yUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnNp
emVGb3JQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnNpemVG
b3JMZW5ndGhBY2Nlc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0
dWJJbmZvOjppbml0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdFB1dEJ5SWRSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86
OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmFib3V0VG9EaWUpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6Y29udGFpbnNQQyk6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OmNvbnNpZGVyQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
OjpzbG93UGF0aENhbGxMb2NhdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojpkb25lTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6c2xvd1Bh
dGhTdGFydExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnBhdGNo
YWJsZUp1bXBGb3JJbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2YWx1ZVJl
Z3MpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRHZXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUluKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0QnlJZCk6CisgICAgICAgICogaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6
ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RD
b21tb24pOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlv
bik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGhDaGVj
a3MpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgor
ICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpyZXBvcnRTbG93UGF0aENhbGwpOgorICAg
ICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpzbG93UGF0aEJlZ2luKToKKyAgICAgICAgKEpT
Qzo6SklUQnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhKdW1wKToKKyAgICAgICAgKEpTQzo6SklUR2V0
QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0QnlWYWxXaXRoQ2Fj
aGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0QnlWYWxXaXRo
Q2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAqIGppdC9SZXBh
dGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjp0cnlD
YWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6CisgICAgICAgIChK
U0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeUlEKToKKyAgICAgICAg
KEpTQzo6dHJ5UmVwYXRjaEluKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEluKToKKyAgICAgICAg
KEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjpyZXNldEdldEJ5SUQpOgorICAgICAg
ICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXNldEluKToKKyAgICAgICAg
KEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVz
ZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVzZXRQdXRC
eUlEQ2hlY2tBbmRMb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVwbGFjZVdpdGhKdW1w
KTogRGVsZXRlZC4KKwogMjAxNi0wNi0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIEJhc2VsaW5lIEpJVCBzaG91bGQgYmUgY29uY3VycmVudApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNiAr
MjAwLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9FeGl0aW5n
SklUVHlwZS5jcHAKICAgICBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAogICAgIGJ5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmNwcAorICAgIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKICAgICBi
eXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwCiAgICAgYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1l
U2V0LmNwcAogICAgIGJ5dGVjb2RlL0p1bXBUYWJsZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTI3Myw2ICsxMjczLDggQEAKIAkJNzBFQ0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBs
YXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJBQUY3
Q0QxRDBEMzFCMzAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQUY3Q0IxRDBE
MzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwICovOyB9Owog
CQk3MkFBRjdDRTFEMEQzMUIzMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQUY3
Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaCAqLzsg
fTsKKwkJNzkwNUJCNjgxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTA1QkI2NjFEMTIwNTBF
MDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLzsgfTsKKwkJNzkwNUJCNjkxRDEyMDUwRTAw
MTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzkwNUJCNjcxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5MTYw
REJEMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTE2MERCQjFDOEUzRUM4MDA4QzA4NUEgLyog
UHJveHlSZXZva2UuY3BwICovOyB9OwogCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEgLyogUHJv
eHlSZXZva2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5MTYwREJDMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5MkNCMzQ5MUM0RUVENUMwMEQx
M0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVP
cmlnaW5NYXAuY3BwICovOyB9OwpAQCAtMzQ1NSw2ICszNDU3LDggQEAKIAkJNzBFQ0E2MDQxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTA1QkI2NjFEMTIw
NTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IElubGluZUFjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQWNjZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5MTYwREJCMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eVJldm9rZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYwREJDMUM4RTNFQzgwMDhDMDg1QSAvKiBQ
cm94eVJldm9rZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm94eVJldm9r
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNB
RjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNjU4MCw2ICs2NTg0LDggQEAKIAkJCQkwRjAzMzJDMTE4QjAxNzYzMDA1Rjk3OUEgLyog
R2V0QnlJZFZhcmlhbnQuY3BwICovLAogCQkJCTBGMDMzMkMyMThCMDE3NjMwMDVGOTc5QSAvKiBH
ZXRCeUlkVmFyaWFudC5oICovLAogCQkJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBIYW5k
bGVySW5mby5oICovLAorCQkJCTc5MDVCQjY2MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nl
c3MuY3BwICovLAorCQkJCTc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3Mu
aCAqLywKIAkJCQkxNDhBN0JFRDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmNw
cCAqLywKIAkJCQkxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmgg
Ki8sCiAJCQkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5j
cHAgKi8sCkBAIC03MzI0LDYgKzczMzAsNyBAQAogCQkJCTBGMkI5Q0U5MTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
M0MzOTJBQjFDM0JFQjA1MDAyNDFGNTMgLyogQXNzZW1ibGVyQ29tbW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkVDOUREMDEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQx
REFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MEU0
QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzA3
LDYgKzkzMTQsNyBAQAogCQkJCTBGNkI4QUQ4MUM0RUREQTIwMDk2OTA1MiAvKiBCM0R1cGxpY2F0
ZVRhaWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RFMUFBRjgzQUMwMEJERTdFOCAv
KiBSdW50aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3
OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5MDVCQjY4
MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFMDUwMjcxQUE5MDk1NjAwRDMzQjMzIC8qIFNjb3BlZEFyZ3VtZW50cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkUwNTAyRjFBQUE4MDY5MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRzVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyQUJDRjkxQkVBOUJEMjAwNjQwM0EwIC8qIFJl
bW90ZUF1dG9tYXRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZpc2lvbiAy
MDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0ODQsMTMgKzE0ODQsMTcgQEAgcHVibGljOgogICAgICAg
ICBpbnNuKG5vcFBzZXVkbygpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgZmlsbE5v
cHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUpCisgICAgLy90ZW1wbGF0ZSA8Ym9vbCBpc0NvcHlp
bmdUb0V4ZWN1dGFibGVNZW1vcnk+CisgICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFz
ZSwgc2l6ZV90IHNpemUsIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5KQogICAgIHsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzaXplICUgc2l6ZW9mKGludDMyX3QpKSk7CiAgICAg
ICAgIHNpemVfdCBuID0gc2l6ZSAvIHNpemVvZihpbnQzMl90KTsKICAgICAgICAgZm9yIChpbnQz
Ml90KiBwdHIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4oYmFzZSk7IG4tLTspIHsKICAgICAgICAg
ICAgIGludCBpbnNuID0gbm9wUHNldWRvKCk7Ci0gICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5
KHB0cisrLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgaWYgKGlzQ29weWluZ1Rv
RXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHB0cisr
LCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1lbWNweShwdHIrKywgJmluc24sIHNpemVvZihpbnQpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjAwNCw2ICsyMDA0LDQz
IEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTZPcDE2KE9QX05PUF9U
MmEsIE9QX05PUF9UMmIpOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIGludDE2
X3Qgbm9wUHNldWRvMTYoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9QX05PUF9UMTsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGludDMyX3Qgbm9wUHNldWRvMzIoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE9QX05PUF9UMmEgfCAoT1BfTk9QX1QyYiA8PCAxNik7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIGJvb2wgaXND
b3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IShzaXplICUgc2l6ZW9mKGludDE2X3QpKSk7CisKKyAgICAgICAgY2hhciogcHRyID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KGJhc2UpOworICAgICAgICBjb25zdCBzaXplX3QgbnVtMzJzID0gc2l6ZSAv
IHNpemVvZihpbnQzMl90KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW0zMnM7
IGkrKykgeworICAgICAgICAgICAgY29uc3QgaW50MzJfdCBpbnNuID0gbm9wUHNldWRvMzIoKTsK
KyAgICAgICAgICAgIGlmIChpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgICAg
ICAgICAgcGVyZm9ybUpJVE1lbWNweShwdHIsICZpbnNuLCBzaXplb2YoaW50MzJfdCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1lbWNweShwdHIsICZpbnNuLCBzaXplb2Yo
aW50MzJfdCkpOworICAgICAgICAgICAgcHRyICs9IHNpemVvZihpbnQzMl90KTsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnN0IHNpemVfdCBudW0xNnMgPSAoc2l6ZSAlIHNpemVvZihpbnQzMl90
KSkgLyBzaXplb2YoaW50MTZfdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bTE2cyA9PSAw
IHx8IG51bTE2cyA9PSAxKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtMTZzICogc2l6ZW9m
KGludDE2X3QpICsgbnVtMzJzICogc2l6ZW9mKGludDMyX3QpID09IHNpemUpOworICAgICAgICBp
ZiAobnVtMTZzKSB7CisgICAgICAgICAgICBjb25zdCBpbnQxNl90IGluc24gPSBub3BQc2V1ZG8x
NigpOworICAgICAgICAgICAgaWYgKGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSkKKyAgICAg
ICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHB0ciwgJmluc24sIHNpemVvZihpbnQxNl90KSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWVtY3B5KHB0ciwgJmluc24sIHNp
emVvZihpbnQxNl90KSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICB2b2lkIGRtYlNZKCkKICAg
ICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDE2T3AxNihPUF9ETUJfU1lfVDJhLCBP
UF9ETUJfU1lfVDJiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMDIxNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2RlZmluZSBBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyX2gKIAogI2luY2x1ZGUgIkFib3J0UmVhc29uLmgiCi0jaW5jbHVkZSAiQXNzZW1i
bGVyQnVmZmVyLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgpAQCAtMTA0MCw2ICsxMDM5
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgbV9saW5rVGFza3MuYXBwZW5kKGNyZWF0ZVNoYXJlZFRh
c2s8dm9pZChMaW5rQnVmZmVyJik+KGZ1bmN0b3IpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRO
b3BzKHNpemVfdCBtZW1vcnlUb0ZpbGxXaXRoTm9wc0luQnl0ZXMpCisgICAgeworICAgICAgICBB
c3NlbWJsZXJCdWZmZXImIGJ1ZmZlciA9IG1fYXNzZW1ibGVyLmJ1ZmZlcigpOworICAgICAgICBz
aXplX3Qgc3RhcnRDb2RlU2l6ZSA9IGJ1ZmZlci5jb2RlU2l6ZSgpOworICAgICAgICBzaXplX3Qg
dGFyZ2V0Q29kZVNpemUgPSBzdGFydENvZGVTaXplICsgbWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5
dGVzOworICAgICAgICBidWZmZXIuZW5zdXJlU3BhY2UobWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5
dGVzKTsKKyAgICAgICAgYm9vbCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkgPSBmYWxzZTsK
KyAgICAgICAgQXNzZW1ibGVyVHlwZTo6ZmlsbE5vcHMoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZl
ci5kYXRhKCkpICsgc3RhcnRDb2RlU2l6ZSwgbWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5dGVzLCBp
c0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkpOworICAgICAgICBidWZmZXIuc2V0Q29kZVNpemUo
dGFyZ2V0Q29kZVNpemUpOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXIoKQogICAgICAgICA6IG1fcmFuZG9tU291cmNlKDApCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9u
IDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDM5ICs2Miw2MiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB9OwogCiAgICAgY2xhc3MgQXNzZW1ibGVyRGF0YSB7CisgICAgICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEFzc2VtYmxlckRhdGEpOworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IElu
bGluZUNhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyRGF0YSgp
Ci0gICAgICAgICAgICA6IG1fYnVmZmVyKG51bGxwdHIpCi0gICAgICAgICAgICAsIG1fY2FwYWNp
dHkoMCkKKyAgICAgICAgICAgIDogbV9idWZmZXIobV9pbmxpbmVCdWZmZXIpCisgICAgICAgICAg
ICAsIG1fY2FwYWNpdHkoSW5saW5lQ2FwYWNpdHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIEFzc2VtYmxlckRhdGEodW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KQorICAgICAgICBB
c3NlbWJsZXJEYXRhKHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIG1fY2FwYWNpdHkgPSBpbml0aWFsQ2FwYWNpdHk7Ci0gICAgICAgICAgICBtX2J1ZmZlciA9
IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1fY2FwYWNpdHkpKTsKKyAgICAgICAgICAg
IGlmIChpbml0aWFsQ2FwYWNpdHkgPD0gSW5saW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAg
ICBtX2NhcGFjaXR5ID0gSW5saW5lQ2FwYWNpdHk7CisgICAgICAgICAgICAgICAgbV9idWZmZXIg
PSBtX2lubGluZUJ1ZmZlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
bV9jYXBhY2l0eSA9IGluaXRpYWxDYXBhY2l0eTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9
IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1fY2FwYWNpdHkpKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogCiAgICAgICAgIEFzc2VtYmxlckRhdGEoQXNzZW1ibGVyRGF0YSYmIG90
aGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1ZmZlciA9IG90aGVyLm1fYnVmZmVyOwot
ICAgICAgICAgICAgb3RoZXIubV9idWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKG90
aGVyLmlzSW5saW5lQnVmZmVyKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXIubV9j
YXBhY2l0eSA9PSBJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KG1faW5s
aW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZlciwgSW5saW5lQ2FwYWNpdHkpOworICAgICAg
ICAgICAgICAgIG1fYnVmZmVyID0gbV9pbmxpbmVCdWZmZXI7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IG90aGVyLm1fYnVmZmVyOwogICAgICAgICAgICAg
bV9jYXBhY2l0eSA9IG90aGVyLm1fY2FwYWNpdHk7CisKKyAgICAgICAgICAgIG90aGVyLm1fYnVm
ZmVyID0gbnVsbHB0cjsKICAgICAgICAgICAgIG90aGVyLm1fY2FwYWNpdHkgPSAwOwogICAgICAg
ICB9CiAKICAgICAgICAgQXNzZW1ibGVyRGF0YSYgb3BlcmF0b3I9KEFzc2VtYmxlckRhdGEmJiBv
dGhlcikKICAgICAgICAgewotICAgICAgICAgICAgbV9idWZmZXIgPSBvdGhlci5tX2J1ZmZlcjsK
LSAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmICht
X2J1ZmZlciAmJiAhaXNJbmxpbmVCdWZmZXIoKSkKKyAgICAgICAgICAgICAgICBmYXN0RnJlZSht
X2J1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChvdGhlci5pc0lubGluZUJ1ZmZlcigpKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY2FwYWNpdHkgPT0gSW5saW5lQ2FwYWNpdHkp
OworICAgICAgICAgICAgICAgIG1lbWNweShtX2lubGluZUJ1ZmZlciwgb3RoZXIubV9pbmxpbmVC
dWZmZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IG1faW5s
aW5lQnVmZmVyOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9idWZmZXIg
PSBvdGhlci5tX2J1ZmZlcjsKICAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBvdGhlci5tX2NhcGFj
aXR5OworCisgICAgICAgICAgICBvdGhlci5tX2J1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgICAg
ICBvdGhlci5tX2NhcGFjaXR5ID0gMDsKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgfQogCiAgICAgICAgIH5Bc3NlbWJsZXJEYXRhKCkKICAgICAgICAgewotICAgICAgICAgICAg
ZmFzdEZyZWUobV9idWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYnVmZmVyICYmICFpc0lubGlu
ZUJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNoYXIqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CkBA
IC0xMDQsMTkgKzEyNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBncm93KHVu
c2lnbmVkIGV4dHJhQ2FwYWNpdHkgPSAwKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2NhcGFj
aXR5ID0gbV9jYXBhY2l0eSArIG1fY2FwYWNpdHkgLyAyICsgZXh0cmFDYXBhY2l0eTsKLSAgICAg
ICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RSZWFsbG9jKG1fYnVmZmVy
LCBtX2NhcGFjaXR5KSk7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmVCdWZmZXIoKSkgeworICAg
ICAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MobV9j
YXBhY2l0eSkpOworICAgICAgICAgICAgICAgIG1lbWNweShtX2J1ZmZlciwgbV9pbmxpbmVCdWZm
ZXIsIElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2Nh
cGFjaXR5KSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgaXNJbmxp
bmVCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlciA9PSBtX2lubGluZUJ1ZmZlcjsgfQog
ICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICAgICAgY2hhciBtX2lubGluZUJ1ZmZlcltJbmxp
bmVDYXBhY2l0eV07CiAgICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CiAgICAgfTsKIAogICAg
IGNsYXNzIEFzc2VtYmxlckJ1ZmZlciB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgaW5pdGlh
bENhcGFjaXR5ID0gMTI4OwogICAgIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyQnVmZmVyKCkK
LSAgICAgICAgICAgIDogbV9zdG9yYWdlKGluaXRpYWxDYXBhY2l0eSkKKyAgICAgICAgICAgIDog
bV9zdG9yYWdlKCkKICAgICAgICAgICAgICwgbV9pbmRleCgwKQogICAgICAgICB7CiAgICAgICAg
IH0KQEAgLTEyOCw3ICsxNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVu
c3VyZVNwYWNlKHVuc2lnbmVkIHNwYWNlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlz
QXZhaWxhYmxlKHNwYWNlKSkKKyAgICAgICAgICAgIHdoaWxlICghaXNBdmFpbGFibGUoc3BhY2Up
KQogICAgICAgICAgICAgICAgIG91dE9mTGluZUdyb3coKTsKICAgICAgICAgfQogCkBAIC0xNTYs
NiArMTg0LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1faW5kZXg7
CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIHNldENvZGVTaXplKHNpemVfdCBpbmRleCkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gV2FybmluZzogT25seSB1c2UgdGhpcyBpZiB5b3Uga25v
dyBleGFjdGx5IHdoYXQgeW91IGFyZSBkb2luZy4KKyAgICAgICAgICAgIC8vIEZvciBleGFtcGxl
LCBzYXkgeW91IHdhbnQgNDAgYnl0ZXMgb2Ygbm9wcywgaXQncyBvayB0byBncm93CisgICAgICAg
ICAgICAvLyBhbmQgdGhlbiBmaWxsIDQwIGJ5dGVzIG9mIG5vcHMgdXNpbmcgYmlnZ2VyIGluc3Ry
dWN0aW9ucy4KKyAgICAgICAgICAgIG1faW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1faW5kZXggPD0gbV9zdG9yYWdlLmNhcGFjaXR5KCkpOworICAgICAgICB9CisK
ICAgICAgICAgQXNzZW1ibGVyTGFiZWwgbGFiZWwoKSBjb25zdAogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9pbmRleCk7CkBAIC0xNjMsNyArMjAwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdW5zaWduZWQgZGVidWdPZmZzZXQoKSB7IHJldHVy
biBtX2luZGV4OyB9CiAKLSAgICAgICAgQXNzZW1ibGVyRGF0YSByZWxlYXNlQXNzZW1ibGVyRGF0
YSgpIHsgcmV0dXJuIFdURk1vdmUobV9zdG9yYWdlKTsgfQorICAgICAgICBBc3NlbWJsZXJEYXRh
JiYgcmVsZWFzZUFzc2VtYmxlckRhdGEoKSB7IHJldHVybiBXVEZNb3ZlKG1fc3RvcmFnZSk7IH0K
IAogICAgICAgICAvLyBMb2NhbFdyaXRlciBpcyBhIHRyaWNrIHRvIGtlZXAgdGhlIHN0b3JhZ2Ug
YnVmZmVyIGFuZCB0aGUgaW5kZXgKICAgICAgICAgLy8gaW4gbWVtb3J5IHdoaWxlIGlzc3Vpbmcg
bXVsdGlwbGUgU3RvcmVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2MiAr
OTgsNzEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCByZWNvcmRMaW5rT2ZmcwogdGVtcGxh
dGUgPHR5cGVuYW1lIEluc3RydWN0aW9uVHlwZT4KIHZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBh
Y3RBbmRMaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQqIG93bmVy
VUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgbV9pbml0aWFsU2l6ZSA9
IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7Ci0gICAgYWxsb2NhdGUobV9p
bml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgYWxsb2NhdGUobWFjcm9Bc3NlbWJs
ZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGNvbnN0IHNpemVfdCBpbml0aWFsU2l6ZSA9IG1h
Y3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgaWYgKGRpZEZhaWxUb0Fs
bG9jYXRlKCkpCiAgICAgICAgIHJldHVybjsKKwogICAgIFZlY3RvcjxMaW5rUmVjb3JkLCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4mIGp1bXBzVG9MaW5rID0gbWFjcm9Bc3NlbWJsZXIuanVtcHNU
b0xpbmsoKTsKICAgICBtX2Fzc2VtYmxlclN0b3JhZ2UgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2Vt
Ymxlci5idWZmZXIoKS5yZWxlYXNlQXNzZW1ibGVyRGF0YSgpOwogICAgIHVpbnQ4X3QqIGluRGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fYXNzZW1ibGVyU3RvcmFnZS5idWZmZXIo
KSk7CiAKICAgICBBc3NlbWJsZXJEYXRhIG91dEJ1ZmZlcihtX3NpemUpOworCiAgICAgdWludDhf
dCogb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG91dEJ1ZmZlci5idWZmZXIo
KSk7CiAgICAgdWludDhfdCogY29kZU91dERhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihtX2NvZGUpOwogCiAgICAgaW50IHJlYWRQdHIgPSAwOwogICAgIGludCB3cml0ZVB0ciA9IDA7
CiAgICAgdW5zaWduZWQganVtcENvdW50ID0ganVtcHNUb0xpbmsuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wQ291bnQ7ICsraSkgewotICAgICAgICBpbnQgb2Zmc2V0
ID0gcmVhZFB0ciAtIHdyaXRlUHRyOwotICAgICAgICBBU1NFUlQoIShvZmZzZXQgJiAxKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgLy8gQ29weSB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGxh
c3QganVtcCB0byB0aGUgY3VycmVudCBvbmUuCi0gICAgICAgIHNpemVfdCByZWdpb25TaXplID0g
anVtcHNUb0xpbmtbaV0uZnJvbSgpIC0gcmVhZFB0cjsKLSAgICAgICAgSW5zdHJ1Y3Rpb25UeXBl
KiBjb3B5U291cmNlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SW5zdHJ1Y3Rpb25UeXBlKj4oaW5E
YXRhICsgcmVhZFB0cik7Ci0gICAgICAgIEluc3RydWN0aW9uVHlwZSogY29weUVuZCA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPEluc3RydWN0aW9uVHlwZSo+KGluRGF0YSArIHJlYWRQdHIgKyByZWdp
b25TaXplKTsKLSAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlKiBjb3B5RHN0ID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8SW5zdHJ1Y3Rpb25UeXBlKj4ob3V0RGF0YSArIHdyaXRlUHRyKTsKLSAgICAgICAg
QVNTRVJUKCEocmVnaW9uU2l6ZSAlIDIpKTsKLSAgICAgICAgQVNTRVJUKCEocmVhZFB0ciAlIDIp
KTsKLSAgICAgICAgQVNTRVJUKCEod3JpdGVQdHIgJSAyKSk7Ci0gICAgICAgIHdoaWxlIChjb3B5
U291cmNlICE9IGNvcHlFbmQpCi0gICAgICAgICAgICAqY29weURzdCsrID0gKmNvcHlTb3VyY2Ur
KzsKLSAgICAgICAgcmVjb3JkTGlua09mZnNldHMobV9hc3NlbWJsZXJTdG9yYWdlLCByZWFkUHRy
LCBqdW1wc1RvTGlua1tpXS5mcm9tKCksIG9mZnNldCk7Ci0gICAgICAgIHJlYWRQdHIgKz0gcmVn
aW9uU2l6ZTsKLSAgICAgICAgd3JpdGVQdHIgKz0gcmVnaW9uU2l6ZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgYWRkcmVzcyBvZiB0aGUganVtcCB0YXJnZXQs
IGluIHRoZSBjYXNlIG9mIGJhY2t3YXJkcwotICAgICAgICAvLyBicmFuY2hlcyB3ZSBuZWVkIHRv
IGJlIHByZWNpc2UsIGZvcndhcmQgYnJhbmNoZXMgd2UgYXJlIHBlc3NpbWlzdGljCi0gICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHRhcmdldDsKLSAgICAgICAgaWYgKGp1bXBzVG9MaW5rW2ldLnRvKCkg
Pj0ganVtcHNUb0xpbmtbaV0uZnJvbSgpKQotICAgICAgICAgICAgdGFyZ2V0ID0gY29kZU91dERh
dGEgKyBqdW1wc1RvTGlua1tpXS50bygpIC0gb2Zmc2V0OyAvLyBDb21wZW5zYXRlIGZvciB3aGF0
IHdlIGhhdmUgY29sbGFwc2VkIHNvIGZhcgotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0YXJn
ZXQgPSBjb2RlT3V0RGF0YSArIGp1bXBzVG9MaW5rW2ldLnRvKCkgLSBleGVjdXRhYmxlT2Zmc2V0
Rm9yKGp1bXBzVG9MaW5rW2ldLnRvKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIEp1bXBMaW5r
VHlwZSBqdW1wTGlua1R5cGUgPSBNYWNyb0Fzc2VtYmxlcjo6Y29tcHV0ZUp1bXBUeXBlKGp1bXBz
VG9MaW5rW2ldLCBjb2RlT3V0RGF0YSArIHdyaXRlUHRyLCB0YXJnZXQpOwotICAgICAgICAvLyBD
b21wYWN0IGJyYW5jaCBpZiB3ZSBjYW4uLi4KLSAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpj
YW5Db21wYWN0KGp1bXBzVG9MaW5rW2ldLnR5cGUoKSkpIHsKLSAgICAgICAgICAgIC8vIFN0ZXAg
YmFjayBpbiB0aGUgd3JpdGUgc3RyZWFtCi0gICAgICAgICAgICBpbnQzMl90IGRlbHRhID0gTWFj
cm9Bc3NlbWJsZXI6Omp1bXBTaXplRGVsdGEoanVtcHNUb0xpbmtbaV0udHlwZSgpLCBqdW1wTGlu
a1R5cGUpOwotICAgICAgICAgICAgaWYgKGRlbHRhKSB7Ci0gICAgICAgICAgICAgICAgd3JpdGVQ
dHIgLT0gZGVsdGE7Ci0gICAgICAgICAgICAgICAgcmVjb3JkTGlua09mZnNldHMobV9hc3NlbWJs
ZXJTdG9yYWdlLCBqdW1wc1RvTGlua1tpXS5mcm9tKCkgLSBkZWx0YSwgcmVhZFB0ciwgcmVhZFB0
ciAtIHdyaXRlUHRyKTsKKyAgICBpZiAobV9zaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbikg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwganVtcENvdW50OyArK2kpIHsKKyAg
ICAgICAgICAgIGludCBvZmZzZXQgPSByZWFkUHRyIC0gd3JpdGVQdHI7CisgICAgICAgICAgICBB
U1NFUlQoIShvZmZzZXQgJiAxKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBD
b3B5IHRoZSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgbGFzdCBqdW1wIHRvIHRoZSBjdXJyZW50IG9u
ZS4KKyAgICAgICAgICAgIHNpemVfdCByZWdpb25TaXplID0ganVtcHNUb0xpbmtbaV0uZnJvbSgp
IC0gcmVhZFB0cjsKKyAgICAgICAgICAgIEluc3RydWN0aW9uVHlwZSogY29weVNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPEluc3RydWN0aW9uVHlwZSo+KGluRGF0YSArIHJlYWRQdHIpOwor
ICAgICAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlKiBjb3B5RW5kID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8SW5zdHJ1Y3Rpb25UeXBlKj4oaW5EYXRhICsgcmVhZFB0ciArIHJlZ2lvblNpemUpOworICAg
ICAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlKiBjb3B5RHN0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
SW5zdHJ1Y3Rpb25UeXBlKj4ob3V0RGF0YSArIHdyaXRlUHRyKTsKKyAgICAgICAgICAgIEFTU0VS
VCghKHJlZ2lvblNpemUgJSAyKSk7CisgICAgICAgICAgICBBU1NFUlQoIShyZWFkUHRyICUgMikp
OworICAgICAgICAgICAgQVNTRVJUKCEod3JpdGVQdHIgJSAyKSk7CisgICAgICAgICAgICB3aGls
ZSAoY29weVNvdXJjZSAhPSBjb3B5RW5kKQorICAgICAgICAgICAgICAgICpjb3B5RHN0KysgPSAq
Y29weVNvdXJjZSsrOworICAgICAgICAgICAgcmVjb3JkTGlua09mZnNldHMobV9hc3NlbWJsZXJT
dG9yYWdlLCByZWFkUHRyLCBqdW1wc1RvTGlua1tpXS5mcm9tKCksIG9mZnNldCk7CisgICAgICAg
ICAgICByZWFkUHRyICs9IHJlZ2lvblNpemU7CisgICAgICAgICAgICB3cml0ZVB0ciArPSByZWdp
b25TaXplOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGFic29s
dXRlIGFkZHJlc3Mgb2YgdGhlIGp1bXAgdGFyZ2V0LCBpbiB0aGUgY2FzZSBvZiBiYWNrd2FyZHMK
KyAgICAgICAgICAgIC8vIGJyYW5jaGVzIHdlIG5lZWQgdG8gYmUgcHJlY2lzZSwgZm9yd2FyZCBi
cmFuY2hlcyB3ZSBhcmUgcGVzc2ltaXN0aWMKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHRh
cmdldDsKKyAgICAgICAgICAgIGlmIChqdW1wc1RvTGlua1tpXS50bygpID49IGp1bXBzVG9MaW5r
W2ldLmZyb20oKSkKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBjb2RlT3V0RGF0YSArIGp1bXBz
VG9MaW5rW2ldLnRvKCkgLSBvZmZzZXQ7IC8vIENvbXBlbnNhdGUgZm9yIHdoYXQgd2UgaGF2ZSBj
b2xsYXBzZWQgc28gZmFyCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGFyZ2V0
ID0gY29kZU91dERhdGEgKyBqdW1wc1RvTGlua1tpXS50bygpIC0gZXhlY3V0YWJsZU9mZnNldEZv
cihqdW1wc1RvTGlua1tpXS50bygpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIEp1
bXBMaW5rVHlwZSBqdW1wTGlua1R5cGUgPSBNYWNyb0Fzc2VtYmxlcjo6Y29tcHV0ZUp1bXBUeXBl
KGp1bXBzVG9MaW5rW2ldLCBjb2RlT3V0RGF0YSArIHdyaXRlUHRyLCB0YXJnZXQpOworICAgICAg
ICAgICAgLy8gQ29tcGFjdCBicmFuY2ggaWYgd2UgY2FuLi4uCisgICAgICAgICAgICBpZiAoTWFj
cm9Bc3NlbWJsZXI6OmNhbkNvbXBhY3QoanVtcHNUb0xpbmtbaV0udHlwZSgpKSkgeworICAgICAg
ICAgICAgICAgIC8vIFN0ZXAgYmFjayBpbiB0aGUgd3JpdGUgc3RyZWFtCisgICAgICAgICAgICAg
ICAgaW50MzJfdCBkZWx0YSA9IE1hY3JvQXNzZW1ibGVyOjpqdW1wU2l6ZURlbHRhKGp1bXBzVG9M
aW5rW2ldLnR5cGUoKSwganVtcExpbmtUeXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVsdGEp
IHsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVQdHIgLT0gZGVsdGE7CisgICAgICAgICAgICAg
ICAgICAgIHJlY29yZExpbmtPZmZzZXRzKG1fYXNzZW1ibGVyU3RvcmFnZSwganVtcHNUb0xpbmtb
aV0uZnJvbSgpIC0gZGVsdGEsIHJlYWRQdHIsIHJlYWRQdHIgLSB3cml0ZVB0cik7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAganVtcHNUb0xpbmtbaV0uc2V0
RnJvbSh3cml0ZVB0cik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGp1
bXBDb3VudDsgKytpKQorICAgICAgICAgICAgICAgIEFTU0VSVCghTWFjcm9Bc3NlbWJsZXI6OmNh
bkNvbXBhY3QoanVtcHNUb0xpbmtbaV0udHlwZSgpKSk7CiAgICAgICAgIH0KLSAgICAgICAganVt
cHNUb0xpbmtbaV0uc2V0RnJvbSh3cml0ZVB0cik7CiAgICAgfQogICAgIC8vIENvcHkgZXZlcnl0
aGluZyBhZnRlciB0aGUgbGFzdCBqdW1wCi0gICAgbWVtY3B5KG91dERhdGEgKyB3cml0ZVB0ciwg
aW5EYXRhICsgcmVhZFB0ciwgbV9pbml0aWFsU2l6ZSAtIHJlYWRQdHIpOwotICAgIHJlY29yZExp
bmtPZmZzZXRzKG1fYXNzZW1ibGVyU3RvcmFnZSwgcmVhZFB0ciwgbV9pbml0aWFsU2l6ZSwgcmVh
ZFB0ciAtIHdyaXRlUHRyKTsKKyAgICBtZW1jcHkob3V0RGF0YSArIHdyaXRlUHRyLCBpbkRhdGEg
KyByZWFkUHRyLCBpbml0aWFsU2l6ZSAtIHJlYWRQdHIpOworICAgIHJlY29yZExpbmtPZmZzZXRz
KG1fYXNzZW1ibGVyU3RvcmFnZSwgcmVhZFB0ciwgaW5pdGlhbFNpemUsIHJlYWRQdHIgLSB3cml0
ZVB0cik7CiAgICAgICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wQ291bnQ7
ICsraSkgewogICAgICAgICB1aW50OF90KiBsb2NhdGlvbiA9IGNvZGVPdXREYXRhICsganVtcHNU
b0xpbmtbaV0uZnJvbSgpOwpAQCAtMTYyLDEyICsxNzEsMjEgQEAgdm9pZCBMaW5rQnVmZmVyOjpj
b3B5Q29tcGFjdEFuZExpbmtDb2RlKAogICAgIH0KIAogICAgIGp1bXBzVG9MaW5rLmNsZWFyKCk7
Ci0gICAgc2hyaW5rKHdyaXRlUHRyICsgbV9pbml0aWFsU2l6ZSAtIHJlYWRQdHIpOwogCi0gICAg
cGVyZm9ybUpJVE1lbWNweShtX2NvZGUsIG91dEJ1ZmZlci5idWZmZXIoKSwgbV9zaXplKTsKKyAg
ICBzaXplX3QgY29tcGFjdFNpemUgPSB3cml0ZVB0ciArIGluaXRpYWxTaXplIC0gcmVhZFB0cjsK
KyAgICBpZiAobV9leGVjdXRhYmxlTWVtb3J5KSB7CisgICAgICAgIG1fc2l6ZSA9IGNvbXBhY3RT
aXplOworICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnktPnNocmluayhtX3NpemUpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHNpemVfdCBub3BTaXplSW5CeXRlcyA9IGluaXRpYWxTaXplIC0gY29t
cGFjdFNpemU7CisgICAgICAgIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5ID0gZmFs
c2U7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKG91
dERhdGEgKyBjb21wYWN0U2l6ZSwgbm9wU2l6ZUluQnl0ZXMsIGlzQ29weWluZ1RvRXhlY3V0YWJs
ZU1lbW9yeSk7CisgICAgfQorCisgICAgcGVyZm9ybUpJVE1lbWNweShtX2NvZGUsIG91dERhdGEs
IG1fc2l6ZSk7CiAKICNpZiBEVU1QX0xJTktfU1RBVElTVElDUwotICAgIGR1bXBMaW5rU3RhdGlz
dGljcyhtX2NvZGUsIG1faW5pdGlhbFNpemUsIG1fc2l6ZSk7CisgICAgZHVtcExpbmtTdGF0aXN0
aWNzKG1fY29kZSwgaW5pdGlhbFNpemUsIG1fc2l6ZSk7CiAjZW5kaWYKICNpZiBEVU1QX0NPREUK
ICAgICBkdW1wQ29kZShtX2NvZGUsIG1fc2l6ZSk7CkBAIC0xODIsMTEgKzIwMCwxMSBAQCB2b2lk
IExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjaWYgZGVmaW5lZChBU1NFTUJM
RVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAogICAg
IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmZsdXNoQ29uc3RhbnRQb29sKGZh
bHNlKTsKICNlbmRpZgotICAgIEFzc2VtYmxlckJ1ZmZlciYgYnVmZmVyID0gbWFjcm9Bc3NlbWJs
ZXIubV9hc3NlbWJsZXIuYnVmZmVyKCk7Ci0gICAgYWxsb2NhdGUoYnVmZmVyLmNvZGVTaXplKCks
IG93bmVyVUlELCBlZmZvcnQpOworICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJ
RCwgZWZmb3J0KTsKICAgICBpZiAoIW1fZGlkQWxsb2NhdGUpCiAgICAgICAgIHJldHVybjsKICAg
ICBBU1NFUlQobV9jb2RlKTsKKyAgICBBc3NlbWJsZXJCdWZmZXImIGJ1ZmZlciA9IG1hY3JvQXNz
ZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZlcigpOwogI2lmIENQVShBUk1fVFJBRElUSU9OQUwpCiAg
ICAgbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIucHJlcGFyZUV4ZWN1dGFibGVDb3B5KG1fY29k
ZSk7CiAjZW5kaWYKQEAgLTE5OCwxOSArMjE2LDIxIEBAIHZvaWQgTGlua0J1ZmZlcjo6bGlua0Nv
ZGUoTWFjcm9Bc3NlbWJsZXIKICAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVpbnQxNl90Piht
YWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7CiAjZWxpZiBDUFUoQVJNNjQpCiAgICAg
Y29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlE
LCBlZmZvcnQpOwotI2VuZGlmCisjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikK
IAogICAgIG1fbGlua1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7
CiB9CiAKLXZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoc2l6ZV90IGluaXRpYWxTaXplLCB2b2lk
KiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVy
OjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQqIG93bmVyVUlE
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CisgICAgc2l6ZV90IGluaXRpYWxTaXpl
ID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICBpZiAobV9jb2Rl
KSB7CiAgICAgICAgIGlmIChpbml0aWFsU2l6ZSA+IG1fc2l6ZSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCisgICAgICAgIHNpemVfdCBub3BzVG9GaWxsSW5CeXRlcyA9IG1fc2l6ZSAt
IGluaXRpYWxTaXplOworICAgICAgICBtYWNyb0Fzc2VtYmxlci5lbWl0Tm9wcyhub3BzVG9GaWxs
SW5CeXRlcyk7CiAgICAgICAgIG1fZGlkQWxsb2NhdGUgPSB0cnVlOwotICAgICAgICBtX3NpemUg
PSBpbml0aWFsU2l6ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTIyMywxNCAr
MjQzLDYgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShzaXplX3QgaW5pdGlhbAogICAgIG1f
ZGlkQWxsb2NhdGUgPSB0cnVlOwogfQogCi12b2lkIExpbmtCdWZmZXI6OnNocmluayhzaXplX3Qg
bmV3U2l6ZSkKLXsKLSAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fc2l6ZSA9IG5ld1NpemU7Ci0gICAgbV9leGVjdXRhYmxlTWVtb3J5LT5zaHJpbmso
bV9zaXplKTsKLX0KLQogdm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKCkKIHsK
ICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX2xpbmtUYXNrcykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyMDIxNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtODIsOSArODIsNiBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKIHB1YmxpYzoKICAgICBMaW5r
QnVmZmVyKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25l
clVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0ID0gSklUQ29tcGlsYXRpb25NdXN0U3Vj
Y2VlZCkKICAgICAgICAgOiBtX3NpemUoMCkKLSNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04p
Ci0gICAgICAgICwgbV9pbml0aWFsU2l6ZSgwKQotI2VuZGlmCiAgICAgICAgICwgbV9kaWRBbGxv
Y2F0ZShmYWxzZSkKICAgICAgICAgLCBtX2NvZGUoMCkKICAgICAgICAgLCBtX3ZtKCZ2bSkKQEAg
LTk1LDExICs5Miw4IEBAIHB1YmxpYzoKICAgICAgICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIs
IG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAotICAgIExpbmtCdWZmZXIoTWFjcm9Bc3NlbWJs
ZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0ID0gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkKKyAgICBMaW5rQnVm
ZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogY29kZSwgc2l6ZV90IHNp
emUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQsIGJvb2wgc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24gPSB0cnVlKQogICAgICAgICA6
IG1fc2l6ZShzaXplKQotI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKLSAgICAgICAgLCBt
X2luaXRpYWxTaXplKDApCi0jZW5kaWYKICAgICAgICAgLCBtX2RpZEFsbG9jYXRlKGZhbHNlKQog
ICAgICAgICAsIG1fY29kZShjb2RlKQogICAgICAgICAsIG1fdm0oMCkKQEAgLTEwNyw2ICsxMDEs
MTEgQEAgcHVibGljOgogICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQogI2VuZGlmCiAgICAg
eworI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKKyAgICAgICAgbV9zaG91bGRQZXJmb3Jt
QnJhbmNoQ29tcGFjdGlvbiA9IHNob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uOworI2Vsc2UK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHNob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uKTsKKyNl
bmRpZgogICAgICAgICBsaW5rQ29kZShtYWNyb0Fzc2VtYmxlciwgMCwgZWZmb3J0KTsKICAgICB9
CiAKQEAgLTI1MCwxMSArMjQ5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlOwog
ICAgIH0KIAotICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IGFjY291bnQgZm9yIHRoZSBBc3Nl
bWJsZXJEYXRhIHNpemUhCi0gICAgc2l6ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fc2l6ZTsKLSAgICB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KICAgICAKICAgICBib29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX2FscmVhZHlEaXNhc3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJs
ZSgpIHsgbV9hbHJlYWR5RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQpAQCAtMjc4LDE1ICsyNzMsMTQg
QEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICByZXR1cm4gc3JjOwogICAgIH0KLSAgICAKKwog
ICAgIC8vIEtlZXAgdGhpcyBwcml2YXRlISAtIHRoZSB1bmRlcmx5aW5nIGNvZGUgc2hvdWxkIG9u
bHkgYmUgb2J0YWluZWQgZXh0ZXJuYWxseSB2aWEgZmluYWxpemVDb2RlKCkuCiAgICAgdm9pZCog
Y29kZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9jb2RlOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGFsbG9jYXRlKHNpemVfdCBpbml0aWFsU2l6ZSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0KTsKLSAgICB2b2lkIHNocmluayhzaXplX3QgbmV3U2l6ZSk7CisgICAgdm9p
ZCBhbGxvY2F0ZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlv
bkVmZm9ydCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxpbmtDb2RlKE1hY3JvQXNz
ZW1ibGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNpZiBFTkFC
TEUoQlJBTkNIX0NPTVBBQ1RJT04pCkBAIC0zMDcsOCArMzAxLDggQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogICAgIHNp
emVfdCBtX3NpemU7CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQotICAgIHNpemVfdCBt
X2luaXRpYWxTaXplOwogICAgIEFzc2VtYmxlckRhdGEgbV9hc3NlbWJsZXJTdG9yYWdlOworICAg
IGJvb2wgbV9zaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbiB7IHRydWUgfTsKICNlbmRpZgog
ICAgIGJvb2wgbV9kaWRBbGxvY2F0ZTsKICAgICB2b2lkKiBtX2NvZGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwODcsNiArMzA4NywxNCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKHJlc3VsdCk7CiAgICAgfQog
CisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIGltbSkKKyAgICB7CisgICAgICAgIG1f
bWFrZUp1bXBQYXRjaGFibGUgPSB0cnVlOworICAgICAgICBKdW1wIHJlc3VsdCA9IGJyYW5jaDMy
KGNvbmQsIGxlZnQsIGltbSk7CisgICAgICAgIG1fbWFrZUp1bXBQYXRjaGFibGUgPSBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAocmVzdWx0KTsKKyAgICB9CisKICAgICBQYXRj
aGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCByZWcsIFRydXN0ZWRJbW02NCBpbW0pCiAgICAgewogICAgICAgICBtX21ha2VKdW1w
UGF0Y2hhYmxlID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiAyMDIxNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg2OCw2ICsxODY4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IFBhdGNoYWJsZUp1bXAocmVzdWx0KTsKICAgICB9CiAKKyAgICBQYXRjaGFibGVKdW1wIHBhdGNo
YWJsZUJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVz
dGVkSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbV9tYWtlSnVtcFBhdGNoYWJsZSA9IHRydWU7
CisgICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1tKTsKKyAgICAg
ICAgbV9tYWtlSnVtcFBhdGNoYWJsZSA9IGZhbHNlOworICAgICAgICByZXR1cm4gUGF0Y2hhYmxl
SnVtcChyZXN1bHQpOworICAgIH0KKwogICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRh
TGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IFRy
dXN0ZWRJbW1QdHIoMCkpCiAgICAgewogICAgICAgICBtX21ha2VKdW1wUGF0Y2hhYmxlID0gdHJ1
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjk0Niw4ICsyOTQ2LDkgQEAgcHVi
bGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfTk9QKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSkKKyAgICBzdGF0
aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgYm9vbCBpc0NvcHlpbmdU
b0V4ZWN1dGFibGVNZW1vcnkpCiAgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oaXNDb3B5aW5n
VG9FeGVjdXRhYmxlTWVtb3J5KTsKICNpZiBDUFUoWDg2XzY0KQogICAgICAgICBzdGF0aWMgY29u
c3QgdWludDhfdCBub3BzWzEwXVsxMF0gPSB7CiAgICAgICAgICAgICAvLyBub3AKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAy
MDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDM5LDYgKzQzOSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdl
dEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAg
ICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJBcnJh
eUxlbmd0aCIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmVTdHViSW5mby5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lk
IElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzaChWTSYgdm0pCit7CisgICAgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpy
ZWdUMTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEpTVmFsdWVSZWdzIHJlZ3MoYmFzZSwg
dmFsdWUpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZWdzKGJhc2UpOworI2VuZGlmCisKKyAg
ICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHZhbHVlOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGpp
dC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFw
ZU1hc2spLCB2YWx1ZSk7CisgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKKyAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihJc0FycmF5IHwgQ29udGlndW91c1NoYXBlKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2
YWx1ZSk7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBqaXQuYm94SW50
MzIoc2NyYXRjaEdQUiwgcmVncyk7CisKKyAgICAgICAgZGF0YUxvZygiYXJyYXkgbGVuZ3RoIHNp
emU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBqaXQu
cGF0Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigweDAwMGFiMjFjYSkpOworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAg
ICAgICAgICAgdmFsdWUpOworICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHZhbHVlOworICAg
ICAgICBqaXQubG9hZFZhbHVlKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIDB4MDAwYWIyMWNhKSwgcmVncyk7CisKKyAgICAgICAgZGF0YUxvZygib3V0IG9m
IGxpbmUgb2Zmc2V0IGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2Rl
U2l6ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQo
JnZtKTsKKworICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOworICAgICAgICBqaXQubG9hZFZh
bHVlKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgMHgwMDBhYjIx
Y2EpLCByZWdzKTsKKworICAgICAgICBkYXRhTG9nKCJpbmxpbmUgb2Zmc2V0IGNhY2hlIHNpemU6
ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKworICAgICAgICBqaXQucGF0
Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
eDAwMGFiMjFjYSkpOworCisgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgcmVn
cywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgMHgwMDBhYjIxY2EpKTsKKworICAgICAg
ICBkYXRhTG9nKCJyZXBsYWNlIGNhY2hlIHNpemU6ICIsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIo
KS5jb2RlU2l6ZSgpLCAiXG4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVy
cyBqaXQoJnZtKTsKKworICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDAwMGFiMjFjYSkpOworCisgICAgICAgIGpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAg
ICByZWdzLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgMTIwMzQy
KSk7CisKKyAgICAgICAgZGF0YUxvZygicmVwbGFjZSBvdXQgb2YgbGluZSBjYWNoZSBzaXplOiAi
LCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgIlxuIik7CisgICAgfQorCisg
ICAgQ1JBU0goKTsKK30KKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitBTFdBWVNf
SU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lKGNvbnN0IGNoYXIqIG5hbWUsIENDYWxs
SGVscGVycyYgaml0LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IEZ1bmN0aW9u
JiBmdW5jdGlvbikKK3sKKyAgICBpZiAoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXpl
KCkgPD0gc3R1YkluZm8ucGF0Y2guaW5saW5lU2l6ZSkgeworICAgICAgICBib29sIG5lZWRzQnJh
bmNoQ29tcGFjdGlvbiA9IGZhbHNlOworICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0
LCBzdHViSW5mby5wYXRjaC5zdGFydC5kYXRhTG9jYXRpb24oKSwgc3R1YkluZm8ucGF0Y2guaW5s
aW5lU2l6ZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbmVlZHNCcmFuY2hDb21wYWN0aW9u
KTsKKyAgICAgICAgQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAgICAgICAgZnVuY3Rp
b24obGlua0J1ZmZlcik7CisgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJJbmxp
bmVBY2Nlc3NUeXBlOiAnJXMnIiwgbmFtZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBUaGlzIGlzIGhlbHBmdWwgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2l6ZSBmb3Ig
aW5saW5lIElDcyBvbiB2YXJpb3VzCisgICAgLy8gcGxhdGZvcm1zLiBZb3Ugd2FudCB0byBjaG9v
c2UgYSBzaXplIHRoYXQgdXN1YWxseSBzdWNjZWVkcywgYnV0IHNvbWV0aW1lcworICAgIC8vIHRo
ZXJlIG1heSBiZSB2YXJpYWJpbGl0eSBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBjb2RlIHdlIGdlbmVy
YXRlIGp1c3QgYmVjYXVzZQorICAgIC8vIG9mIHJhbmRvbW5lc3MuIEl0J3MgaGVscGZ1bCB0byBm
bGlwIHRoaXMgb24gd2hlbiBydW5uaW5nIHRlc3RzIG9yIGJyb3dzaW5nCisgICAgLy8gdGhlIHdl
YiBqdXN0IHRvIHNlZSBob3cgb2Z0ZW4gaXQgZmFpbHMuIFlvdSBkb24ndCB3YW50IGFuIElDIHNp
emUgdGhhdCBhbHdheXMgZmFpbHMuCisgICAgY29uc3QgYm9vbCBmYWlsSWZDYW50SW5saW5lID0g
ZmFsc2U7CisgICAgaWYgKGZhaWxJZkNhbnRJbmxpbmUpIHsKKyAgICAgICAgZGF0YUxvZygiRmFp
bHVyZSBmb3I6ICIsIG5hbWUsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJyZWFsIHNpemU6ICIs
IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCAiIGlubGluZSBzaXplOiIsIHN0
dWJJbmZvLnBhdGNoLmlubGluZVNpemUsICJcbiIpOworICAgICAgICBDUkFTSCgpOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZlByb3BlcnR5QWNjZXNzKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIENDYWxsSGVs
cGVycyBqaXQoJnZtKTsKKworICAgIEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZv
LnZhbHVlUmVncygpOworCisgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LnBhdGNoYWJs
ZUJyYW5jaDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYml0d2lzZV9jYXN0PHVpbnQz
Ml90PihzdHJ1Y3R1cmUtPmlkKCkpKSk7CisgICAgR1BSUmVnIHN0b3JhZ2U7CisgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHN0b3JhZ2UgPSBiYXNlOworICAgIGVsc2Ug
eworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUucGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3Rv
cmFnZSA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICB9CisKKyAgICBqaXQubG9hZFZhbHVlKAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShvZmZzZXQpKSwgdmFsdWUpOworCisgICAgYm9vbCBsaW5rZWRDb2RlSW5saW5lID0gbGlu
a0NvZGVJbmxpbmUoInByb3BlcnR5IGFjY2VzcyIsIGppdCwgc3R1YkluZm8sIFsmXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoYnJhbmNoVG9TbG93
UGF0aCwgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOworICAgIH0pOworICAgIHJl
dHVybiBsaW5rZWRDb2RlSW5saW5lOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBHUFJSZWcg
Z2V0U2NyYXRjaFJlZ2lzdGVyKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdp
c3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guYmFzZUdQUikpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGFs
bG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZVRhZ0dQ
UikpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2gudmFsdWVUYWdHUFIpKTsKKyNlbmRpZgorICAgIEdQUlJlZyBzY3JhdGNoID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3Rl
cnMoKSkKKyAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgcmV0dXJuIHNjcmF0Y2g7
Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lzdGVyKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0
dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOworfQorCitib29sIElubGluZUFjY2Vzczo6Y2FuR2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1Yklu
Zm8pOworfQorCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworCisgICAgQ0NhbGxIZWxwZXJzIGpp
dCgmdm0pOworCisgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLmJhc2VHUFIpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVS
ZWdzKCk7CisKKyAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQucGF0Y2hhYmxlQnJhbmNo
MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0
cnVjdHVyZS0+aWQoKSkpKTsKKworICAgIEdQUlJlZyBzdG9yYWdlOworICAgIGlmIChpc0lubGlu
ZU9mZnNldChvZmZzZXQpKQorICAgICAgICBzdG9yYWdlID0gYmFzZTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgc3RvcmFnZSA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbyk7CisgICAgICAgIEFT
U0VSVChzdG9yYWdlICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3Rv
cmFnZSk7CisgICAgfQorCisgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgIHZhbHVlLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQp
KSk7CisKKyAgICBib29sIGxpbmtlZENvZGVJbmxpbmUgPSBsaW5rQ29kZUlubGluZSgicHJvcGVy
dHkgcmVwbGFjZSIsIGppdCwgc3R1YkluZm8sIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoYnJhbmNoVG9TbG93UGF0aCwgc3R1YkluZm8uc2xv
d1BhdGhTdGFydExvY2F0aW9uKCkpOworICAgIH0pOworICAgIHJldHVybiBsaW5rZWRDb2RlSW5s
aW5lOworfQorCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQoreworICAgIEFTU0VSVChh
cnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKworICAgIGlmICghaGFzRnJlZVJlZ2lz
dGVyKHN0dWJJbmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGFycmF5
LT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhJbnQzMgorICAgICAgICB8fCBhcnJheS0+aW5k
ZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlCisgICAgICAgIHx8IGFycmF5LT5pbmRleGlu
Z1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzOworfQorCitib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVBcnJheUxlbmd0aChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
SlNBcnJheSogYXJyYXkpCit7CisgICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1
YkluZm8sIGFycmF5KSk7CisKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisKKyAgICBHUFJS
ZWcgYmFzZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Cisg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcg
c2NyYXRjaCA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbyk7CisKKyAgICBqaXQubG9hZDgo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNB
cnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaCk7CisgICAgYXV0byBicmFuY2hUb1Ns
b3dQYXRoID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhcnJheS0+aW5kZXhp
bmdUeXBlKCkpKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUucGF5bG9hZEdQUigpKTsKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyh2YWx1ZS5wYXlsb2FkR1BSKCksIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkpOworICAgIGppdC5i
b3hJbnQzMih2YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlKTsKKworICAgIGJvb2wgbGlua2VkQ29k
ZUlubGluZSA9IGxpbmtDb2RlSW5saW5lKCJhcnJheSBsZW5ndGgiLCBqaXQsIHN0dWJJbmZvLCBb
Jl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGJy
YW5jaFRvU2xvd1BhdGgsIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKKyAgICB9
KTsKKyAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKK30KKwordm9pZCBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXAoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsIHRhcmdldCkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisK
KyAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5v
cCBzbGVkIGhlcmUgYmVjYXVzZSBub2JvZHkgc2hvdWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlk
ZGxlIG9mIGFuIElDLgorICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7Cisg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8ucGF0Y2guc3RhcnQuZGF0YUxv
Y2F0aW9uKCksIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOworICAgIFJFTEVBU0VfQVNT
RVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgdGFy
Z2V0KTsKKworICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJJbmxpbmVBY2Nlc3M6IGxp
bmtpbmcgY29uc3RhbnQganVtcCIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIElu
bGluZUFjY2Vzc19oCisjZGVmaW5lIElubGluZUFjY2Vzc19oCisKKyNpZiBFTkFCTEUoSklUKQor
CisjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXk7CitjbGFzcyBTdHJ1Y3R1cmU7Citj
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIFZNOworCitjbGFzcyBJbmxpbmVBY2Nlc3Mg
eworcHVibGljOgorCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZUZvclByb3BlcnR5
QWNjZXNzKCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDIzOworI2Vs
aWYgQ1BVKFg4NikKKyAgICAgICAgcmV0dXJuIDI3OworI2VsaWYgQ1BVKEFSTTY0KQorICAgICAg
ICByZXR1cm4gNDA7CisjZWxpZiBDUFUoQVJNKQorI2lmIENQVShBUk1fVEhVTUIyKQorICAgICAg
ICByZXR1cm4gNDg7CisjZWxzZQorICAgICAgICByZXR1cm4gNTA7CisjZW5kaWYKKyNlbHNlCisj
ZXJyb3IgInVuc3VwcG9ydGVkIHBsYXRmb3JtIgorI2VuZGlmCisgICAgfQorCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3Qgc2l6ZUZvclByb3BlcnR5UmVwbGFjZSgpCisgICAgeworI2lmIENQ
VShYODZfNjQpCisgICAgICAgIHJldHVybiAyMzsKKyNlbGlmIENQVShYODYpCisgICAgICAgIHJl
dHVybiAyNzsKKyNlbGlmIENQVShBUk02NCkKKyAgICAgICAgcmV0dXJuIDQwOworI2VsaWYgQ1BV
KEFSTSkKKyNpZiBDUFUoQVJNX1RIVU1CMikKKyAgICAgICAgcmV0dXJuIDQ4OworI2Vsc2UKKyAg
ICAgICAgcmV0dXJuIDUwOworI2VuZGlmCisjZWxzZQorI2Vycm9yICJ1bnN1cHBvcnRlZCBwbGF0
Zm9ybSIKKyNlbmRpZgorICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemVG
b3JMZW5ndGhBY2Nlc3MoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4g
MjY7CisjZWxpZiBDUFUoWDg2KQorICAgICAgICByZXR1cm4gMjc7CisjZWxpZiBDUFUoQVJNNjQp
CisgICAgICAgIHJldHVybiAzMjsKKyNlbGlmIENQVShBUk0pCisjaWYgQ1BVKEFSTV9USFVNQjIp
CisgICAgICAgIHJldHVybiAzMDsKKyNlbHNlCisgICAgICAgIHJldHVybiA1MDsKKyNlbmRpZgor
I2Vsc2UKKyNlcnJvciAidW5zdXBwb3J0ZWQgcGxhdGZvcm0iCisjZW5kaWYKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhWTSYsIFN0cnVjdHVyZVN0
dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGNh
bkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoVk0m
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBz
dGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNB
cnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoVk0mLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1w
KFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbCk7CisKKyAgICAvLyBU
aGlzIGlzIGhlbHBmdWwgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2l6ZSBvZiBhbiBJQyBvbgorICAg
IC8vIHZhcmlvdXMgcGxhdGZvcm1zLiBXaGVuIGFkZGluZyBhIG5ldyB0eXBlIG9mIElDLCBpbXBs
ZW1lbnQKKyAgICAvLyBpdHMgcGxhY2Vob2xkZXIgY29kZSBoZXJlLCBhbmQgbG9nIHRoZSBzaXpl
LiBUaGF0IHdheSB3ZQorICAgIC8vIGNhbiBpbnRlbGxpZ2VudGx5IGNob29zZSBzaXplcyBvbiB2
YXJpb3VzIHBsYXRmb3Jtcy4KKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZHVtcENh
Y2hlU2l6ZXNBbmRDcmFzaChWTSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gSW5saW5lQWNjZXNzX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAkocmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1MSwxMSArMTU1MSw3IEBA
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICBzdGF0ZS5pZGVu
dCA9ICZpZGVudDsKICAgICAKICAgICBzdGF0ZS5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSAgICBzdGF0ZS52YWx1ZVJlZ3MgPSBKU1ZhbHVl
UmVncygKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwKLSNlbmRpZgotICAgICAgICBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7CisgICAgc3RhdGUudmFsdWVSZWdz
ID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Ig
YWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwogICAgIHN0YXRlLmFsbG9j
YXRvciA9ICZhbGxvY2F0b3I7CkBAIC0xNzUzLDE0ICsxNzQ5LDExIEBAIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgcmV0dXJuIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQ6OkdhdmVVcDsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNz
TGFiZWwgPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpOworICAgIENvZGVMb2NhdGlvbkxhYmVs
IHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmRvbmVMb2NhdGlvbigpOwogICAgICAgICAKICAgICBs
aW5rQnVmZmVyLmxpbmsoc3RhdGUuc3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsKIAotICAgIGxpbmtC
dWZmZXIubGluaygKLSAgICAgICAgZmFpbHVyZSwKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSkpOworICAgIGxpbmtCdWZmZXIubGluayhmYWlsdXJlLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0
TG9jYXRpb24oKSk7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coKmNv
ZGVCbG9jaywgIiAiLCBzdHViSW5mby5jb2RlT3JpZ2luLCAiOiBHZW5lcmF0aW5nIHBvbHltb3Jw
aGljIGFjY2VzcyBzdHViIGZvciAiLCBsaXN0RHVtcChjYXNlcyksICJcbiIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMSBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgdS5ieUlkU2VsZi5v
ZmZzZXQgPSBvZmZzZXQ7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxl
bmd0aCgpCit7CisgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDsKK30KKwog
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKIHsKICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOwpAQCAt
ODcsNiArOTIsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgY2FzZSBD
YWNoZVR5cGU6OlVuc2V0OgogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICBj
YXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5
TGVuZ3RoOgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDIsNiArMTA4LDcgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWJvdXRUb0RpZSgpCiAgICAgY2FzZSBDYWNoZVR5cGU6OlVu
c2V0OgogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICBjYXNlIENhY2hlVHlw
ZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNTcsNiArMjY0LDcgQEAgYm9vbCBTdHJ1Y3R1cmVT
dHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdAogewogICAgIHN3aXRjaCAoY2FjaGVUeXBlKSB7CiAg
ICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0
aDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
OgogICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKQEAgLTI3NSw2ICsyODMsNyBA
QCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjpjb250YWluc1BDKHZvaWQqCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gdS5zdHViLT5jb250YWluc1BDKHBjKTsKIH0KLSNlbmRpZgor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAko
cmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDggQEAgZW51bSBjbGFz
cyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFVuc2V0LAogICAgIEdldEJ5SWRTZWxmLAogICAg
IFB1dEJ5SWRSZXBsYWNlLAotICAgIFN0dWIKKyAgICBTdHViLAorICAgIEFycmF5TGVuZ3RoCiB9
OwogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CkBAIC02OCw2ICs2OSw3IEBAIHB1YmxpYzoK
ICAgICB+U3RydWN0dXJlU3R1YkluZm8oKTsKIAogICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKENv
ZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQp
OworICAgIHZvaWQgaW5pdEFycmF5TGVuZ3RoKCk7CiAgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxh
Y2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCk7CiAgICAgdm9pZCBpbml0U3R1YihDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UG9s
eW1vcnBoaWNBY2Nlc3M+KTsKIApAQCAtMTQzLDEzICsxNDUsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJu
TG9jYXRpb247CisgICAgYm9vbCBjb250YWluc1BDKHZvaWQqIHBjKSBjb25zdDsKIAogICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7CiAK
LSAgICBib29sIGNvbnRhaW5zUEModm9pZCogcGMpIGNvbnN0OwotCiAgICAgdW5pb24gewogICAg
ICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJh
c2VPYmplY3RTdHJ1Y3R1cmU7CkBAIC0xNjUsMjUgKzE2NSwzOSBAQCBwdWJsaWM6CiAgICAgU3Ry
dWN0dXJlU2V0IGJ1ZmZlcmVkU3RydWN0dXJlczsKICAgICAKICAgICBzdHJ1Y3QgeworICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9m
IHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcywgb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNo
YWJsZSBqdW1wIGZvciAnaW4nIGNhY2hlcy4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVyczsKKyAgICAgICAgdWludDMyX3QgaW5saW5lU2l6ZTsKKyAgICAgICAgaW50MzJfdCBkZWx0
YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb247CisgICAgICAgIGludDMyX3QgZGVsdGFG
cm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQ7CisKICAgICAgICAgaW50OF90IGJhc2VHUFI7CisgICAg
ICAgIGludDhfdCB2YWx1ZUdQUjsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBpbnQ4
X3QgdmFsdWVUYWdHUFI7CiAgICAgICAgIGludDhfdCBiYXNlVGFnR1BSOwogI2VuZGlmCi0gICAg
ICAgIGludDhfdCB2YWx1ZUdQUjsKLSAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsK
LSAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0RvbmU7Ci0gICAgICAgIGludDMyX3QgZGVsdGFD
YWxsVG9KdW1wOwotICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvU2xvd0Nhc2U7Ci0gICAgICAg
IGludDMyX3QgZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBpbnQzMl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0jZWxzZQotICAgICAgICBpbnQzMl90
IGRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmU7Ci0gICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9Q
YXlsb2FkTG9hZE9yU3RvcmU7Ci0jZW5kaWYKICAgICB9IHBhdGNoOwogCisgICAgQ29kZUxvY2F0
aW9uQ2FsbCBzbG93UGF0aENhbGxMb2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmNhbGxB
dE9mZnNldChwYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24pOyB9Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gcGF0Y2guc3RhcnQu
bGFiZWxBdE9mZnNldChwYXRjaC5pbmxpbmVTaXplKTsgfQorICAgIENvZGVMb2NhdGlvbkxhYmVs
IHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIHBhdGNoLnN0YXJ0LmxhYmVsQXRPZmZz
ZXQocGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQpOyB9CisgICAgQ29kZUxvY2F0
aW9uSnVtcCBwYXRjaGFibGVKdW1wRm9ySW4oKQorICAgIHsgCisgICAgICAgIEFTU0VSVChhY2Nl
c3NUeXBlID09IEFjY2Vzc1R5cGU6OkluKTsKKyAgICAgICAgcmV0dXJuIHBhdGNoLnN0YXJ0Lmp1
bXBBdE9mZnNldCgwKTsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHBhdGNoLnZhbHVlVGFnR1BSKSwK
KyNlbmRpZgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihwYXRjaC52YWx1ZUdQUikp
OworICAgIH0KKworCiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwogICAgIENhY2hlVHlwZSBj
YWNoZVR5cGU7CiAgICAgdWludDhfdCBjb3VudGRvd247IC8vIFdlIHJlcGF0Y2ggb25seSB3aGVu
IHRoaXMgaXMgemVyby4gSWYgbm90IHplcm8sIHdlIGRlY3JlbWVudC4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDIxNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU4LDExICsyNTgsMjAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5r
QnVmZmVyJiBsaW5rQgogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5zLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gKm1faW5zW2ldLm1f
c3R1YkluZm87Ci0gICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwo
KSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lID0gZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5z
W2ldLm1fZG9uZSkpOwotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9IGRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRp
b25PZihtX2luc1tpXS5tX2p1bXApKTsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24g
PSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93
Q2FzZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5sYWJlbCgpKSk7
CisKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9pbnNbaV0ubV9qdW1wKTsKKyAgICAgICAgaW5mby5wYXRjaC5zdGFydCA9IHN0YXJ0Owor
CisgICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9pbnNbaV0ubV9kb25lKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlubGluZVNpemUg
Pj0gMCk7CisgICAgICAgIGluZm8ucGF0Y2guaW5saW5lU2l6ZSA9IGlubGluZVNpemU7CisKKyAg
ICAgICAgaW5mby5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24gPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICAgICAgc3Rh
cnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5j
YWxsKCkpKTsKKworICAgICAgICBpbmZvLnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0
YXJ0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAg
ICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVy
YXRvci0+bGFiZWwoKSkpOwogICAgIH0KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAy
MDIxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw4ICsxODYsNyBAQCB2b2lkIHJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kU3R1YkluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJ
bmRleCkpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKIAotICAg
ICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNh
bGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAganVtcFRhcmdl
dCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9u
IDIwMjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw5ICsxOTcsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjYWNoZWRHZXRCeUlkKAogICAgIAogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUg
PSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0
SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9u
ZSwgYmFzZVBheWxvYWRHUFIpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpLCB0eXBlKTsKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVP
cmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJO
dW1iZXIpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9h
ZEdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIHR5cGUp
OwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
cmV2aXNpb24gMjAyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICAgICAgdXNlZFJlZ2lzdGVycy5z
ZXQocmVzdWx0R1BSLCBmYWxzZSk7CiAgICAgfQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRS
ZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCB0eXBlKTsKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIGNh
bGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgdHlw
ZSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwogICAgIAogICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDIxNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYx
ODMsMjEgKzYxODMsMTkgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9j
YXRpb25PZihzbG93UGF0aENhbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRv
SnVtcCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGp1bXApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxU
b1Nsb3dDYXNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Yoc2xvd1BhdGhCZWdpbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGp1bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5wYXRjaC5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lU2l6ZSA+PSAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gu
aW5saW5lU2l6ZSA9IGlubGluZVNpemU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExv
Y2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihzbG93UGF0aENhbGwpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhTdGFy
dCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc2xvd1BhdGhCZWdpbikpOworCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CkBAIC03NjE2LDcgKzc2MTQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAg
ICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUR2V0QnlJZEdlbmVyYXRvcj46OmNyZWF0ZSgKICAg
ICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNhbGxTaXRlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJl
Z2lzdGVycygpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLAorICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgdWlkLCBKU1ZhbHVlUmVncyhwYXJh
bXNbMV0uZ3ByKCkpLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMF0u
Z3ByKCkpLCB0eXBlKTsKIAogICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0
UGF0aChqaXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw4ICsyOSw5IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJJbmxpbmVBY2Nlc3Mu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjksMjUg
KzcwLDE5IEBAIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAKIHZvaWQgSklU
QnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXIm
IHNsb3dQYXRoKQogewotICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0g
c2xvd1BhdGgubG9jYXRpb25PZihtX2NhbGwpOwotICAgIG1fc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0
YUNoZWNrSW1tVG9DYWxsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKLSAgICAgICAgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1
cm5Mb2NhdGlvbik7Ci0gICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9KdW1wID0gTWFj
cm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVy
bkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fc3RydWN0dXJlQ2hlY2spKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3Rv
cmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBj
YWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOwot
I2Vsc2UKLSAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0g
TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJl
dHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fdGFnTG9hZE9yU3RvcmUpKTsKLSAg
ICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5M
b2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7Ci0jZW5kaWYKLSAg
ICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBz
bG93UGF0aC5sb2NhdGlvbk9mKG1fc2xvd1BhdGhCZWdpbikpOwotICAgIG1fc3R1YkluZm8tPnBh
dGNoLmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZiht
X2RvbmUpKTsKKyAgICBBU1NFUlQobV9zdGFydC5pc1NldCgpKTsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbCBzdGFydCA9IGZhc3RQYXRoLmxvY2F0aW9uT2YobV9zdGFydCk7CisgICAgbV9zdHViSW5m
by0+cGF0Y2guc3RhcnQgPSBzdGFydDsKKworICAgIGludDMyX3QgaW5saW5lU2l6ZSA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIHN0YXJ0LCBmYXN0
UGF0aC5sb2NhdGlvbk9mKG1fZG9uZSkpOworICAgIEFTU0VSVChpbmxpbmVTaXplID4gMCk7Cisg
ICAgbV9zdHViSW5mby0+cGF0Y2guaW5saW5lU2l6ZSA9IGlubGluZVNpemU7CisKKyAgICBtX3N0
dWJJbmZvLT5wYXRjaC5kZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24gPSBNYWNy
b0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBzdGFydCwgc2xv
d1BhdGgubG9jYXRpb25PZihtX3Nsb3dQYXRoQ2FsbCkpOworICAgIG1fc3R1YkluZm8tPnBhdGNo
LmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgc3RhcnQsIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9z
bG93UGF0aEJlZ2luKSk7CiB9CiAKIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikKQEAgLTk1LDM4ICs5MCwzMCBAQCB2b2lkIEpJVEJ5SWRHZW5l
cmF0b3I6OmZpbmFsaXplKExpbmtCdWZmCiAgICAgZmluYWxpemUobGlua0J1ZmZlciwgbGlua0J1
ZmZlcik7CiB9CiAKLXZvaWQgSklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aENoZWNr
cyhNYWNyb0Fzc2VtYmxlciYgaml0KQordm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RDb21tb24oTWFjcm9Bc3NlbWJsZXImIGppdCwgc2l6ZV90IGlubGluZUlDU2l6ZSkKIHsKLSAg
ICBtX3N0cnVjdHVyZUNoZWNrID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG1fYmFzZS5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
Ci0gICAgICAgIG1fc3RydWN0dXJlSW1tLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
KTsKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgc2l6ZV90IHN0YXJ0U2l6ZSA9IGpp
dC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpOworICAgIG1fc2xvd1BhdGhKdW1wID0g
aml0Lmp1bXAoKTsKKyAgICBzaXplX3QganVtcFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVy
KCkuY29kZVNpemUoKSAtIHN0YXJ0U2l6ZTsKKyAgICBzaXplX3Qgbm9wc1RvRW1pdEluQnl0ZXMg
PSBpbmxpbmVJQ1NpemUgLSBqdW1wU2l6ZTsKKyAgICBqaXQuZW1pdE5vcHMobm9wc1RvRW1pdElu
Qnl0ZXMpOworICAgIFJFTEVBU0VfQVNTRVJUKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2Rl
U2l6ZSgpIC0gc3RhcnRTaXplID09IGlubGluZUlDU2l6ZSk7CisgICAgbV9kb25lID0gaml0Lmxh
YmVsKCk7CiB9CiAKIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCi0gICAgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkK
LSAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIGNvZGVCbG9jaywgY29kZU9yaWdpbiwg
Y2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlKQorICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgOiBKSVRCeUlkR2VuZXJhdG9y
KGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3Rl
cnMsIGJhc2UsIHZhbHVlKQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUgPT0g
Y29kZUJsb2NrLT52bSgpLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KIAog
dm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
JiBqaXQpCiB7Ci0gICAgZ2VuZXJhdGVGYXN0UGF0aENoZWNrcyhqaXQpOwotICAgIAotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgbV9sb2FkT3JTdG9yZSA9IGppdC5sb2FkNjRXaXRoQ29tcGFjdEFk
ZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNl
LnBheWxvYWRHUFIoKSwgMCksIG1fdmFsdWUucGF5bG9hZEdQUigpKS5sYWJlbCgpOwotI2Vsc2UK
LSAgICBtX3RhZ0xvYWRPclN0b3JlID0gaml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNl
dFBhdGNoKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQ
UigpLCAwKSwgbV92YWx1ZS50YWdHUFIoKSkubGFiZWwoKTsKLSAgICBtX2xvYWRPclN0b3JlID0g
aml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSwgbV92YWx1ZS5wYXlsb2Fk
R1BSKCkpLmxhYmVsKCk7Ci0jZW5kaWYKLSAgICAKLSAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsK
KyAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5lQWNj
ZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0
eUFjY2VzcygpKTsKIH0KIAogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRv
cigKQEAgLTE0MywxOSArMTMwLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdl
bmVyYXRvcgogCiB2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImIGppdCkKIHsKLSAgICBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKGppdCk7Ci0g
ICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2xvYWRPclN0b3JlID0gaml0LnN0b3JlNjRX
aXRoQWRkcmVzc09mZnNldFBhdGNoKAotICAgICAgICBtX3ZhbHVlLnBheWxvYWRHUFIoKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgMCkpLmxhYmVsKCk7Ci0j
ZWxzZQotICAgIG1fdGFnTG9hZE9yU3RvcmUgPSBqaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2goCi0gICAgICAgIG1fdmFsdWUudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG1fYmFzZS5wYXlsb2FkR1BSKCksIDApKS5sYWJlbCgpOwotICAgIG1fbG9hZE9yU3RvcmUgPSBq
aXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIG1fdmFsdWUucGF5bG9h
ZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCAwKSku
bGFiZWwoKTsKLSNlbmRpZgotICAgIAotICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworICAgIGdl
bmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFj
ZSgpKTsKIH0KIAogVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBKSVRQdXRCeUlkR2VuZXJhdG9yOjpz
bG93UGF0aEZ1bmN0aW9uKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwMjE1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsMzAgKzY4LDMwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydFNsb3dQYXRo
Q2FsbChNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhCZWdpbiwgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCkKICAgICB7CiAgICAgICAgIG1fc2xvd1BhdGhCZWdpbiA9IHNsb3dQYXRoQmVn
aW47Ci0gICAgICAgIG1fY2FsbCA9IGNhbGw7CisgICAgICAgIG1fc2xvd1BhdGhDYWxsID0gY2Fs
bDsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoQmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX3Nsb3dQYXRoQmVnaW47IH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzbG93UGF0aEp1bXAoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNoZWNrLm1fanVt
cDsgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9zbG93UGF0aEp1bXAuaXNTZXQoKSk7CisgICAgICAgIHJldHVy
biBtX3Nsb3dQYXRoSnVtcDsKKyAgICB9CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXIm
IGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKICAg
ICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImKTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2b2lk
IGdlbmVyYXRlRmFzdFBhdGhDaGVja3MoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVy
YXRlRmFzdENvbW1vbihNYWNyb0Fzc2VtYmxlciYsIHNpemVfdCBzaXplKTsKICAgICAKICAgICBK
U1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKICAgICAKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgbV9zdHJ1Y3R1cmVJbW07Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zdHJ1Y3R1cmVDaGVjazsKLSAgICBBc3NlbWJsZXJMYWJl
bCBtX2xvYWRPclN0b3JlOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgQXNzZW1ibGVyTGFi
ZWwgbV90YWdMb2FkT3JTdG9yZTsKLSNlbmRpZgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBt
X2NhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCiBjbGFzcyBKSVRHZXRCeUlk
R2VuZXJhdG9yIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewpAQCAtOTksMTAgKzk5LDEzIEBA
IHB1YmxpYzoKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yKCkgeyB9CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUpOworICAgICAgICBDb2RlQmxvY2sq
LCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywgVW5pcXVlZFN0cmluZ0ltcGwqIHByb3BlcnR5TmFtZSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEFjY2Vzc1R5cGUpOwogICAgIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworCitwcml2YXRlOgorICAgIGJvb2wg
bV9pc0xlbmd0aEFjY2VzczsKIH07CiAKIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgOiBwdWJs
aWMgSklUQnlJZEdlbmVyYXRvciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDIwMjE1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6
ZW1pdEdldEJ5VmFsV2l0CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgo
Y3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOworICAgICAgICBwcm9wZXJ0eU5hbWUu
aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKIAogICAgIGZhc3REb25lQ2FzZSA9IGp1bXAoKTsKQEAgLTU4NywxMyArNTg3LDE0IEBA
IHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3QKIHsKICAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgYmFzZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0
KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldFB1cmUpOwor
ICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwpAQCAtNjM0LDcgKzYzNSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbioKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
T2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7
CisgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDIxNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
R2V0QnlWYWxXaXQKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlw
ZTo6R2V0KTsKKyAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogCiAgICAgZmFzdERvbmVDYXNlID0ganVtcCgpOwpAQCAtNTcyLDYg
KzU3Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3QKIHsKICAg
ICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAg
aW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwogCkBAIC01NzksNyArNTgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dHJ5X2dldF9ieV9pZChJbnN0cnVjdAogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldFB1cmUpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CkBAIC02MjAsNyArNjIxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOworICAgICAgICBpZGVudC0+
aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlw
ZTo6R2V0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMDIxNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5j
bHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSUNTdGF0cy5oIgorI2luY2x1ZGUgIklu
bGluZUFjY2Vzcy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
ICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCkBAIC05MCw5NSArOTEsNiBAQCBzdGF0aWMgdm9pZCBy
ZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
YWxsKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAotc3RhdGljIHZvaWQgcmVwYXRjaEJ5
SWRTZWxmQWNjZXNzKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgY29uc3QgRnVuY3Rpb25QdHImIHNsb3dQYXRoRnVuY3Rpb24sCi0gICAgYm9vbCBjb21w
YWN0KQotewotICAgIC8vIE9ubHkgb3B0aW1pemUgb25jZSEKLSAgICByZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7Ci0K
LSAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9h
ZC4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKAotICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLAotICAgICAgICBiaXR3aXNlX2Nhc3Q8aW50MzJf
dD4oc3RydWN0dXJlLT5pZCgpKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoY29tcGFj
dCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpOwotICAg
IGVsc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSk7Ci0jZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChjb21wYWN0KSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUp
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3Jl
KSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lk
IHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17
Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2Fu
SnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gz
MldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUiksCi0gICAgICAgICAgICAg
ICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSAgICB9Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9p
bnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
b21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwotI2Vsc2UKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgotfQot
Ci1zdGF0aWMgdm9pZCByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVs
ID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRw
dHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKLSAgICBpZiAoTWFjcm9B
c3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0
Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAot
ICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGludDMy
X3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMy
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwotI2Vs
c2UKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFn
TG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0jZW5kaWYKLX0KLQotc3RhdGlj
IHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh0YXJn
ZXQpOwotICAgIAotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNl
V2l0aEp1bXAoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJy
YW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAt
KGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpKSwKLSAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKLSAgICAKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoCi0gICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0p1bXApLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKLX0KLQogZW51bSBJ
bmxpbmVDYWNoZUFjdGlvbiB7CiAgICAgR2l2ZVVwT25DYWNoZSwKICAgICBSZXRyeUNhY2hlTGF0
ZXIsCkBAIC0yNDEsOSArMTUzLDIxIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZUdldEJ5SUQKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKIAogICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7Ci0gICAgICAg
IGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkKKyAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFs
dWUpKSB7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6
VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCisg
ICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0
dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSkpKSB7CisKKyAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlM
ZW5ndGgoKmNvZGVCbG9jay0+dm0oKSwgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZVZh
bHVlKSk7CisgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENh
bGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkp
OworICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRM
ZW5ndGgodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgpOwotICAgICAgICBl
bHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpCisgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0
cmluZyhiYXNlVmFsdWUpKQogICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExl
bmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgpOwogICAgICAgICBl
bHNlIGlmIChEaXJlY3RBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8RGlyZWN0
QXJndW1lbnRzKj4oYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBv
dmVycmlkZXMsIHRoZW4gd2UgY2FuIGhhbmRsZSB0aGlzIGFzIGEgbm9ybWFsIHByb3BlcnR5IGxv
YWQhIEd1YXJkaW5nCkBAIC0yNzYsMjIgKzIwMCwyMyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFj
dGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKICAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0
VG9DYWNoZSkKICAgICAgICAgICAgIHJldHVybiBhY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgogICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBl
ID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1
ZSgpCiAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCiAgICAgICAg
ICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAgICAgICYmIGlzSW5saW5lT2Zm
c2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpCi0gICAgICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6
aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgICAgICAmJiBhY3Rpb24gPT0gQXR0ZW1wdFRv
Q2FjaGUKICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKQogICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVu
Y3Rpb24oa2luZCksIHRydWUpOwotICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxm
KGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoKmNvZGVC
bG9jay0+dm0oKSwgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
cHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9j
YXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAg
ICAgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hl
ZE9mZnNldCgpOwpAQCAtMzcwLDcgKzI5NSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUdldEJ5SUQKICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkUmVwbGFjZVdp
dGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCksIHByb3BlcnR5TmFtZSkpOwogICAg
ICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgIHJl
cGxhY2VXaXRoSnVtcChzdHViSW5mbywgcmVzdWx0LmNvZGUoKSk7CisgICAgICAgIElubGluZUFj
Y2Vzczo6cmV3aXJlU3R1YkFzSnVtcChleGVjLT52bSgpLCBzdHViSW5mbywgQ29kZUxvY2F0aW9u
TGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gcmVzdWx0LnNo
b3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKQEAgLTM4
Miw3ICszMDcsNyBAQCB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAg
ICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1f
bG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAKICAgICBpZiAodHJ5Q2FjaGVHZXRCeUlEKGV4
ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2
ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bmN0aW9u
KGtpbmQpKTsKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW5jdGlv
bihraW5kKSk7CiB9CiAKIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRl
R2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtp
bmQgcHV0S2luZCkKQEAgLTQzMywxOCArMzU4LDE3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAg
ICAgICAgICAmJiBpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAg
ICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9m
ZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQorICAgICAgICAgICAgICAg
ICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZv
LCBzbG90LmNhY2hlZE9mZnNldCgpKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1
cmUtPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKLSAgICAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLAotICAgICAgICAgICAg
ICAgICAgICBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2lu
ZCksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2Uo
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
dm0sIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
aWRlbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5p
bml0UHV0QnlJZFJlcGxhY2UoY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OnJlcGxhY2Uodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKQEAgLTUyNCwxMSArNDQ4LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlUHV0QnlJRAogICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0aEp1
bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAgICAgICAgIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgcmVzZXRQdXRCeUlEQ2hlY2tB
bmRMb2FkKHN0dWJJbmZvKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAot
ICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAg
ICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOworCisgICAgICAgIElubGluZUFj
Y2Vzczo6cmV3aXJlU3R1YkFzSnVtcCh2bSwgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsKHJl
c3VsdC5jb2RlKCkpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZl
VXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CkBAIC01NDAsNyArNDYx
LDcgQEAgdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4
ZWMtPnZtKCkuaGVhcCk7CiAgICAgCiAgICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNl
VmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkg
PT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCks
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlR2VuZXJp
Y1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlSZXBhdGNoSW4oCkBAIC01ODYsOCArNTA3LDkgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxh
Y2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICAgICAgCiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAg
ICAgICAgIHN0dWJJbmZvLnBhdGNoYWJsZUp1bXBGb3JJbigpLAogICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAgIH0KICAgICAKQEAgLTYwMCw3ICs1MjIs
NyBAQCB2b2lkIHJlcGF0Y2hJbigKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBs
ZXJTY29wZShmYWxzZSk7CiAgICAgaWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwg
d2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBh
dGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBv
cGVyYXRpb25Jbik7CisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBvcGVyYXRpb25Jbik7CiB9CiAKIHN0YXRpYyB2
b2lkIGxpbmtTbG93Rm9yKFZNKiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmKQpAQCAtOTcyLDE0ICs4OTQsMTMgQEAgdm9pZCBsaW5rUG9s
eW1vcnBoaWNDYWxsKAogCiB2b2lkIHJlc2V0R2V0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUlES2luZCBraW5kKQogewotICAgIHJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3By
aWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwotICAgIHJlc2V0R2V0QnlJRENo
ZWNrQW5kTG9hZChzdHViSW5mbyk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgIHJlcGF0Y2hDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRp
bWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0
dWJBc0p1bXAoKmNvZGVCbG9jay0+dm0oKSwgc3R1YkluZm8sIHN0dWJJbmZvLnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbigpKTsKIH0KIAogdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBWX0pJVE9wZXJhdGlvbl9F
U3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25f
RVNzaUpKST4ocmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJ
PihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9u
KCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0
aW1pemVkRnVuY3Rpb247CiAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CkBAIC05OTEsMTQgKzkxMiwxNCBAQCB2b2lkIHJlc2V0UHV0QnlJ
RChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwogICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZTsKICAgICB9Ci0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICByZXNldFB1dEJ5SURDaGVja0Fu
ZExvYWQoc3R1YkluZm8pOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKworICAgIHJlcGF0Y2hDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3B0aW1pemVkRnVuY3Rpb24p
OworICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcCgqY29kZUJsb2NrLT52bSgpLCBz
dHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lkIHJl
c2V0SW4oQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8ucGF0Y2hh
YmxlSnVtcEZvckluKCksIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>
<flag name="review"
          id="305447"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>