<?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>72467</bug_id>
          
          <creation_ts>2011-11-15 23:25:30 -0800</creation_ts>
          <short_desc>Code block jettisoning should be part of the GC&apos;s transitive closure</short_desc>
          <delta_ts>2011-11-16 19:59:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>72312</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>503625</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-15 23:25:30 -0800</bug_when>
    <thetext>Currently if the recompilation system determines that a code block should be ditched, we &quot;jettison&quot; it from its owner executable and transfer its ownership to the GC.  The GC then deletes it if on the next GC cycle it proves that no call frame is using that code block.  This ensures sound execution even if the code block was running at the time that the recompilation system determined that it should be ditched.

But this mechanism does not allow for the collector to decide, on its own, that a code block should be jettisoned.  For example, the collector may find that references that the code block needs in order to survive are no longer live (such as inlined references to structures and callees).  In that case, the collector should delete the code block if it is not referenced from call frames; otherwise it should let it live and ensure that all of those references are marked to ensure sound execution.  But by the time that the collector could have made such a decision (i.e. during the transitive closure, or &quot;drain&quot;, portion of Heap::markRoots()), the JettisonedCodeBlocks class no longer remembers which code blocks are live on call frames and which are dead.

This mechanism also provides no way for a code block to decide, when it is asked to mark its references, if it is being asked to do so because it is live on call frames, or because it is reachable from live executables, or both.  What we would like is for it to be able to mark its inlined references strongly if it is live on call frames or ephemeronically otherwise, and if it finds any of them to be dead, then it should jettison itself.  The information necessary to make these decisions should be made available to CodeBlocks at time of garbage collection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503633</commentid>
    <comment_count>1</comment_count>
      <attachid>115331</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-15 23:35:58 -0800</bug_when>
    <thetext>Created attachment 115331
the patch

The performance is neutral.



[pizlo@nitroflex bencher] ./bencher TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc DFGCodeBlocks:/Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc --remote oldmac,bigmac
Packaging VM builds for remote hosts...
Sending VM builds to oldmac...
Running on oldmac...
376/376                                                            
Generating benchmark report at TipOfTree_DFGCodeBlocks_SunSpiderV8Kraken_20111115_2314_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100409)
&quot;DFGCodeBlocks&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r100409)

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

                                            TipOfTree             DFGCodeBlocks                                  
SunSpider:
   3d-cube                                8.9733+-0.0345          8.9398+-0.0383       
   3d-morph                              10.2372+-0.1515         10.1285+-0.0455         might be 1.0107x faster
   3d-raytrace                            9.2397+-0.0742          9.1624+-0.0545       
   access-binary-trees                    1.9173+-0.0072    ?     1.9408+-0.0322       ? might be 1.0122x slower
   access-fannkuch                        9.0949+-0.0126          9.0948+-0.0071       
   access-nbody                           5.0517+-0.0030    ?     5.0521+-0.0082       ?
   access-nsieve                          3.7642+-0.0502    ?     3.7751+-0.0610       ?
   bitops-3bit-bits-in-byte               1.4801+-0.0036    ?     1.4915+-0.0233       ?
   bitops-bits-in-byte                    5.9961+-0.0722          5.9393+-0.0177       
   bitops-bitwise-and                     3.9795+-0.0132    ?     3.9905+-0.0393       ?
   bitops-nsieve-bits                     6.8535+-0.0496          6.8342+-0.0470       
   controlflow-recursive                  2.7475+-0.0141    ?     2.7628+-0.0278       ?
   crypto-aes                             8.5666+-0.0595    ?     8.5803+-0.0550       ?
   crypto-md5                             2.9998+-0.0220    !     3.0373+-0.0143       ! definitely 1.0125x slower
   crypto-sha1                            2.6110+-0.0189    ?     2.6411+-0.0386       ? might be 1.0115x slower
   date-format-tofte                     12.9748+-0.0927    ?    13.1372+-0.0830       ? might be 1.0125x slower
   date-format-xparb                     13.2369+-0.1701    ^    12.3930+-0.2693       ^ definitely 1.0681x faster
   math-cordic                            8.7441+-0.1110    ^     8.6104+-0.0221       ^ definitely 1.0155x faster
   math-partial-sums                     12.7435+-0.0541    ^    12.6258+-0.0271       ^ definitely 1.0093x faster
   math-spectral-norm                     3.1236+-0.0049    ?     3.1276+-0.0076       ?
   regexp-dna                            16.4603+-0.1241    ?    16.5574+-0.1390       ?
   string-base64                          4.7776+-0.0475    ?     4.8275+-0.0737       ? might be 1.0105x slower
   string-fasta                           8.5676+-0.0147          8.5315+-0.0253       
   string-tagcloud                       16.2332+-0.1278    ?    16.3223+-0.1204       ?
   string-unpack-code                    27.8863+-0.0675    ?    27.9467+-0.0562       ?
   string-validate-input                  6.8559+-0.0649    !     6.9918+-0.0519       ! definitely 1.0198x slower

   &lt;arithmetic&gt; *                         8.2737+-0.0292          8.2478+-0.0335       
   &lt;geometric&gt;                            6.5343+-0.0218          6.5301+-0.0278       
   &lt;harmonic&gt;                             5.0532+-0.0154    ?     5.0704+-0.0259       ?

                                            TipOfTree             DFGCodeBlocks                                  
V8:
   crypto                                93.4016+-0.3318    ?    93.7145+-0.3372       ?
   deltablue                            204.9667+-1.4906        203.3539+-1.5126       
   earley-boyer                         126.5092+-1.3792    ?   126.9296+-1.1904       ?
   raytrace                              76.4015+-0.5830    ?    77.0431+-1.0522       ?
   regexp                               149.2949+-0.4518    ?   149.7389+-0.5129       ?
   richards                             166.8745+-0.7934        166.1569+-0.6842       
   splay                                107.5215+-1.2185        106.4858+-1.0981       

   &lt;arithmetic&gt;                         132.1386+-0.3973        131.9175+-0.3444       
   &lt;geometric&gt; *                        125.6869+-0.4015        125.6151+-0.3484       
   &lt;harmonic&gt;                           119.5030+-0.4236    ?   119.5705+-0.4232       ?

                                            TipOfTree             DFGCodeBlocks                                  
Kraken:
   ai-astar                             895.1716+-0.5152        894.8411+-0.9014       
   audio-beat-detection                 249.6966+-1.1852        248.9893+-0.5309       
   audio-dft                            314.5609+-2.8841    ?   314.9799+-3.0798       ?
   audio-fft                            161.8402+-0.1154    ?   162.2922+-0.8093       ?
   audio-oscillator                     355.5835+-2.8221    ?   355.6017+-3.1301       ?
   imaging-darkroom                     409.5399+-8.0807        402.5688+-5.4728         might be 1.0173x faster
   imaging-desaturate                   291.1407+-0.0368    ?   291.2704+-0.2197       ?
   imaging-gaussian-blur                750.8037+-0.2328    ?   752.9228+-4.4614       ?
   json-parse-financial                  87.7746+-0.2768    ?    87.9518+-0.2255       ?
   json-stringify-tinderbox              95.6810+-0.2857    ?    95.7273+-0.3303       ?
   stanford-crypto-aes                  141.2817+-1.1004    ?   143.0116+-1.6139       ? might be 1.0122x slower
   stanford-crypto-ccm                  136.9733+-0.3995        136.8832+-0.6449       
   stanford-crypto-pbkdf2               283.3259+-2.1650        281.2825+-2.4035       
   stanford-crypto-sha256-iterative     118.9495+-0.4448    ^   117.9656+-0.2000       ^ definitely 1.0083x faster

   &lt;arithmetic&gt; *                       306.5945+-0.6486        306.1634+-0.6200       
   &lt;geometric&gt;                          238.9861+-0.4570        238.7401+-0.4551       
   &lt;harmonic&gt;                           192.6643+-0.3043        192.6255+-0.3288       

                                            TipOfTree             DFGCodeBlocks                                  
All benchmarks:
   &lt;arithmetic&gt;                         115.5832+-0.1803        115.4075+-0.1934       
   &lt;geometric&gt;                           29.6532+-0.0617         29.6310+-0.0769       
   &lt;harmonic&gt;                             8.9074+-0.0267    ?     8.9371+-0.0446       ?

                                            TipOfTree             DFGCodeBlocks                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       68.3148+-0.1231         68.1984+-0.1369       

Sending VM builds to bigmac...
Running on bigmac...
376/376                                                            
Generating benchmark report at TipOfTree_DFGCodeBlocks_SunSpiderV8Kraken_20111115_2317_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on bigmac.local (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100409)
&quot;DFGCodeBlocks&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r100409)

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

                                            TipOfTree             DFGCodeBlocks                                  
SunSpider:
   3d-cube                                7.5032+-0.0332    ^     7.4309+-0.0181       ^ definitely 1.0097x faster
   3d-morph                               8.3867+-0.0400    ?     8.5196+-0.1343       ? might be 1.0158x slower
   3d-raytrace                            7.6770+-0.0596          7.6764+-0.0514       
   access-binary-trees                    1.6034+-0.0128          1.5922+-0.0058       
   access-fannkuch                        7.5298+-0.0150    ?     7.5350+-0.0078       ?
   access-nbody                           4.1868+-0.0069    ?     4.1895+-0.0055       ?
   access-nsieve                          3.1571+-0.0506          3.1541+-0.0586       
   bitops-3bit-bits-in-byte               1.2455+-0.0160    ?     1.2463+-0.0146       ?
   bitops-bits-in-byte                    4.9072+-0.0098    ?     4.9074+-0.0093       ?
   bitops-bitwise-and                     3.3099+-0.0291          3.2965+-0.0208       
   bitops-nsieve-bits                     5.6445+-0.0358          5.6423+-0.0363       
   controlflow-recursive                  2.2810+-0.0145          2.2797+-0.0150       
   crypto-aes                             7.1286+-0.0415          7.1140+-0.0373       
   crypto-md5                             2.5067+-0.0200    ?     2.5234+-0.0150       ?
   crypto-sha1                            2.1769+-0.0140    ?     2.1820+-0.0120       ?
   date-format-tofte                     10.6355+-0.0416    !    10.8784+-0.0788       ! definitely 1.0228x slower
   date-format-xparb                     10.8949+-0.0855    ^     9.9760+-0.1471       ^ definitely 1.0921x faster
   math-cordic                            7.1929+-0.0520          7.1629+-0.0285       
   math-partial-sums                     10.4968+-0.0233         10.4538+-0.0267       
   math-spectral-norm                     2.6073+-0.0141          2.6035+-0.0097       
   regexp-dna                            13.2815+-0.1455    ?    13.3551+-0.1555       ?
   string-base64                          3.9459+-0.0158    ?     3.9620+-0.0272       ?
   string-fasta                           7.0967+-0.0215    ^     7.0327+-0.0121       ^ definitely 1.0091x faster
   string-tagcloud                       13.2739+-0.0774    ?    13.3888+-0.0780       ?
   string-unpack-code                    22.4806+-0.0984    ?    22.5374+-0.1118       ?
   string-validate-input                  5.6743+-0.1153    ?     5.7204+-0.0318       ?

   &lt;arithmetic&gt; *                         6.8010+-0.0223          6.7831+-0.0249       
   &lt;geometric&gt;                            5.4034+-0.0184          5.3923+-0.0172       
   &lt;harmonic&gt;                             4.2017+-0.0169          4.1970+-0.0133       

                                            TipOfTree             DFGCodeBlocks                                  
V8:
   crypto                                77.4166+-0.2837    ?    77.5058+-0.2328       ?
   deltablue                            171.6202+-1.6061        170.0732+-1.0567       
   earley-boyer                         104.9058+-1.1736    ?   104.9624+-0.9954       ?
   raytrace                              64.0433+-1.6441         63.4618+-0.4197       
   regexp                               124.1412+-0.3760    !   125.3017+-0.1466       ! definitely 1.0093x slower
   richards                             137.6363+-0.4870        137.6235+-0.3622       
   splay                                 90.7661+-1.5559         89.3494+-1.0397         might be 1.0159x faster

   &lt;arithmetic&gt;                         110.0757+-0.5509        109.7540+-0.1916       
   &lt;geometric&gt; *                        104.7400+-0.6172        104.4071+-0.1902       
   &lt;harmonic&gt;                            99.6374+-0.7276         99.2725+-0.1916       

                                            TipOfTree             DFGCodeBlocks                                  
Kraken:
   ai-astar                             818.4744+-11.3281   ?   826.7462+-0.3904       ? might be 1.0101x slower
   audio-beat-detection                 204.3252+-0.6030    ?   205.0148+-0.7475       ?
   audio-dft                            262.5186+-2.1914        260.3697+-2.2269       
   audio-fft                            132.8021+-0.1407        132.7924+-0.0995       
   audio-oscillator                     293.3498+-0.3937        293.3062+-0.4924       
   imaging-darkroom                     335.2181+-5.0709        333.1090+-4.5439       
   imaging-desaturate                   240.8844+-0.1673    ?   240.8881+-0.1606       ?
   imaging-gaussian-blur                620.5048+-0.1724    ?   623.3088+-3.3815       ?
   json-parse-financial                  72.0124+-0.2967    ?    72.1616+-0.1456       ?
   json-stringify-tinderbox              78.9461+-0.2363    !    80.0372+-0.7569       ! definitely 1.0138x slower
   stanford-crypto-aes                  117.9708+-1.2254        117.0255+-0.3211       
   stanford-crypto-ccm                  114.1310+-0.3159    ?   114.5858+-0.5152       ?
   stanford-crypto-pbkdf2               230.7736+-0.8957    ?   232.4556+-1.4659       ?
   stanford-crypto-sha256-iterative      97.7790+-0.1591    ^    97.1193+-0.2832       ^ definitely 1.0068x faster

   &lt;arithmetic&gt; *                       258.5493+-0.8837    ?   259.2086+-0.4631       ?
   &lt;geometric&gt;                          198.5446+-0.4188    ?   198.7658+-0.2959       ?
   &lt;harmonic&gt;                           159.1494+-0.3278    ?   159.3555+-0.2159       ?

                                            TipOfTree             DFGCodeBlocks                                  
All benchmarks:
   &lt;arithmetic&gt;                          97.1712+-0.2955    ?    97.3097+-0.1310       ?
   &lt;geometric&gt;                           24.5832+-0.0563         24.5518+-0.0466       
   &lt;harmonic&gt;                             7.4060+-0.0291          7.3977+-0.0230       

                                            TipOfTree             DFGCodeBlocks                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       56.8944+-0.1572         56.8329+-0.0775       

[pizlo@nitroflex bencher]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503637</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 23:37:48 -0800</bug_when>
    <thetext>Attachment 115331 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/heap/Heap.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/heap/Heap.h:107:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 17 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>503640</commentid>
    <comment_count>3</comment_count>
      <attachid>115333</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-15 23:42:38 -0800</bug_when>
    <thetext>Created attachment 115333
the patch

Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503644</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 23:46:05 -0800</bug_when>
    <thetext>Attachment 115333 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/heap/Heap.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 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>504210</commentid>
    <comment_count>5</comment_count>
      <attachid>115441</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-16 13:44:00 -0800</bug_when>
    <thetext>Created attachment 115441
the patch

Fix no-DFG builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504213</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-16 13:47:30 -0800</bug_when>
    <thetext>Attachment 115441 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/heap/Heap.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 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>504283</commentid>
    <comment_count>7</comment_count>
      <attachid>115333</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-16 14:48:34 -0800</bug_when>
    <thetext>Comment on attachment 115333
the patch

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

r=me -- but make sure to check in the version that builds on Windows.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:1109
&gt; +                : isMarked(false)

Let&apos;s reserve the word &quot;mark&quot; for things with standard mark bits, and call this &quot;mightBeExecuting&quot;.

&gt; Source/JavaScriptCore/heap/DFGCodeBlocks.cpp:46
&gt; +    for (unsigned i = 0; i &lt; toRemove.size(); ++i) {

You can use Vector&apos;s deleteAllValues here.

&gt; Source/JavaScriptCore/heap/DFGCodeBlocks.cpp:85
&gt; +    for (unsigned i = 0; i &lt; toRemove.size(); ++i) {

Helper function here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504342</commentid>
    <comment_count>8</comment_count>
      <attachid>115466</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-16 15:54:27 -0800</bug_when>
    <thetext>Created attachment 115466
the patch

Applied Geoff&apos;s suggestions, and attempting, again, to fix the Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504345</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-16 15:56:53 -0800</bug_when>
    <thetext>Attachment 115466 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/heap/Heap.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 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>504415</commentid>
    <comment_count>10</comment_count>
      <attachid>115487</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-16 17:06:16 -0800</bug_when>
    <thetext>Created attachment 115487
the patch

Merged with http://trac.webkit.org/changeset/100527</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504417</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-16 17:09:15 -0800</bug_when>
    <thetext>Attachment 115487 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/heap/Heap.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 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>504526</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-16 19:59:06 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/100556</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115331</attachid>
            <date>2011-11-15 23:35:58 -0800</date>
            <delta_ts>2011-11-15 23:42:38 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgcodeblocks_patch_1.diff</filename>
            <type>text/plain</type>
            <size>40344</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDExLTExLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZSBibG9jayBqZXR0aXNvbmluZyBzaG91bGQgYmUgcGFydCBvZiB0aGUgR0MncyB0cmFuc2l0
aXZlIGNsb3N1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyNDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBSZXBsYWNlZCBKZXR0aXNvbmVkQ29kZUJsb2NrcyB3aXRoIERGR0NvZGVCbG9j
a3MuIFRoZSBsYXR0ZXIga25vd3MgYWJvdXQgYWxsCisgICAgICAgIERGRyBjb2RlIGJsb2NrcyAo
aS5lLiB0aG9zZSB0aGF0IG1heSBiZSBqZXR0aXNvbmVkLCBhbmQgbWF5IGhhdmUgaW5saW5lZCB3
ZWFrCisgICAgICAgIHJlZmVyZW5jZXMpIGFuZCBoZWxwcyB0cmFjayB3aGF0IHN0YXRlIGVhY2gg
b2YgdGhvc2UgY29kZSBibG9ja3MgaXMgaW4gZHVyaW5nCisgICAgICAgIEdDLiBUaGUgc3RhdGUg
Y29uc2lzdHMgb2YgdHdvIGZsYWdzOyBpc01hcmtlZCwgd2hpY2ggdGVsbHMgaWYgdGhlIGNvZGUg
YmxvY2sKKyAgICAgICAgaXMgbGl2ZSBmcm9tIGNhbGwgZnJhbWVzOyBhbmQgaXNKZXR0aXNvbmVk
LCB3aGljaCB0ZWxscyBpZiB0aGUgY29kZSBibG9jayBpcworICAgICAgICBub3Qgb3duZWQgYnkg
YW55IGV4ZWN1dGFibGUgYW5kIHRodXMgc2hvdWxkIGJlIGRlbGV0ZWQgYXMgc29vbiBhcyBpdCBp
cyBub3QKKyAgICAgICAgaXNNYXJrZWQuCisgICAgICAgIAorICAgICAgICAtIE5vdCBtYXJrZWQs
IE5vdCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBtYXkgb3IgbWF5IG5vdCBiZSByZWFjaGFi
bGUgZnJvbQorICAgICAgICAgIGFueSBleGVjdXRhYmxlcywgYnV0IGl0IGlzIG93bmVkIGJ5IGFu
IGV4ZWN1dGFibGUsIGFuZCBoZW5jZSBzaG91bGQgYmUKKyAgICAgICAgICBrZXB0IGFsaXZlIGlm
IGl0cyBleGVjdXRhYmxlIGlzIGxpdmUgYW5kIGlmIGFsbCBvZiBpdHMgd2VhayByZWZlcmVuY2Vz
IGFyZQorICAgICAgICAgIGxpdmUuIE90aGVyd2lzZSBpdCBzaG91bGQgYmUgZGVsZXRlZCBkdXJp
bmcgdGhlIGN1cnJlbnQgR0MgY3ljbGUsIGFuZCBpdHMKKyAgICAgICAgICBvdXRnb2luZyByZWZl
cmVuY2VzIHNob3VsZCBub3QgYmUgc2Nhbm5lZC4KKyAgICAgICAgICAKKyAgICAgICAgLSBOb3Qg
bWFya2VkIGJ1dCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBzaG91bGQgYmUgZGVsZXRlZCBh
cyBzb29uIGFzCisgICAgICAgICAgcG9zc2libGUgYW5kIG5vbmUgb2YgaXRzIG91dGdvaW5nIHJl
ZmVyZW5jZXMgc2hvdWxkIGJlIHNjYW5uZWQuCisgICAgICAgICAgCisgICAgICAgIC0gTWFya2Vk
IGJ1dCBub3QgamV0dGlzb25lZDogVGhlIGNvZGUgYmxvY2sgc2hvdWxkIGJlIGtlcHQgYWxpdmUg
ZHVyaW5nIHRoaXMKKyAgICAgICAgICBHQyBjeWNsZSwgYW5kIGFsbCBvZiBpdHMgb3V0Z29pbmcg
cmVmZXJlbmNlcyAoaW5jbHVkaW5nIHRoZSB3ZWFrIG9uZXMpCisgICAgICAgICAgc2hvdWxkIGJl
IHNjYW5uZWQgYW5kIG1hcmtlZCBzdHJvbmdseS4gVGhlIG1hcmsgYml0IHdpbGwgYmUgY2xlYXJl
ZCBhdCB0aGUKKyAgICAgICAgICBlbmQgb2YgdGhlIEdDIGN5Y2xlLgorICAgICAgICAgIAorICAg
ICAgICAtIE1hcmtlZCBhbmQgamV0dGlzb25lZDogVGhlIGNvZGUgYmxvY2sgc2hvdWxkIGJlIGtl
cHQgYWxpdmUgZHVyaW5nIHRoaXMKKyAgICAgICAgICBHQyBjeWNsZSwgYW5kIGFsbCBvZiBpdHMg
b3V0Z29pbmcgcmVmZXJlbmNlcyAoaW5jbHVkaW5nIHRoZSB3ZWFrIG9uZXMpCisgICAgICAgICAg
c2hvdWxkIGJlIHNjYW5uZWQgYW5kIG1hcmtlZCBzdHJvbmdseS4gSG93ZXZlciwgb24gdGhlIG5l
eHQgR0MgY3ljbGUsIGl0CisgICAgICAgICAgd2lsbCBoYXZlIGl0cyBtYXJrIGJpdCBjbGVhcmVk
IGFuZCBoZW5jZSBpdCB3aWxsIGJlY29tZSBhIGNhbmRpZGF0ZSBmb3IKKyAgICAgICAgICBpbW1l
ZGlhdGUgZGVsZXRpb24gcHJvdmlkZWQgaXQgaXMgbm90IG1hcmtlZCBhZ2Fpbi4KKworICAgICAg
ICBUaGlzIGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SklUQ29kZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6REZHRGF0YTo6REZHRGF0YSk6CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9j
a3M6Om1hcmspOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAg
ICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6OkRGR0NvZGVCbG9ja3MpOgorICAgICAgICAoSlND
OjpERkdDb2RlQmxvY2tzOjp+REZHQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVC
bG9ja3M6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJr
cyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25l
ZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkdDb2RlQmxvY2tzOjp0cmFjZU1hcmtlZENv
ZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvREZHQ29kZUJsb2Nrcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpqZXR0aXNvbkRGR0NvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvSmV0dGlzb25l
ZENvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZp
bGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJv
b3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpqZXR0aXNvbkNvZGVCbG9jayk6
CisKIDIwMTEtMTEtMTUgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDAzNzUgYW5kIHIxMDAzODUu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDA0MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDEwICs2NywxMCBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdUaHVua3MuY3BwCiAKICAgICBoZWFwL0FsbG9jYXRpb25TcGFjZS5jcHAKKyAgICBoZWFwL0RG
R0NvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9IZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5j
cHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNwcAotICAgIGhlYXAvSmV0dGlzb25lZENvZGVCbG9j
a3MuY3BwCiAgICAgaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrZWRC
bG9jay5jcHAKICAgICBoZWFwL01hcmtlZFNwYWNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMs
MTEgKzE2MywxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9DYXJkU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nr
cy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZUhlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
YW5kbGVIZWFwLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVC
bG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtNjYsMTAgKzY2LDEwIEBAIFNPVVJDRVMgKz0gXAogICAg
IGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIFwKICAgICBoZWFwL0FsbG9jYXRpb25TcGFj
ZS5jcHAgXAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKKyAgICBoZWFwL0RGR0Nv
ZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL0hhbmRsZUhlYXAuY3BwIFwKICAgICBoZWFwL0hhbmRs
ZVN0YWNrLmNwcCBcCiAgICAgaGVhcC9IZWFwLmNwcCBcCi0gICAgaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHAgXAogICAgIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBcCiAgICAgaGVh
cC9NYXJrU3RhY2suY3BwIFwKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agkocmV2aXNpb24gMTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMDIsMTEgKzIwMDIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPEZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcREZHQ29kZUJsb2Nrcy5jcHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxGaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxE
RkdDb2RlQmxvY2tzLmgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxGaWxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAKIAkJMEJG
MjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwICovOyB9OwogCQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0
VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjI0
MkRBNzEzRjNCMUU4MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAw
N0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyog
REZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJDNTU3MDE0NzM4
RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29k
ZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGMkU1QkY3MTQ2MzU3RDUwMDNFQjJFQiAvKiBTcGVjdHJ1
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRTVC
RjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZh
bHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JC
NzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxS
ZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xMDEsOCArMTAzLDYgQEAKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRp
Y3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovOyB9Owog
CQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRThFMTQyMDdBNTEwMDE3
OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQkwRkQ4MkVGNTE0MjMwNzVCMDAxNzlD
OTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZEODJGMkIx
NDI2Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQg
LyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25l
ZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNw
cCAqLzsgfTsKIAkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGNDkxNDI4MDY5
MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0aWNz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBI
ZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLzsgfTsKQEAg
LTgxMiw2ICs4MTIsOCBAQAogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRB
IC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBC
aXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNC
MUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0NvZGVCbG9ja3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
RkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkU1QkY1MTQ2
MzU3RDIwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0
NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04NjcsOCArODY5LDYgQEAKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5
Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJlZGljdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEODJFRjMxNDIzMDczOTAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRyaW5zaWMuaDsgcGF0aCA9
IGRmZy9ERkdJbnRyaW5zaWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEODJG
MjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpl
dHRpc29uZWRDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpl
dHRpc29uZWRDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgy
RjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhldXJpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZXVyaXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjg3LDEwICsxNjg3LDEwIEBACiAJCTE0MkUzMTJBMTM0RkYwQTYw
MEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8s
CisJCQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLywKIAkJ
CQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICov
LAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywK
LQkJCQkwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3Bw
ICovLAotCQkJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oICovLAogCQkJCUE3MDQ1NkFFMTQyN0ZCMDMwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2Uu
Y3BwICovLAogCQkJCUE3MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2Uu
aCAqLywKIAkJCQlBNzUyMUUxMjE0MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oICovLApAQCAt
MjUyNCw3ICsyNTI0LDYgQEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdB
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVGREUyNiAv
KiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkY0QjE0MjgwNkExMDAx
NzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQ4MkYyQjE0MjZDQTZE
MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDgyRTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5
LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MjMsNiArMjkyMiw3IEBACiAJCQkJMEY0MzE3MzgxNDZC
QUM2OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nr
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMjM3LDcgKzMyMzcsNiBAQAogCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTBGMTZENzI2MTQyQzM5QzAwMENG
Nzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZEODJGMkMxNDI2Q0E3
NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzQ1OCw2ICszNDU3LDcgQEAKIAkJCQkwRkMwOTc5RTE0
NkIyNzIxMDBDRjI0NDIgLyogREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5Nzg4MDE0MDE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0aC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5Niw2
ICsxNDk2LDEwIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAog
Q29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKKyAgICAvLyBSZW1vdmUgbXlzZWxmIGZyb20gdGhl
IHNldCBvZiBERkcgY29kZSBibG9ja3MuIE5vdGUgdGhhdCBJIG1heSBub3QgYmUgaW4gdGhpcyBz
ZXQKKyAgICAvLyAoYmVjYXVzZSBJJ20gbm90IGEgREZHIGNvZGUgYmxvY2spLCBpbiB3aGljaCBj
YXNlIHRoaXMgaXMgYSBuby1vcCBhbnl3YXkuCisgICAgbV9nbG9iYWxEYXRhLT5oZWFwLm1fZGZn
Q29kZUJsb2Nrcy5tX3NldC5yZW1vdmUodGhpcyk7CisgICAgCiAjaWYgRU5BQkxFKFZFUkJPU0Vf
VkFMVUVfUFJPRklMRSkKICAgICBkdW1wVmFsdWVQcm9maWxlcygpOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDA0
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNp
bmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgorI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIK
ICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNs
dWRlICJFdmFsQ29kZUNhY2hlLmgiCkBAIC03MSw2ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIH07CiAKICAgICBjbGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3MgREZHQ29kZUJsb2NrczsK
IAogICAgIGVudW0gQ29kZVR5cGUgeyBHbG9iYWxDb2RlLCBFdmFsQ29kZSwgRnVuY3Rpb25Db2Rl
IH07CiAKQEAgLTQ5Miw2ICs0OTQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJp
dHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVjazsKKyAgICAgICAgICAgIGlmIChtX2ppdENvZGUu
aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICAgICAgICAgIGNyZWF0ZURG
R0RhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5t
X2RmZ0NvZGVCbG9ja3MubV9zZXQuYWRkKHRoaXMpOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpIHsg
cmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CkBAIC0xMDM5LDYgKzEwNDUsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bGx5KCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBERkdD
b2RlQmxvY2tzOworICAgICAgICAKICNpZiAhZGVmaW5lZChOREVCVUcpIHx8IEVOQUJMRShPUENP
REVfU0FNUExJTkcpCiAgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8
SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46
OmNvbnN0X2l0ZXJhdG9yJikgY29uc3Q7CiAKQEAgLTEwOTcsOSArMTEwNSwxNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7
CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgREZHRGF0YSB7CisgICAgICAgICAgICBERkdEYXRh
KCkKKyAgICAgICAgICAgICAgICA6IGlzTWFya2VkKGZhbHNlKQorICAgICAgICAgICAgICAgICwg
aXNKZXR0aXNvbmVkKGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGEsIDQ+IG9zckVudHJ5
OwogICAgICAgICAgICAgU2VnbWVudGVkVmVjdG9yPERGRzo6T1NSRXhpdCwgMTY+IG9zckV4aXQ7
CiAgICAgICAgICAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5LCA0PiBzcGVjdWxh
dGlvblJlY292ZXJ5OworICAgICAgICAgICAgYm9vbCBpc01hcmtlZDsKKyAgICAgICAgICAgIGJv
b2wgaXNKZXR0aXNvbmVkOwogICAgICAgICB9OwogICAgICAgICAKICAgICAgICAgT3duUHRyPERG
R0RhdGE+IG1fZGZnRGF0YTsKQEAgLTEzMjEsNiArMTMzNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgcmV0dXJuIGlzSW5saW5lQ2FsbEZyYW1lU2xvdygpOwogICAgIH0KICNlbmRpZgor
CisgICAgaW5saW5lIHZvaWQgREZHQ29kZUJsb2Nrczo6bWFyayh2b2lkKiBjYW5kaWRhdGVDb2Rl
QmxvY2spCisgICAgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBi
ZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCisgICAgICAg
IHVpbnRwdHJfdCB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVD
b2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGJvdGggb2Yg
dGhvc2UgbmFzdHkgY2FzZXMgaW4gb25lIGdvLgorICAgICAgICAvLyAwICsgMSA9IDEKKyAgICAg
ICAgLy8gLTEgKyAxID0gMAorICAgICAgICBpZiAodmFsdWUgKyAxIDw9IDEpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRv
ciBpdGVyID0gbV9zZXQuZmluZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihjYW5kaWRhdGVDb2Rl
QmxvY2spKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICAoKml0ZXIpLT5tX2RmZ0RhdGEtPmlzTWFya2VkID0g
dHJ1ZTsKKyAgICB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24g
MTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKKyNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTExMyw5ICsxMTQsOSBA
QCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sCiAgICAgZ2VuZXJpY0Fk
ZFNwYW4oYmVnaW4sIGVuZCwgZHVtbXlNYXJrSG9vayk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZl
Um9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29kZUJsb2NrcyYg
amV0dGlzb25lZENvZGVCbG9ja3MpCit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCog
YmVnaW4sIHZvaWQqIGVuZCwgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBn
ZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBqZXR0aXNvbmVkQ29kZUJsb2Nrcyk7CisgICAgZ2Vu
ZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgZGZnQ29kZUJsb2Nrcyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNDZWxsOwotY2xhc3MgSmV0dGlzb25lZENvZGVCbG9j
a3M7CitjbGFzcyBERkdDb2RlQmxvY2tzOwogY2xhc3MgSGVhcDsKIAogY2xhc3MgQ29uc2VydmF0
aXZlUm9vdHMgewpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfkNvbnNlcnZhdGl2ZVJv
b3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKTsKLSAgICB2b2lk
IGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29kZUJsb2NrcyYpOworICAg
IHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIERGR0NvZGVCbG9ja3MmKTsKICAgICAK
ICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIEpTQ2VsbCoqIHJvb3RzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5o
IgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitERkdDb2RlQmxvY2tz
OjpERkdDb2RlQmxvY2tzKCkgeyB9CisKK0RGR0NvZGVCbG9ja3M6On5ERkdDb2RlQmxvY2tzKCkK
K3sKKyAgICBWZWN0b3I8Q29kZUJsb2NrKiwgMTY+IHRvUmVtb3ZlOworICAgIAorICAgIGZvciAo
SGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIg
IT0gbV9zZXQuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoKCppdGVyKS0+bV9kZmdEYXRh
LT5pc0pldHRpc29uZWQpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoKml0ZXIpOworICAg
IH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgLy8gTmVlZCB0byBkbyB0aGlzIHNlcGFyYXRlbHkgZnJvbSBIYXNoU2V0
IGl0ZXJhdGlvbiBiZWNhdXNlIH5Db2RlQmxvY2sgd2lsbCByZW1vdmUKKyAgICAgICAgLy8gaXRz
ZWxmIGZyb20gdGhlIHNldC4KKyAgICAgICAgZGVsZXRlIHRvUmVtb3ZlW2ldOworICAgIH0KK30K
Kwordm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQYXNzT3duUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrUHRyKQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZGVsZXRlIGl0IG5vdzsgd2Ug
anVzdCB3YW50IGl0cyBwb2ludGVyLgorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJs
b2NrUHRyLmxlYWtQdHIoKTsKKyAgICAKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBBU1NF
UlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICAKKyAg
ICAvLyBJdCBzaG91bGQgbm90IGhhdmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuCisgICAgQVNT
RVJUKCFjb2RlQmxvY2stPm1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkKTsKKworICAgIC8vIFdlIHNo
b3VsZCBoYXZlIHRoaXMgYmxvY2sgYWxyZWFkeS4KKyAgICBBU1NFUlQobV9zZXQuZmluZChjb2Rl
QmxvY2spICE9IG1fc2V0LmVuZCgpKTsKKyAgICAKKyAgICBjb2RlQmxvY2stPm1fZGZnRGF0YS0+
aXNKZXR0aXNvbmVkID0gdHJ1ZTsKK30KKwordm9pZCBERkdDb2RlQmxvY2tzOjpjbGVhck1hcmtz
KCkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nl
dC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRlcikt
Pm1fZGZnRGF0YS0+aXNNYXJrZWQgPSBmYWxzZTsKK30KKwordm9pZCBERkdDb2RlQmxvY2tzOjpk
ZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCkKK3sKKyAgICBWZWN0b3I8Q29kZUJs
b2NrKiwgMTY+IHRvUmVtb3ZlOworICAgIAorICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6
aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBpZiAoKCppdGVyKS0+bV9kZmdEYXRhLT5pc0pldHRpc29uZWQgJiYgISgq
aXRlciktPm1fZGZnRGF0YS0+aXNNYXJrZWQpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
Kml0ZXIpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1v
dmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGNhbGwgQ29kZUJsb2NrOjp+
Q29kZUJsb2NrLCB3aGljaCB3aWxsIHJlbW92ZSB0aGUgQ29kZUJsb2NrKiBmcm9tCisgICAgICAg
IC8vIHRoaXMtPm1fc2V0LgorICAgICAgICBkZWxldGUgdG9SZW1vdmVbaV07CisgICAgfQorfQor
Cit2b2lkIERGR0NvZGVCbG9ja3M6OnRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAg
aWYgKCgqaXRlciktPm1fZGZnRGF0YS0+aXNNYXJrZWQpCisgICAgICAgICAgICAoKml0ZXIpLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29kZUJsb2Nrc19oCisjZGVmaW5lIERGR0Nv
ZGVCbG9ja3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTbG90VmlzaXRvcjsKKworLy8gREZHQ29k
ZUJsb2NrcyBub3RpZmllcyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYWJvdXQgb3B0aW1pemVkIGNv
ZGUgYmxvY2tzIHRoYXQKKy8vIGhhdmUgZGlmZmVyZW50IG1hcmtpbmcgYmVoYXZpb3IgZGVwZW5k
aW5nIG9uIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIG9uIHRoZQorLy8gc3RhY2ssIGFuZCB0aGF0
IG1heSBiZSBqZXR0aXNvbmVkLiBKZXR0aXNvbmluZyBpcyB0aGUgcHJvY2VzcyBvZiBkaXNjYXJk
aW5nCisvLyBhIGNvZGUgYmxvY2sgYWZ0ZXIgYWxsIGNhbGxzIHRvIGl0IGhhdmUgYmVlbiB1bmxp
bmtlZC4gVGhpcyBjbGFzcyB0YWtlcyBzcGVjaWFsCisvLyBjYXJlIHRvIGVuc3VyZSB0aGF0IGlm
IHRoZXJlIGFyZSBzdGlsbCBjYWxsIGZyYW1lcyB0aGF0IGFyZSB1c2luZyB0aGUgY29kZQorLy8g
YmxvY2ssIHRoZW4gaXQgc2hvdWxkIG5vdCBiZSBpbW1lZGlhdGVseSBkZWxldGVkLCBidXQgcmF0
aGVyLCBpdCBzaG91bGQgYmUKKy8vIGRlbGV0ZWQgb25jZSB3ZSBrbm93IHRoYXQgdGhlcmUgYXJl
IG5vIGxvbmdlciBhbnkgcmVmZXJlbmNlcyB0byBpdCBmcm9tIGFueQorLy8gY2FsbCBmcmFtZXMu
IFRoaXMgY2xhc3MgdGFrZXMgaXRzIG5hbWUgZnJvbSB0aGUgREZHIGNvbXBpbGVyOyBvbmx5IGNv
ZGUgYmxvY2tzCisvLyBjb21waWxlZCBieSB0aGUgREZHIG5lZWQgc3BlY2lhbCBtYXJraW5nIGJl
aGF2aW9yIGlmIHRoZXkgYXJlIG9uIHRoZSBzdGFjaywgYW5kCisvLyBvbmx5IHRob3NlIGNvZGUg
YmxvY2tzIG1heSBiZSBqZXR0aXNvbmVkLgorCitjbGFzcyBERkdDb2RlQmxvY2tzIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIERGR0NvZGVCbG9ja3MoKTsK
KyAgICB+REZHQ29kZUJsb2NrcygpOworICAgIAorICAgIC8vIEluZm9ybSB0aGUgY29sbGVjdG9y
IHRoYXQgYSBjb2RlIGJsb2NrIGhhcyBiZWVuIGpldHRpc29uZWQgZm9ybSBpdHMKKyAgICAvLyBl
eGVjdXRhYmxlIGFuZCBzaG91bGQgb25seSBiZSBrZXB0IGFsaXZlIGlmIHRoZXJlIGFyZSBjYWxs
IGZyYW1lcyB0aGF0IHVzZQorICAgIC8vIGl0LiBUaGlzIGlzIHR5cGljYWxseSBjYWxsZWQgZWl0
aGVyIGZyb20gYSByZWNvbXBpbGF0aW9uIHRyaWdnZXIsIG9yIGZyb20KKyAgICAvLyBhbiB1bmNv
bmRpdGlvbmFsIGZpbmFsaXplciBhc3NvY2lhdGVkIHdpdGggYSBDb2RlQmxvY2sgdGhhdCBoYWQg
d2VhaworICAgIC8vIHJlZmVyZW5jZXMsIHdoZXJlIHNvbWUgc3Vic2V0IG9mIHRob3NlIHJlZmVy
ZW5jZXMgd2VyZSBkZWFkLgorICAgIHZvaWQgamV0dGlzb24oUGFzc093blB0cjxDb2RlQmxvY2s+
KTsKKyAgICAKKyAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRzIGFzc29jaWF0ZWQgd2l0aCBERkcg
Y29kZSBibG9ja3MuCisgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgLy8gTWFyayBh
IHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhhdCBiZWxvbmdzIHRvIHRoZSBzZXQg
b2YgREZHIGNvZGUKKyAgICAvLyBibG9ja3MuIFRoaXMgaXMgZGVmaW5lZCBpbmxpbmUgaW4gQ29k
ZUJsb2NrLmgKKyAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKTsKKyAgICAK
KyAgICAvLyBEZWxldGUgYWxsIGpldHRpc29uZWQgY29kZSBibG9ja3MgdGhhdCBoYXZlIG5vdCBi
ZWVuIG1hcmtlZCAoaS5lLiBhcmUgbm90IHJlZmVyZW5jZWQKKyAgICAvLyBmcm9tIGNhbGwgZnJh
bWVzKS4KKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAg
ICAKKyAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tzIChpLmUuIGFyZSByZWZlcmVu
Y2VkIGZyb20gY2FsbCBmcmFtZXMpLiBUaGUgQ29kZUJsb2NrCisgICAgLy8gaXMgZnJlZSB0byBt
YWtlIHVzZSBvZiBtX2RmZ0RhdGEtPmlzTWFya2VkIGFuZCBtX2RmZ0RhdGEtPmlzSmV0dGlzb25l
ZC4KKyAgICB2b2lkIHRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgSGFzaFNldDxDb2Rl
QmxvY2sqPiBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg2LDYg
KzQ4NiwxMSBAQCBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiAgICAgcmV0dXJuIG1f
cHJvdGVjdGVkVmFsdWVzLnJlbW92ZShrLmFzQ2VsbCgpKTsKIH0KIAordm9pZCBIZWFwOjpqZXR0
aXNvbkRGR0NvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKQoreworICAg
IG1fZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOworfQorCiB2b2lkIEhlYXA6Om1h
cmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewog
ICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5k
KCk7CkBAIC00OTMsMTEgKzQ5OCw2IEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMo
SGVhcFJvb3QKICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOwogfQog
Ci12b2lkIEhlYXA6OmFkZEpldHRpc29uZWRDb2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+
IGNvZGVCbG9jaykKLXsKLSAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmFkZENvZGVCbG9jayhj
b2RlQmxvY2spOwotfQotCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFs
dWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKIHsKICAgICBtX3RlbXBTb3J0aW5nVmVjdG9ycy5h
cHBlbmQodGVtcFZlY3Rvcik7CkBAIC01NzksMTIgKzU3OSwxMSBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cyhib29sIGZ1bGxHQykKICAgICB9CiAKICAgICBDb25zZXJ2YXRpdmVSb290cyByZWdpc3Rl
ckZpbGVSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSk7Ci0gICAgbV9qZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsK
ICAgICB7CiAgICAgICAgIEdDUEhBU0UoR2F0aGVyUmVnaXN0ZXJGaWxlUm9vdHMpOwotICAgICAg
ICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZpbGVSb290
cywgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcyk7CisgICAgICAgIHJlZ2lzdGVyRmlsZSgpLmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKHJlZ2lzdGVyRmlsZVJvb3RzLCBtX2RmZ0NvZGVCbG9ja3MpOwog
ICAgIH0KLSAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkQ29kZUJsb2Nr
cygpOwogI2lmIEVOQUJMRShHR0MpCiAgICAgTWFya2VkQmxvY2s6OkRpcnR5Q2VsbFZlY3RvciBk
aXJ0eUNlbGxzOwogICAgIGlmICghZnVsbEdDKSB7CkBAIC02NjgsNyArNjY3LDcgQEAgdm9pZCBI
ZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgCiAgICAgICAgIHsKICAgICAgICAgICAg
IEdDUEhBU0UoVHJhY2VDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIG1famV0dGlzb25lZENvZGVC
bG9ja3MudHJhY2VDb2RlQmxvY2tzKHZpc2l0b3IpOworICAgICAgICAgICAgbV9kZmdDb2RlQmxv
Y2tzLnRyYWNlTWFya2VkQ29kZUJsb2Nrcyh2aXNpdG9yKTsKICAgICAgICAgICAgIHZpc2l0b3Iu
ZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQogICAgIApAQCAtODA1LDYgKzgwNCwxMSBAQCB2
b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIEdDUEhBU0Uo
UmVzZXRBbGxvY2F0b3IpOwogICAgICAgICByZXNldEFsbG9jYXRvcigpOwogICAgIH0KKyAgICAK
KyAgICB7CisgICAgICAgIEdDUEhBU0UoRGVsZXRlQ29kZUJsb2Nrcyk7CisgICAgICAgIG1fZGZn
Q29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgfQog
CiAgICAgaWYgKHN3ZWVwVG9nZ2xlID09IERvU3dlZXApIHsKICAgICAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVjdGlvbjogU3dlZXBpbmciKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBA
QAogI2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkFsbG9jYXRpb25TcGFjZS5oIgorI2luY2x1
ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJIYW5kbGVIZWFwLmgiCiAjaW5jbHVkZSAi
SGFuZGxlU3RhY2suaCIKLSNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRl
ICJNYXJrZWRTcGFjZS5oIgpAQCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
ICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CiAgICAg
Y2xhc3MgR2xvYmFsQ29kZUJsb2NrOwogICAgIGNsYXNzIEhlYXA7CkBAIC0xMDMsNyArMTA0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJvdGVjdChKU1ZhbHVlKTsKICAgICAg
ICAgYm9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7IC8vIFRydWUgd2hlbiB0aGUgcHJvdGVjdCBjb3Vu
dCBkcm9wcyB0byAwLgogICAgICAgICAKLSAgICAgICAgdm9pZCBhZGRKZXR0aXNvbmVkQ29kZUJs
b2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CisgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2Rl
QmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayk7CiAKICAgICAgICAgc2l6ZV90
IHNpemUoKTsKICAgICAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0xMzEsNiArMTMyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpb25TcGFjZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNs
b3RWaXNpdG9yOworICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogCiAgICAgICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbWluRXh0cmFDb3N0ID0gMjU2OwogICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IG1heEV4dHJhQ29zdCA9IDEwMjQgKiAxMDI0OwpAQCAtMjA0LDcgKzIwNiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEhhbmRsZUhlYXAgbV9oYW5kbGVIZWFwOwogICAg
ICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBKZXR0aXNvbmVkQ29kZUJs
b2NrcyBtX2pldHRpc29uZWRDb2RlQmxvY2tzOworICAgICAgICBERkdDb2RlQmxvY2tzIG1fZGZn
Q29kZUJsb2NrczsKICAgICAgICAgRmluYWxpemVyT3duZXIgbV9maW5hbGl6ZXJPd25lcjsKICAg
ICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZp
c2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotSmV0dGlzb25lZENvZGVCbG9ja3M6OkpldHRpc29uZWRDb2RlQmxv
Y2tzKCkgeyB9Ci0KLUpldHRpc29uZWRDb2RlQmxvY2tzOjp+SmV0dGlzb25lZENvZGVCbG9ja3Mo
KQotewotICAgIFdURjo6ZGVsZXRlQWxsS2V5cyhtX21hcCk7Ci19Ci0KLXZvaWQgSmV0dGlzb25l
ZENvZGVCbG9ja3M6OmFkZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2Nr
KQotewotICAgIEFTU0VSVChtX21hcC5maW5kKGNvZGVCbG9jay5nZXQoKSkgPT0gbV9tYXAuZW5k
KCkpOwotICAgIAotICAgIG1fbWFwLmFkZChjb2RlQmxvY2subGVha1B0cigpLCBmYWxzZSk7Ci19
Ci0KLXZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmNsZWFyTWFya3MoKQotewotICAgIEhhc2hN
YXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4oKTsKLSAg
ICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsK
LSAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBiZWdp
bjsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c2Vjb25kID0gZmFsc2U7Ci19
Ci0KLXZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2VkQ29kZUJsb2Nrcygp
Ci17Ci0gICAgVmVjdG9yPENvZGVCbG9jayo+IHRvUmVtb3ZlOwotICAgIAotICAgIEhhc2hNYXA8
Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4oKTsKLSAgICBI
YXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKLSAg
ICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoIWl0ZXItPnNlY29uZCkKLSAgICAg
ICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdGVyLT5maXJzdCk7Ci0gICAgfQotICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkgewotICAgICAgICBt
X21hcC5yZW1vdmUodG9SZW1vdmVbaV0pOwotICAgICAgICBkZWxldGUgdG9SZW1vdmVbaV07Ci0g
ICAgfQotfQotCi12b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjp0cmFjZUNvZGVCbG9ja3MoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKQotewotICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46
Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4oKTsKLSAgICBIYXNoTWFwPENvZGVCbG9jayos
IGJvb2w+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8Q29k
ZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRl
cikKLSAgICAgICAgaXRlci0+Zmlyc3QtPnZpc2l0QWdncmVnYXRlKHNsb3RWaXNpdG9yKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0pldHRpc29uZWRDb2RlQmxvY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24gMTAwNDA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgSmV0dGlzb25lZENvZGVCbG9ja3NfaAotI2RlZmluZSBKZXR0
aXNvbmVkQ29kZUJsb2Nrc19oCi0KLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFNsb3RWaXNpdG9yOwotCi1j
bGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrcyB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
IC8vIE9ubHkgbWFsbG9jJ2QgaW4gQ29uc2VydmF0aXZlUm9vdHMKLXB1YmxpYzoKLSAgICBKZXR0
aXNvbmVkQ29kZUJsb2NrcygpOwotICAgIAotICAgIH5KZXR0aXNvbmVkQ29kZUJsb2NrcygpOwot
ICAgIAotICAgIHZvaWQgYWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7Ci0gICAg
Ci0gICAgdm9pZCBjbGVhck1hcmtzKCk7Ci0gICAgCi0gICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRp
ZGF0ZUNvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIDAg
YW5kIC0xIGJlY2F1c2UgdGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhhc2hNYXAgYXMgbWFya2Vycy4K
LSAgICAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNh
bmRpZGF0ZUNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3Ig
Ym90aCBvZiB0aG9zZSBuYXN0eSBjYXNlcyBpbiBvbmUgZ28uCi0gICAgICAgIC8vIDAgKyAxID0g
MQotICAgICAgICAvLyAtMSArIDEgPSAwCi0gICAgICAgIGlmICh2YWx1ZSArIDEgPD0gMSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
Ym9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRpY19jYXN0PENvZGVCbG9jayo+
KGNhbmRpZGF0ZUNvZGVCbG9jaykpOwotICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaXRlci0+c2Vjb25kID0gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKTsKLSAgICAKLSAgICB2
b2lkIHRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOwotCi1wcml2YXRlOgotICAgIC8vIEl0
IHdvdWxkIGJlIGdyZWF0IHRvIHVzZSBhbiBPd25QdHI8Q29kZUJsb2NrPiBoZXJlIGJ1dCB0aGF0
IHdvdWxkCi0gICAgLy8gYWxtb3N0IGNlcnRhaW5seSBub3Qgd29yay4KLSAgICBIYXNoTWFwPENv
ZGVCbG9jayosIGJvb2w+IG1fbWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCShyZXZpc2lvbiAxMDA0MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMsOSBAQCB2b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVy
Q29uc2VydmF0aXZlUm9vCiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgp
KTsKIH0KIAotdm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSmV0dGlzb25lZENvZGVCbG9ja3MmIGpl
dHRpc29uZWRDb2RlQmxvY2tzKQordm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgREZHQ29kZUJsb2Nr
cyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwg
ZW5kKCksIGpldHRpc29uZWRDb2RlQmxvY2tzKTsKKyAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQo
YmVnaW4oKSwgZW5kKCksIGRmZ0NvZGVCbG9ja3MpOwogfQogCiB2b2lkIFJlZ2lzdGVyRmlsZTo6
cmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9SZWdpc3RlckZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2
YXRpdmVSb290czsKLSAgICBjbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrczsKKyAgICBjbGFzcyBE
RkdDb2RlQmxvY2tzOwogCiAgICAgY2xhc3MgUmVnaXN0ZXJGaWxlIHsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUmVnaXN0ZXJGaWxlKTsKQEAgLTY1LDcgKzY1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH5SZWdpc3RlckZpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAgICAgdm9p
ZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpldHRpc29uZWRD
b2RlQmxvY2tzJik7CisgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2Vy
dmF0aXZlUm9vdHMmLCBERkdDb2RlQmxvY2tzJik7CiAKICAgICAgICAgUmVnaXN0ZXIqIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJh
c2UoKSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgamV0
dGlzb25Db2RlQmxvY2soSlNHbG9iYWxEYQogICAgIE93blB0cjxUPiBjb2RlQmxvY2tUb0pldHRp
c29uID0gY29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRl
cl9jYXN0PFQ+KGNvZGVCbG9ja1RvSmV0dGlzb24tPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAg
ICBjb2RlQmxvY2tUb0pldHRpc29uLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAgZ2xvYmFs
RGF0YS5oZWFwLmFkZEpldHRpc29uZWRDb2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2FzdDxDb2Rl
QmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFzZSgpKSk7CisgICAgZ2xvYmFsRGF0YS5o
ZWFwLmpldHRpc29uREZHQ29kZUJsb2NrKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihj
b2RlQmxvY2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115333</attachid>
            <date>2011-11-15 23:42:38 -0800</date>
            <delta_ts>2011-11-16 14:48:34 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgcodeblocks_patch_2.diff</filename>
            <type>text/plain</type>
            <size>40334</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDExLTExLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZSBibG9jayBqZXR0aXNvbmluZyBzaG91bGQgYmUgcGFydCBvZiB0aGUgR0MncyB0cmFuc2l0
aXZlIGNsb3N1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyNDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBSZXBsYWNlZCBKZXR0aXNvbmVkQ29kZUJsb2NrcyB3aXRoIERGR0NvZGVCbG9j
a3MuIFRoZSBsYXR0ZXIga25vd3MgYWJvdXQgYWxsCisgICAgICAgIERGRyBjb2RlIGJsb2NrcyAo
aS5lLiB0aG9zZSB0aGF0IG1heSBiZSBqZXR0aXNvbmVkLCBhbmQgbWF5IGhhdmUgaW5saW5lZCB3
ZWFrCisgICAgICAgIHJlZmVyZW5jZXMpIGFuZCBoZWxwcyB0cmFjayB3aGF0IHN0YXRlIGVhY2gg
b2YgdGhvc2UgY29kZSBibG9ja3MgaXMgaW4gZHVyaW5nCisgICAgICAgIEdDLiBUaGUgc3RhdGUg
Y29uc2lzdHMgb2YgdHdvIGZsYWdzOyBpc01hcmtlZCwgd2hpY2ggdGVsbHMgaWYgdGhlIGNvZGUg
YmxvY2sKKyAgICAgICAgaXMgbGl2ZSBmcm9tIGNhbGwgZnJhbWVzOyBhbmQgaXNKZXR0aXNvbmVk
LCB3aGljaCB0ZWxscyBpZiB0aGUgY29kZSBibG9jayBpcworICAgICAgICBub3Qgb3duZWQgYnkg
YW55IGV4ZWN1dGFibGUgYW5kIHRodXMgc2hvdWxkIGJlIGRlbGV0ZWQgYXMgc29vbiBhcyBpdCBp
cyBub3QKKyAgICAgICAgaXNNYXJrZWQuCisgICAgICAgIAorICAgICAgICAtIE5vdCBtYXJrZWQs
IE5vdCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBtYXkgb3IgbWF5IG5vdCBiZSByZWFjaGFi
bGUgZnJvbQorICAgICAgICAgIGFueSBleGVjdXRhYmxlcywgYnV0IGl0IGlzIG93bmVkIGJ5IGFu
IGV4ZWN1dGFibGUsIGFuZCBoZW5jZSBzaG91bGQgYmUKKyAgICAgICAgICBrZXB0IGFsaXZlIGlm
IGl0cyBleGVjdXRhYmxlIGlzIGxpdmUgYW5kIGlmIGFsbCBvZiBpdHMgd2VhayByZWZlcmVuY2Vz
IGFyZQorICAgICAgICAgIGxpdmUuIE90aGVyd2lzZSBpdCBzaG91bGQgYmUgZGVsZXRlZCBkdXJp
bmcgdGhlIGN1cnJlbnQgR0MgY3ljbGUsIGFuZCBpdHMKKyAgICAgICAgICBvdXRnb2luZyByZWZl
cmVuY2VzIHNob3VsZCBub3QgYmUgc2Nhbm5lZC4KKyAgICAgICAgICAKKyAgICAgICAgLSBOb3Qg
bWFya2VkIGJ1dCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBzaG91bGQgYmUgZGVsZXRlZCBh
cyBzb29uIGFzCisgICAgICAgICAgcG9zc2libGUgYW5kIG5vbmUgb2YgaXRzIG91dGdvaW5nIHJl
ZmVyZW5jZXMgc2hvdWxkIGJlIHNjYW5uZWQuCisgICAgICAgICAgCisgICAgICAgIC0gTWFya2Vk
IGJ1dCBub3QgamV0dGlzb25lZDogVGhlIGNvZGUgYmxvY2sgc2hvdWxkIGJlIGtlcHQgYWxpdmUg
ZHVyaW5nIHRoaXMKKyAgICAgICAgICBHQyBjeWNsZSwgYW5kIGFsbCBvZiBpdHMgb3V0Z29pbmcg
cmVmZXJlbmNlcyAoaW5jbHVkaW5nIHRoZSB3ZWFrIG9uZXMpCisgICAgICAgICAgc2hvdWxkIGJl
IHNjYW5uZWQgYW5kIG1hcmtlZCBzdHJvbmdseS4gVGhlIG1hcmsgYml0IHdpbGwgYmUgY2xlYXJl
ZCBhdCB0aGUKKyAgICAgICAgICBlbmQgb2YgdGhlIEdDIGN5Y2xlLgorICAgICAgICAgIAorICAg
ICAgICAtIE1hcmtlZCBhbmQgamV0dGlzb25lZDogVGhlIGNvZGUgYmxvY2sgc2hvdWxkIGJlIGtl
cHQgYWxpdmUgZHVyaW5nIHRoaXMKKyAgICAgICAgICBHQyBjeWNsZSwgYW5kIGFsbCBvZiBpdHMg
b3V0Z29pbmcgcmVmZXJlbmNlcyAoaW5jbHVkaW5nIHRoZSB3ZWFrIG9uZXMpCisgICAgICAgICAg
c2hvdWxkIGJlIHNjYW5uZWQgYW5kIG1hcmtlZCBzdHJvbmdseS4gSG93ZXZlciwgb24gdGhlIG5l
eHQgR0MgY3ljbGUsIGl0CisgICAgICAgICAgd2lsbCBoYXZlIGl0cyBtYXJrIGJpdCBjbGVhcmVk
IGFuZCBoZW5jZSBpdCB3aWxsIGJlY29tZSBhIGNhbmRpZGF0ZSBmb3IKKyAgICAgICAgICBpbW1l
ZGlhdGUgZGVsZXRpb24gcHJvdmlkZWQgaXQgaXMgbm90IG1hcmtlZCBhZ2Fpbi4KKworICAgICAg
ICBUaGlzIGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SklUQ29kZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6REZHRGF0YTo6REZHRGF0YSk6CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9j
a3M6Om1hcmspOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAg
ICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6OkRGR0NvZGVCbG9ja3MpOgorICAgICAgICAoSlND
OjpERkdDb2RlQmxvY2tzOjp+REZHQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVC
bG9ja3M6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJr
cyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25l
ZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkdDb2RlQmxvY2tzOjp0cmFjZU1hcmtlZENv
ZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvREZHQ29kZUJsb2Nrcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpqZXR0aXNvbkRGR0NvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvSmV0dGlzb25l
ZENvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZp
bGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJv
b3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpqZXR0aXNvbkNvZGVCbG9jayk6
CisKIDIwMTEtMTEtMTUgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDAzNzUgYW5kIHIxMDAzODUu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDA0MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDEwICs2NywxMCBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdUaHVua3MuY3BwCiAKICAgICBoZWFwL0FsbG9jYXRpb25TcGFjZS5jcHAKKyAgICBoZWFwL0RG
R0NvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9IZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5j
cHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNwcAotICAgIGhlYXAvSmV0dGlzb25lZENvZGVCbG9j
a3MuY3BwCiAgICAgaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrZWRC
bG9jay5jcHAKICAgICBoZWFwL01hcmtlZFNwYWNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMs
MTEgKzE2MywxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9DYXJkU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nr
cy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZUhlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
YW5kbGVIZWFwLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVC
bG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtNjYsMTAgKzY2LDEwIEBAIFNPVVJDRVMgKz0gXAogICAg
IGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIFwKICAgICBoZWFwL0FsbG9jYXRpb25TcGFj
ZS5jcHAgXAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKKyAgICBoZWFwL0RGR0Nv
ZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL0hhbmRsZUhlYXAuY3BwIFwKICAgICBoZWFwL0hhbmRs
ZVN0YWNrLmNwcCBcCiAgICAgaGVhcC9IZWFwLmNwcCBcCi0gICAgaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHAgXAogICAgIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBcCiAgICAgaGVh
cC9NYXJrU3RhY2suY3BwIFwKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agkocmV2aXNpb24gMTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMDIsMTEgKzIwMDIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPEZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcREZHQ29kZUJsb2Nrcy5jcHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxGaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxE
RkdDb2RlQmxvY2tzLmgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxGaWxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAKIAkJMEJG
MjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwICovOyB9OwogCQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0
VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjI0
MkRBNzEzRjNCMUU4MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAw
N0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyog
REZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJDNTU3MDE0NzM4
RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29k
ZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGMkU1QkY3MTQ2MzU3RDUwMDNFQjJFQiAvKiBTcGVjdHJ1
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRTVC
RjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZh
bHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JC
NzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxS
ZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xMDEsOCArMTAzLDYgQEAKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRp
Y3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovOyB9Owog
CQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRThFMTQyMDdBNTEwMDE3
OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQkwRkQ4MkVGNTE0MjMwNzVCMDAxNzlD
OTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZEODJGMkIx
NDI2Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQg
LyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25l
ZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNw
cCAqLzsgfTsKIAkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGNDkxNDI4MDY5
MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0aWNz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBI
ZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLzsgfTsKQEAg
LTgxMiw2ICs4MTIsOCBAQAogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRB
IC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBC
aXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNC
MUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0NvZGVCbG9ja3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
RkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkU1QkY1MTQ2
MzU3RDIwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0
NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04NjcsOCArODY5LDYgQEAKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5
Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJlZGljdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEODJFRjMxNDIzMDczOTAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRyaW5zaWMuaDsgcGF0aCA9
IGRmZy9ERkdJbnRyaW5zaWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEODJG
MjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpl
dHRpc29uZWRDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpl
dHRpc29uZWRDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgy
RjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhldXJpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZXVyaXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjg3LDEwICsxNjg3LDEwIEBACiAJCTE0MkUzMTJBMTM0RkYwQTYw
MEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8s
CisJCQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLywKIAkJ
CQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICov
LAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywK
LQkJCQkwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3Bw
ICovLAotCQkJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oICovLAogCQkJCUE3MDQ1NkFFMTQyN0ZCMDMwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2Uu
Y3BwICovLAogCQkJCUE3MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2Uu
aCAqLywKIAkJCQlBNzUyMUUxMjE0MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oICovLApAQCAt
MjUyNCw3ICsyNTI0LDYgQEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdB
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVGREUyNiAv
KiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkY0QjE0MjgwNkExMDAx
NzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQ4MkYyQjE0MjZDQTZE
MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDgyRTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5
LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MjMsNiArMjkyMiw3IEBACiAJCQkJMEY0MzE3MzgxNDZC
QUM2OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nr
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMjM3LDcgKzMyMzcsNiBAQAogCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTBGMTZENzI2MTQyQzM5QzAwMENG
Nzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZEODJGMkMxNDI2Q0E3
NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzQ1OCw2ICszNDU3LDcgQEAKIAkJCQkwRkMwOTc5RTE0
NkIyNzIxMDBDRjI0NDIgLyogREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5Nzg4MDE0MDE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0aC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5Niw2
ICsxNDk2LDEwIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAog
Q29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKKyAgICAvLyBSZW1vdmUgbXlzZWxmIGZyb20gdGhl
IHNldCBvZiBERkcgY29kZSBibG9ja3MuIE5vdGUgdGhhdCBJIG1heSBub3QgYmUgaW4gdGhpcyBz
ZXQKKyAgICAvLyAoYmVjYXVzZSBJJ20gbm90IGEgREZHIGNvZGUgYmxvY2spLCBpbiB3aGljaCBj
YXNlIHRoaXMgaXMgYSBuby1vcCBhbnl3YXkuCisgICAgbV9nbG9iYWxEYXRhLT5oZWFwLm1fZGZn
Q29kZUJsb2Nrcy5tX3NldC5yZW1vdmUodGhpcyk7CisgICAgCiAjaWYgRU5BQkxFKFZFUkJPU0Vf
VkFMVUVfUFJPRklMRSkKICAgICBkdW1wVmFsdWVQcm9maWxlcygpOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDA0
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNp
bmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgorI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIK
ICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNs
dWRlICJFdmFsQ29kZUNhY2hlLmgiCkBAIC03MSw2ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIH07CiAKICAgICBjbGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3MgREZHQ29kZUJsb2NrczsK
IAogICAgIGVudW0gQ29kZVR5cGUgeyBHbG9iYWxDb2RlLCBFdmFsQ29kZSwgRnVuY3Rpb25Db2Rl
IH07CiAKQEAgLTQ5Miw2ICs0OTQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJp
dHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVjazsKKyAgICAgICAgICAgIGlmIChtX2ppdENvZGUu
aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICAgICAgICAgIGNyZWF0ZURG
R0RhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5t
X2RmZ0NvZGVCbG9ja3MubV9zZXQuYWRkKHRoaXMpOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpIHsg
cmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CkBAIC0xMDM5LDYgKzEwNDUsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bGx5KCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBERkdD
b2RlQmxvY2tzOworICAgICAgICAKICNpZiAhZGVmaW5lZChOREVCVUcpIHx8IEVOQUJMRShPUENP
REVfU0FNUExJTkcpCiAgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8
SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46
OmNvbnN0X2l0ZXJhdG9yJikgY29uc3Q7CiAKQEAgLTEwOTcsOSArMTEwNSwxNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7
CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgREZHRGF0YSB7CisgICAgICAgICAgICBERkdEYXRh
KCkKKyAgICAgICAgICAgICAgICA6IGlzTWFya2VkKGZhbHNlKQorICAgICAgICAgICAgICAgICwg
aXNKZXR0aXNvbmVkKGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGEsIDQ+IG9zckVudHJ5
OwogICAgICAgICAgICAgU2VnbWVudGVkVmVjdG9yPERGRzo6T1NSRXhpdCwgMTY+IG9zckV4aXQ7
CiAgICAgICAgICAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5LCA0PiBzcGVjdWxh
dGlvblJlY292ZXJ5OworICAgICAgICAgICAgYm9vbCBpc01hcmtlZDsKKyAgICAgICAgICAgIGJv
b2wgaXNKZXR0aXNvbmVkOwogICAgICAgICB9OwogICAgICAgICAKICAgICAgICAgT3duUHRyPERG
R0RhdGE+IG1fZGZnRGF0YTsKQEAgLTEzMjEsNiArMTMzNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgcmV0dXJuIGlzSW5saW5lQ2FsbEZyYW1lU2xvdygpOwogICAgIH0KICNlbmRpZgor
CisgICAgaW5saW5lIHZvaWQgREZHQ29kZUJsb2Nrczo6bWFyayh2b2lkKiBjYW5kaWRhdGVDb2Rl
QmxvY2spCisgICAgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBi
ZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCisgICAgICAg
IHVpbnRwdHJfdCB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVD
b2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGJvdGggb2Yg
dGhvc2UgbmFzdHkgY2FzZXMgaW4gb25lIGdvLgorICAgICAgICAvLyAwICsgMSA9IDEKKyAgICAg
ICAgLy8gLTEgKyAxID0gMAorICAgICAgICBpZiAodmFsdWUgKyAxIDw9IDEpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRv
ciBpdGVyID0gbV9zZXQuZmluZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihjYW5kaWRhdGVDb2Rl
QmxvY2spKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICAoKml0ZXIpLT5tX2RmZ0RhdGEtPmlzTWFya2VkID0g
dHJ1ZTsKKyAgICB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24g
MTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKKyNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTExMyw5ICsxMTQsOSBA
QCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sCiAgICAgZ2VuZXJpY0Fk
ZFNwYW4oYmVnaW4sIGVuZCwgZHVtbXlNYXJrSG9vayk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZl
Um9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29kZUJsb2NrcyYg
amV0dGlzb25lZENvZGVCbG9ja3MpCit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCog
YmVnaW4sIHZvaWQqIGVuZCwgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBn
ZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBqZXR0aXNvbmVkQ29kZUJsb2Nrcyk7CisgICAgZ2Vu
ZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgZGZnQ29kZUJsb2Nrcyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNDZWxsOwotY2xhc3MgSmV0dGlzb25lZENvZGVCbG9j
a3M7CitjbGFzcyBERkdDb2RlQmxvY2tzOwogY2xhc3MgSGVhcDsKIAogY2xhc3MgQ29uc2VydmF0
aXZlUm9vdHMgewpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfkNvbnNlcnZhdGl2ZVJv
b3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKTsKLSAgICB2b2lk
IGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29kZUJsb2NrcyYpOworICAg
IHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIERGR0NvZGVCbG9ja3MmKTsKICAgICAK
ICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIEpTQ2VsbCoqIHJvb3RzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5o
IgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitERkdDb2RlQmxvY2tz
OjpERkdDb2RlQmxvY2tzKCkgeyB9CisKK0RGR0NvZGVCbG9ja3M6On5ERkdDb2RlQmxvY2tzKCkK
K3sKKyAgICBWZWN0b3I8Q29kZUJsb2NrKiwgMTY+IHRvUmVtb3ZlOworICAgIAorICAgIGZvciAo
SGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIg
IT0gbV9zZXQuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoKCppdGVyKS0+bV9kZmdEYXRh
LT5pc0pldHRpc29uZWQpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoKml0ZXIpOworICAg
IH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgLy8gTmVlZCB0byBkbyB0aGlzIHNlcGFyYXRlbHkgZnJvbSBIYXNoU2V0
IGl0ZXJhdGlvbiBiZWNhdXNlIH5Db2RlQmxvY2sgd2lsbCByZW1vdmUKKyAgICAgICAgLy8gaXRz
ZWxmIGZyb20gdGhlIHNldC4KKyAgICAgICAgZGVsZXRlIHRvUmVtb3ZlW2ldOworICAgIH0KK30K
Kwordm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQYXNzT3duUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrUHRyKQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZGVsZXRlIGl0IG5vdzsgd2Ug
anVzdCB3YW50IGl0cyBwb2ludGVyLgorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJs
b2NrUHRyLmxlYWtQdHIoKTsKKyAgICAKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBBU1NF
UlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICAKKyAg
ICAvLyBJdCBzaG91bGQgbm90IGhhdmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuCisgICAgQVNT
RVJUKCFjb2RlQmxvY2stPm1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkKTsKKworICAgIC8vIFdlIHNo
b3VsZCBoYXZlIHRoaXMgYmxvY2sgYWxyZWFkeS4KKyAgICBBU1NFUlQobV9zZXQuZmluZChjb2Rl
QmxvY2spICE9IG1fc2V0LmVuZCgpKTsKKyAgICAKKyAgICBjb2RlQmxvY2stPm1fZGZnRGF0YS0+
aXNKZXR0aXNvbmVkID0gdHJ1ZTsKK30KKwordm9pZCBERkdDb2RlQmxvY2tzOjpjbGVhck1hcmtz
KCkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nl
dC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRlcikt
Pm1fZGZnRGF0YS0+aXNNYXJrZWQgPSBmYWxzZTsKK30KKwordm9pZCBERkdDb2RlQmxvY2tzOjpk
ZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCkKK3sKKyAgICBWZWN0b3I8Q29kZUJs
b2NrKiwgMTY+IHRvUmVtb3ZlOworICAgIAorICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6
aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBpZiAoKCppdGVyKS0+bV9kZmdEYXRhLT5pc0pldHRpc29uZWQgJiYgISgq
aXRlciktPm1fZGZnRGF0YS0+aXNNYXJrZWQpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
Kml0ZXIpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1v
dmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGNhbGwgQ29kZUJsb2NrOjp+
Q29kZUJsb2NrLCB3aGljaCB3aWxsIHJlbW92ZSB0aGUgQ29kZUJsb2NrKiBmcm9tCisgICAgICAg
IC8vIHRoaXMtPm1fc2V0LgorICAgICAgICBkZWxldGUgdG9SZW1vdmVbaV07CisgICAgfQorfQor
Cit2b2lkIERGR0NvZGVCbG9ja3M6OnRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAg
aWYgKCgqaXRlciktPm1fZGZnRGF0YS0+aXNNYXJrZWQpCisgICAgICAgICAgICAoKml0ZXIpLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29kZUJsb2Nrc19oCisjZGVmaW5lIERGR0Nv
ZGVCbG9ja3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTbG90VmlzaXRvcjsKKworLy8gREZHQ29k
ZUJsb2NrcyBub3RpZmllcyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYWJvdXQgb3B0aW1pemVkIGNv
ZGUgYmxvY2tzIHRoYXQKKy8vIGhhdmUgZGlmZmVyZW50IG1hcmtpbmcgYmVoYXZpb3IgZGVwZW5k
aW5nIG9uIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIG9uIHRoZQorLy8gc3RhY2ssIGFuZCB0aGF0
IG1heSBiZSBqZXR0aXNvbmVkLiBKZXR0aXNvbmluZyBpcyB0aGUgcHJvY2VzcyBvZiBkaXNjYXJk
aW5nCisvLyBhIGNvZGUgYmxvY2sgYWZ0ZXIgYWxsIGNhbGxzIHRvIGl0IGhhdmUgYmVlbiB1bmxp
bmtlZC4gVGhpcyBjbGFzcyB0YWtlcyBzcGVjaWFsCisvLyBjYXJlIHRvIGVuc3VyZSB0aGF0IGlm
IHRoZXJlIGFyZSBzdGlsbCBjYWxsIGZyYW1lcyB0aGF0IGFyZSB1c2luZyB0aGUgY29kZQorLy8g
YmxvY2ssIHRoZW4gaXQgc2hvdWxkIG5vdCBiZSBpbW1lZGlhdGVseSBkZWxldGVkLCBidXQgcmF0
aGVyLCBpdCBzaG91bGQgYmUKKy8vIGRlbGV0ZWQgb25jZSB3ZSBrbm93IHRoYXQgdGhlcmUgYXJl
IG5vIGxvbmdlciBhbnkgcmVmZXJlbmNlcyB0byBpdCBmcm9tIGFueQorLy8gY2FsbCBmcmFtZXMu
IFRoaXMgY2xhc3MgdGFrZXMgaXRzIG5hbWUgZnJvbSB0aGUgREZHIGNvbXBpbGVyOyBvbmx5IGNv
ZGUgYmxvY2tzCisvLyBjb21waWxlZCBieSB0aGUgREZHIG5lZWQgc3BlY2lhbCBtYXJraW5nIGJl
aGF2aW9yIGlmIHRoZXkgYXJlIG9uIHRoZSBzdGFjaywgYW5kCisvLyBvbmx5IHRob3NlIGNvZGUg
YmxvY2tzIG1heSBiZSBqZXR0aXNvbmVkLgorCitjbGFzcyBERkdDb2RlQmxvY2tzIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIERGR0NvZGVCbG9ja3MoKTsK
KyAgICB+REZHQ29kZUJsb2NrcygpOworICAgIAorICAgIC8vIEluZm9ybSB0aGUgY29sbGVjdG9y
IHRoYXQgYSBjb2RlIGJsb2NrIGhhcyBiZWVuIGpldHRpc29uZWQgZm9ybSBpdHMKKyAgICAvLyBl
eGVjdXRhYmxlIGFuZCBzaG91bGQgb25seSBiZSBrZXB0IGFsaXZlIGlmIHRoZXJlIGFyZSBjYWxs
IGZyYW1lcyB0aGF0IHVzZQorICAgIC8vIGl0LiBUaGlzIGlzIHR5cGljYWxseSBjYWxsZWQgZWl0
aGVyIGZyb20gYSByZWNvbXBpbGF0aW9uIHRyaWdnZXIsIG9yIGZyb20KKyAgICAvLyBhbiB1bmNv
bmRpdGlvbmFsIGZpbmFsaXplciBhc3NvY2lhdGVkIHdpdGggYSBDb2RlQmxvY2sgdGhhdCBoYWQg
d2VhaworICAgIC8vIHJlZmVyZW5jZXMsIHdoZXJlIHNvbWUgc3Vic2V0IG9mIHRob3NlIHJlZmVy
ZW5jZXMgd2VyZSBkZWFkLgorICAgIHZvaWQgamV0dGlzb24oUGFzc093blB0cjxDb2RlQmxvY2s+
KTsKKyAgICAKKyAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRzIGFzc29jaWF0ZWQgd2l0aCBERkcg
Y29kZSBibG9ja3MuCisgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgLy8gTWFyayBh
IHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhhdCBiZWxvbmdzIHRvIHRoZSBzZXQg
b2YgREZHIGNvZGUKKyAgICAvLyBibG9ja3MuIFRoaXMgaXMgZGVmaW5lZCBpbmxpbmUgaW4gQ29k
ZUJsb2NrLmgKKyAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKTsKKyAgICAK
KyAgICAvLyBEZWxldGUgYWxsIGpldHRpc29uZWQgY29kZSBibG9ja3MgdGhhdCBoYXZlIG5vdCBi
ZWVuIG1hcmtlZCAoaS5lLiBhcmUgbm90IHJlZmVyZW5jZWQKKyAgICAvLyBmcm9tIGNhbGwgZnJh
bWVzKS4KKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAg
ICAKKyAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tzIChpLmUuIGFyZSByZWZlcmVu
Y2VkIGZyb20gY2FsbCBmcmFtZXMpLiBUaGUgQ29kZUJsb2NrCisgICAgLy8gaXMgZnJlZSB0byBt
YWtlIHVzZSBvZiBtX2RmZ0RhdGEtPmlzTWFya2VkIGFuZCBtX2RmZ0RhdGEtPmlzSmV0dGlzb25l
ZC4KKyAgICB2b2lkIHRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgSGFzaFNldDxDb2Rl
QmxvY2sqPiBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg2LDYg
KzQ4NiwxMSBAQCBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiAgICAgcmV0dXJuIG1f
cHJvdGVjdGVkVmFsdWVzLnJlbW92ZShrLmFzQ2VsbCgpKTsKIH0KIAordm9pZCBIZWFwOjpqZXR0
aXNvbkRGR0NvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKQoreworICAg
IG1fZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOworfQorCiB2b2lkIEhlYXA6Om1h
cmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewog
ICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5k
KCk7CkBAIC00OTMsMTEgKzQ5OCw2IEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMo
SGVhcFJvb3QKICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOwogfQog
Ci12b2lkIEhlYXA6OmFkZEpldHRpc29uZWRDb2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+
IGNvZGVCbG9jaykKLXsKLSAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmFkZENvZGVCbG9jayhj
b2RlQmxvY2spOwotfQotCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFs
dWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKIHsKICAgICBtX3RlbXBTb3J0aW5nVmVjdG9ycy5h
cHBlbmQodGVtcFZlY3Rvcik7CkBAIC01NzksMTIgKzU3OSwxMSBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cyhib29sIGZ1bGxHQykKICAgICB9CiAKICAgICBDb25zZXJ2YXRpdmVSb290cyByZWdpc3Rl
ckZpbGVSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSk7Ci0gICAgbV9qZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsK
ICAgICB7CiAgICAgICAgIEdDUEhBU0UoR2F0aGVyUmVnaXN0ZXJGaWxlUm9vdHMpOwotICAgICAg
ICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZpbGVSb290
cywgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcyk7CisgICAgICAgIHJlZ2lzdGVyRmlsZSgpLmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKHJlZ2lzdGVyRmlsZVJvb3RzLCBtX2RmZ0NvZGVCbG9ja3MpOwog
ICAgIH0KLSAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkQ29kZUJsb2Nr
cygpOwogI2lmIEVOQUJMRShHR0MpCiAgICAgTWFya2VkQmxvY2s6OkRpcnR5Q2VsbFZlY3RvciBk
aXJ0eUNlbGxzOwogICAgIGlmICghZnVsbEdDKSB7CkBAIC02NjgsNyArNjY3LDcgQEAgdm9pZCBI
ZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgCiAgICAgICAgIHsKICAgICAgICAgICAg
IEdDUEhBU0UoVHJhY2VDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIG1famV0dGlzb25lZENvZGVC
bG9ja3MudHJhY2VDb2RlQmxvY2tzKHZpc2l0b3IpOworICAgICAgICAgICAgbV9kZmdDb2RlQmxv
Y2tzLnRyYWNlTWFya2VkQ29kZUJsb2Nrcyh2aXNpdG9yKTsKICAgICAgICAgICAgIHZpc2l0b3Iu
ZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQogICAgIApAQCAtODA1LDYgKzgwNCwxMSBAQCB2
b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIEdDUEhBU0Uo
UmVzZXRBbGxvY2F0b3IpOwogICAgICAgICByZXNldEFsbG9jYXRvcigpOwogICAgIH0KKyAgICAK
KyAgICB7CisgICAgICAgIEdDUEhBU0UoRGVsZXRlQ29kZUJsb2Nrcyk7CisgICAgICAgIG1fZGZn
Q29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgfQog
CiAgICAgaWYgKHN3ZWVwVG9nZ2xlID09IERvU3dlZXApIHsKICAgICAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVjdGlvbjogU3dlZXBpbmciKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBA
QAogI2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkFsbG9jYXRpb25TcGFjZS5oIgorI2luY2x1
ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJIYW5kbGVIZWFwLmgiCiAjaW5jbHVkZSAi
SGFuZGxlU3RhY2suaCIKLSNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRl
ICJNYXJrZWRTcGFjZS5oIgpAQCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
ICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CiAgICAg
Y2xhc3MgR2xvYmFsQ29kZUJsb2NrOwogICAgIGNsYXNzIEhlYXA7CkBAIC0xMDMsNyArMTA0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJvdGVjdChKU1ZhbHVlKTsKICAgICAg
ICAgYm9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7IC8vIFRydWUgd2hlbiB0aGUgcHJvdGVjdCBjb3Vu
dCBkcm9wcyB0byAwLgogICAgICAgICAKLSAgICAgICAgdm9pZCBhZGRKZXR0aXNvbmVkQ29kZUJs
b2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CisgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2Rl
QmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+KTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSgpOwog
ICAgICAgICBzaXplX3QgY2FwYWNpdHkoKTsKQEAgLTEzMSw2ICsxMzIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAgICAgICBmcmllbmQg
Y2xhc3MgQWxsb2NhdGlvblNwYWNlOwogICAgICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7
CisgICAgICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAKICAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBtaW5FeHRyYUNvc3QgPSAyNTY7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
bWF4RXh0cmFDb3N0ID0gMTAyNCAqIDEwMjQ7CkBAIC0yMDQsNyArMjA2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhlYXA7CiAgICAgICAgIEhhbmRs
ZVN0YWNrIG1faGFuZGxlU3RhY2s7Ci0gICAgICAgIEpldHRpc29uZWRDb2RlQmxvY2tzIG1famV0
dGlzb25lZENvZGVCbG9ja3M7CisgICAgICAgIERGR0NvZGVCbG9ja3MgbV9kZmdDb2RlQmxvY2tz
OwogICAgICAgICBGaW5hbGl6ZXJPd25lciBtX2ZpbmFsaXplck93bmVyOwogICAgICAgICAKICAg
ICAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAJKHJldmlzaW9uIDEwMDQw
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJK
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi1KZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0dGlzb25lZENvZGVCbG9ja3MoKSB7IH0K
LQotSmV0dGlzb25lZENvZGVCbG9ja3M6On5KZXR0aXNvbmVkQ29kZUJsb2NrcygpCi17Ci0gICAg
V1RGOjpkZWxldGVBbGxLZXlzKG1fbWFwKTsKLX0KLQotdm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nr
czo6YWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCi17Ci0gICAg
QVNTRVJUKG1fbWFwLmZpbmQoY29kZUJsb2NrLmdldCgpKSA9PSBtX21hcC5lbmQoKSk7Ci0gICAg
Ci0gICAgbV9tYXAuYWRkKGNvZGVCbG9jay5sZWFrUHRyKCksIGZhbHNlKTsKLX0KLQotdm9pZCBK
ZXR0aXNvbmVkQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcygpCi17Ci0gICAgSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwotICAgIEhhc2hNYXA8
Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAo
SGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9
IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVyLT5zZWNvbmQgPSBmYWxzZTsKLX0KLQotdm9pZCBK
ZXR0aXNvbmVkQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCkKLXsKLSAgICBW
ZWN0b3I8Q29kZUJsb2NrKj4gdG9SZW1vdmU7Ci0gICAgCi0gICAgSGFzaE1hcDxDb2RlQmxvY2sq
LCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwotICAgIEhhc2hNYXA8Q29k
ZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAoSGFz
aE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmICghaXRlci0+c2Vjb25kKQotICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGl0ZXItPmZpcnN0KTsKLSAgICB9Ci0gICAgCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG1fbWFwLnJlbW92
ZSh0b1JlbW92ZVtpXSk7Ci0gICAgICAgIGRlbGV0ZSB0b1JlbW92ZVtpXTsKLSAgICB9Ci19Ci0K
LXZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OnRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpCi17Ci0gICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3Ig
YmVnaW4gPSBtX21hcC5iZWdpbigpOwotICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0
ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBi
b29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAg
ICBpdGVyLT5maXJzdC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25l
ZENvZGVCbG9ja3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCi0jZGVmaW5lIEpldHRpc29uZWRDb2Rl
QmxvY2tzX2gKLQotI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgU2xvdFZpc2l0b3I7Ci0KLWNsYXNzIEpldHRp
c29uZWRDb2RlQmxvY2tzIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsgLy8gT25seSBt
YWxsb2MnZCBpbiBDb25zZXJ2YXRpdmVSb290cwotcHVibGljOgotICAgIEpldHRpc29uZWRDb2Rl
QmxvY2tzKCk7Ci0gICAgCi0gICAgfkpldHRpc29uZWRDb2RlQmxvY2tzKCk7Ci0gICAgCi0gICAg
dm9pZCBhZGRDb2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+KTsKLSAgICAKLSAgICB2b2lk
IGNsZWFyTWFya3MoKTsKLSAgICAKLSAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJs
b2NrKQotICAgIHsKLSAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayBmb3IgMCBhbmQgLTEgYmVj
YXVzZSB0aG9zZSBhcmUgdXNlZCBieSB0aGUgSGFzaE1hcCBhcyBtYXJrZXJzLgotICAgICAgICB1
aW50cHRyX3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FuZGlkYXRlQ29k
ZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgY2hlY2tzIGZvciBib3RoIG9mIHRo
b3NlIG5hc3R5IGNhc2VzIGluIG9uZSBnby4KLSAgICAgICAgLy8gMCArIDEgPSAxCi0gICAgICAg
IC8vIC0xICsgMSA9IDAKLSAgICAgICAgaWYgKHZhbHVlICsgMSA8PSAxKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRl
cmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oY2FuZGlkYXRl
Q29kZUJsb2NrKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpdGVyLT5zZWNvbmQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGRlbGV0ZVVubWFya2VkQ29kZUJsb2NrcygpOwotICAgIAotICAgIHZvaWQgdHJhY2VD
b2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gSXQgd291bGQgYmUg
Z3JlYXQgdG8gdXNlIGFuIE93blB0cjxDb2RlQmxvY2s+IGhlcmUgYnV0IHRoYXQgd291bGQKLSAg
ICAvLyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3b3JrLgotICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
Ym9vbD4gbV9tYXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEpldHRp
c29uZWRDb2RlQmxvY2tzX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1JlZ2lzdGVyRmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw5ICs3Myw5IEBAIHZvaWQgUmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRp
dmVSb28KICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCkpOwogfQogCi12
b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKZXR0aXNvbmVkQ29kZUJsb2NrcyYgamV0dGlzb25lZENv
ZGVCbG9ja3MpCit2b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29u
c2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2Rl
QmxvY2tzKQogewotICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSwgamV0
dGlzb25lZENvZGVCbG9ja3MpOworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBl
bmQoKSwgZGZnQ29kZUJsb2Nrcyk7CiB9CiAKIHZvaWQgUmVnaXN0ZXJGaWxlOjpyZWxlYXNlRXhj
ZXNzQ2FwYWNpdHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVyRmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3RlckZpbGUuaAkocmV2aXNpb24gMTAwNDA5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3Rz
OwotICAgIGNsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzOworICAgIGNsYXNzIERGR0NvZGVCbG9j
a3M7CiAKICAgICBjbGFzcyBSZWdpc3RlckZpbGUgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShSZWdpc3RlckZpbGUpOwpAQCAtNjUsNyArNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgflJlZ2lzdGVyRmlsZSgpOwogICAgICAgICAKICAgICAgICAgdm9pZCBnYXRoZXJDb25z
ZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lkIGdhdGhlckNv
bnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSmV0dGlzb25lZENvZGVCbG9ja3Mm
KTsKKyAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290
cyYsIERGR0NvZGVCbG9ja3MmKTsKIAogICAgICAgICBSZWdpc3RlciogYmVnaW4oKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsgfQog
ICAgICAgICBSZWdpc3RlciogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAx
MDA0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgdm9pZCBqZXR0aXNvbkNvZGVC
bG9jayhKU0dsb2JhbERhCiAgICAgT3duUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24gPSBjb2Rl
QmxvY2sucmVsZWFzZSgpOwogICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8VD4o
Y29kZUJsb2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgIGNvZGVCbG9j
a1RvSmV0dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsKLSAgICBnbG9iYWxEYXRhLmhlYXAu
YWRkSmV0dGlzb25lZENvZGVCbG9jayhzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4oY29k
ZUJsb2NrVG9KZXR0aXNvbi5yZWxlYXNlKCkpKTsKKyAgICBnbG9iYWxEYXRhLmhlYXAuamV0dGlz
b25ERkdDb2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1Rv
SmV0dGlzb24ucmVsZWFzZSgpKSk7CiB9CiAjZW5kaWYKIAo=
</data>
<flag name="review"
          id="114374"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115441</attachid>
            <date>2011-11-16 13:44:00 -0800</date>
            <delta_ts>2011-11-16 15:54:27 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgcodeblocks_patch_3.diff</filename>
            <type>text/plain</type>
            <size>40777</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDExLTExLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZSBibG9jayBqZXR0aXNvbmluZyBzaG91bGQgYmUgcGFydCBvZiB0aGUgR0MncyB0cmFuc2l0
aXZlIGNsb3N1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyNDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBSZXBsYWNlZCBKZXR0aXNvbmVkQ29kZUJsb2NrcyB3aXRoIERGR0NvZGVCbG9j
a3MuIFRoZSBsYXR0ZXIga25vd3MgYWJvdXQgYWxsCisgICAgICAgIERGRyBjb2RlIGJsb2NrcyAo
aS5lLiB0aG9zZSB0aGF0IG1heSBiZSBqZXR0aXNvbmVkLCBhbmQgbWF5IGhhdmUgaW5saW5lZCB3
ZWFrCisgICAgICAgIHJlZmVyZW5jZXMpIGFuZCBoZWxwcyB0cmFjayB3aGF0IHN0YXRlIGVhY2gg
b2YgdGhvc2UgY29kZSBibG9ja3MgaXMgaW4gZHVyaW5nCisgICAgICAgIEdDLiBUaGUgc3RhdGUg
Y29uc2lzdHMgb2YgdHdvIGZsYWdzOyBpc01hcmtlZCwgd2hpY2ggdGVsbHMgaWYgdGhlIGNvZGUg
YmxvY2sKKyAgICAgICAgaXMgbGl2ZSBmcm9tIGNhbGwgZnJhbWVzOyBhbmQgaXNKZXR0aXNvbmVk
LCB3aGljaCB0ZWxscyBpZiB0aGUgY29kZSBibG9jayBpcworICAgICAgICBub3Qgb3duZWQgYnkg
YW55IGV4ZWN1dGFibGUgYW5kIHRodXMgc2hvdWxkIGJlIGRlbGV0ZWQgYXMgc29vbiBhcyBpdCBp
cyBub3QKKyAgICAgICAgaXNNYXJrZWQuCisgICAgICAgIAorICAgICAgICAtIE5vdCBtYXJrZWQs
IE5vdCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBtYXkgb3IgbWF5IG5vdCBiZSByZWFjaGFi
bGUgZnJvbQorICAgICAgICAgIGFueSBleGVjdXRhYmxlcywgYnV0IGl0IGlzIG93bmVkIGJ5IGFu
IGV4ZWN1dGFibGUsIGFuZCBoZW5jZSBzaG91bGQgYmUKKyAgICAgICAgICBrZXB0IGFsaXZlIGlm
IGl0cyBleGVjdXRhYmxlIGlzIGxpdmUgYW5kIGlmIGFsbCBvZiBpdHMgd2VhayByZWZlcmVuY2Vz
IGFyZQorICAgICAgICAgIGxpdmUuIE90aGVyd2lzZSBpdCBzaG91bGQgYmUgZGVsZXRlZCBkdXJp
bmcgdGhlIGN1cnJlbnQgR0MgY3ljbGUsIGFuZCBpdHMKKyAgICAgICAgICBvdXRnb2luZyByZWZl
cmVuY2VzIHNob3VsZCBub3QgYmUgc2Nhbm5lZC4KKyAgICAgICAgICAKKyAgICAgICAgLSBOb3Qg
bWFya2VkIGJ1dCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBzaG91bGQgYmUgZGVsZXRlZCBh
cyBzb29uIGFzCisgICAgICAgICAgcG9zc2libGUgYW5kIG5vbmUgb2YgaXRzIG91dGdvaW5nIHJl
ZmVyZW5jZXMgc2hvdWxkIGJlIHNjYW5uZWQuCisgICAgICAgICAgCisgICAgICAgIC0gTWFya2Vk
IGJ1dCBub3QgamV0dGlzb25lZDogVGhlIGNvZGUgYmxvY2sgc2hvdWxkIGJlIGtlcHQgYWxpdmUg
ZHVyaW5nIHRoaXMKKyAgICAgICAgICBHQyBjeWNsZSwgYW5kIGFsbCBvZiBpdHMgb3V0Z29pbmcg
cmVmZXJlbmNlcyAoaW5jbHVkaW5nIHRoZSB3ZWFrIG9uZXMpCisgICAgICAgICAgc2hvdWxkIGJl
IHNjYW5uZWQgYW5kIG1hcmtlZCBzdHJvbmdseS4gVGhlIG1hcmsgYml0IHdpbGwgYmUgY2xlYXJl
ZCBhdCB0aGUKKyAgICAgICAgICBlbmQgb2YgdGhlIEdDIGN5Y2xlLgorICAgICAgICAgIAorICAg
ICAgICAtIE1hcmtlZCBhbmQgamV0dGlzb25lZDogVGhlIGNvZGUgYmxvY2sgc2hvdWxkIGJlIGtl
cHQgYWxpdmUgZHVyaW5nIHRoaXMKKyAgICAgICAgICBHQyBjeWNsZSwgYW5kIGFsbCBvZiBpdHMg
b3V0Z29pbmcgcmVmZXJlbmNlcyAoaW5jbHVkaW5nIHRoZSB3ZWFrIG9uZXMpCisgICAgICAgICAg
c2hvdWxkIGJlIHNjYW5uZWQgYW5kIG1hcmtlZCBzdHJvbmdseS4gSG93ZXZlciwgb24gdGhlIG5l
eHQgR0MgY3ljbGUsIGl0CisgICAgICAgICAgd2lsbCBoYXZlIGl0cyBtYXJrIGJpdCBjbGVhcmVk
IGFuZCBoZW5jZSBpdCB3aWxsIGJlY29tZSBhIGNhbmRpZGF0ZSBmb3IKKyAgICAgICAgICBpbW1l
ZGlhdGUgZGVsZXRpb24gcHJvdmlkZWQgaXQgaXMgbm90IG1hcmtlZCBhZ2Fpbi4KKworICAgICAg
ICBUaGlzIGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SklUQ29kZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6REZHRGF0YTo6REZHRGF0YSk6CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9j
a3M6Om1hcmspOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAg
ICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6OkRGR0NvZGVCbG9ja3MpOgorICAgICAgICAoSlND
OjpERkdDb2RlQmxvY2tzOjp+REZHQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVC
bG9ja3M6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJr
cyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25l
ZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkdDb2RlQmxvY2tzOjp0cmFjZU1hcmtlZENv
ZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvREZHQ29kZUJsb2Nrcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpqZXR0aXNvbkRGR0NvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvSmV0dGlzb25l
ZENvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZp
bGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJv
b3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpqZXR0aXNvbkNvZGVCbG9jayk6
CisKIDIwMTEtMTEtMTUgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDAzNzUgYW5kIHIxMDAzODUu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDA0MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDEwICs2NywxMCBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdUaHVua3MuY3BwCiAKICAgICBoZWFwL0FsbG9jYXRpb25TcGFjZS5jcHAKKyAgICBoZWFwL0RG
R0NvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9IZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5j
cHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNwcAotICAgIGhlYXAvSmV0dGlzb25lZENvZGVCbG9j
a3MuY3BwCiAgICAgaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrZWRC
bG9jay5jcHAKICAgICBoZWFwL01hcmtlZFNwYWNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMs
MTEgKzE2MywxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9DYXJkU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nr
cy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZUhlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
YW5kbGVIZWFwLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVC
bG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtNjYsMTAgKzY2LDEwIEBAIFNPVVJDRVMgKz0gXAogICAg
IGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIFwKICAgICBoZWFwL0FsbG9jYXRpb25TcGFj
ZS5jcHAgXAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKKyAgICBoZWFwL0RGR0Nv
ZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL0hhbmRsZUhlYXAuY3BwIFwKICAgICBoZWFwL0hhbmRs
ZVN0YWNrLmNwcCBcCiAgICAgaGVhcC9IZWFwLmNwcCBcCi0gICAgaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHAgXAogICAgIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBcCiAgICAgaGVh
cC9NYXJrU3RhY2suY3BwIFwKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agkocmV2aXNpb24gMTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMDIsMTEgKzIwMDIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPEZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcREZHQ29kZUJsb2Nrcy5jcHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxGaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxE
RkdDb2RlQmxvY2tzLmgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxGaWxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAKIAkJMEJG
MjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwICovOyB9OwogCQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0
VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjI0
MkRBNzEzRjNCMUU4MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAw
N0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyog
REZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJDNTU3MDE0NzM4
RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29k
ZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGMkU1QkY3MTQ2MzU3RDUwMDNFQjJFQiAvKiBTcGVjdHJ1
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRTVC
RjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZh
bHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JC
NzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxS
ZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xMDEsOCArMTAzLDYgQEAKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRp
Y3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovOyB9Owog
CQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRThFMTQyMDdBNTEwMDE3
OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQkwRkQ4MkVGNTE0MjMwNzVCMDAxNzlD
OTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZEODJGMkIx
NDI2Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQg
LyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25l
ZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNw
cCAqLzsgfTsKIAkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGNDkxNDI4MDY5
MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0aWNz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBI
ZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLzsgfTsKQEAg
LTgxMiw2ICs4MTIsOCBAQAogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRB
IC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBC
aXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNC
MUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0NvZGVCbG9ja3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
RkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkU1QkY1MTQ2
MzU3RDIwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0
NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04NjcsOCArODY5LDYgQEAKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5
Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJlZGljdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEODJFRjMxNDIzMDczOTAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRyaW5zaWMuaDsgcGF0aCA9
IGRmZy9ERkdJbnRyaW5zaWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEODJG
MjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpl
dHRpc29uZWRDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpl
dHRpc29uZWRDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgy
RjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhldXJpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZXVyaXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjg3LDEwICsxNjg3LDEwIEBACiAJCTE0MkUzMTJBMTM0RkYwQTYw
MEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8s
CisJCQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLywKIAkJ
CQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICov
LAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywK
LQkJCQkwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3Bw
ICovLAotCQkJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oICovLAogCQkJCUE3MDQ1NkFFMTQyN0ZCMDMwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2Uu
Y3BwICovLAogCQkJCUE3MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2Uu
aCAqLywKIAkJCQlBNzUyMUUxMjE0MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oICovLApAQCAt
MjUyNCw3ICsyNTI0LDYgQEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdB
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVGREUyNiAv
KiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkY0QjE0MjgwNkExMDAx
NzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQ4MkYyQjE0MjZDQTZE
MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDgyRTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5
LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MjMsNiArMjkyMiw3IEBACiAJCQkJMEY0MzE3MzgxNDZC
QUM2OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nr
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMjM3LDcgKzMyMzcsNiBAQAogCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTBGMTZENzI2MTQyQzM5QzAwMENG
Nzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZEODJGMkMxNDI2Q0E3
NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzQ1OCw2ICszNDU3LDcgQEAKIAkJCQkwRkMwOTc5RTE0
NkIyNzIxMDBDRjI0NDIgLyogREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5Nzg4MDE0MDE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0aC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5Niw2
ICsxNDk2LDEyIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAog
Q29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBS
ZW1vdmUgbXlzZWxmIGZyb20gdGhlIHNldCBvZiBERkcgY29kZSBibG9ja3MuIE5vdGUgdGhhdCBJ
IG1heSBub3QgYmUgaW4gdGhpcyBzZXQKKyAgICAvLyAoYmVjYXVzZSBJJ20gbm90IGEgREZHIGNv
ZGUgYmxvY2spLCBpbiB3aGljaCBjYXNlIHRoaXMgaXMgYSBuby1vcCBhbnl3YXkuCisgICAgbV9n
bG9iYWxEYXRhLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5yZW1vdmUodGhpcyk7CisjZW5k
aWYKKyAgICAKICNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQogICAgIGR1bXBWYWx1
ZVByb2ZpbGVzKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
CiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgi
CisjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAj
aW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKQEAgLTcx
LDYgKzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIGNsYXNzIEV4ZWNTdGF0
ZTsKKyAgICBjbGFzcyBERkdDb2RlQmxvY2tzOwogCiAgICAgZW51bSBDb2RlVHlwZSB7IEdsb2Jh
bENvZGUsIEV2YWxDb2RlLCBGdW5jdGlvbkNvZGUgfTsKIApAQCAtNDkyLDYgKzQ5NCwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsK
ICAgICAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdpdGhBcml0eUNoZWNr
OworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKG1faml0Q29kZS5qaXRUeXBl
KCkgPT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlm
TmVjZXNzYXJ5KCk7CisgICAgICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLm1fZGZnQ29k
ZUJsb2Nrcy5tX3NldC5hZGQodGhpcyk7CisgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAg
fQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7
IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQpAQCAtMTAzOSw2ICsxMDQ3LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpOwogICAgICAgICAKICAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgREZH
Q29kZUJsb2NrczsKKyAgICAgICAgCiAjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCBFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQogICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9y
PEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+
Ojpjb25zdF9pdGVyYXRvciYpIGNvbnN0OwogCkBAIC0xMDk3LDkgKzExMDcsMTcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFw
OwogICAgICAgICAKICAgICAgICAgc3RydWN0IERGR0RhdGEgeworICAgICAgICAgICAgREZHRGF0
YSgpCisgICAgICAgICAgICAgICAgOiBpc01hcmtlZChmYWxzZSkKKyAgICAgICAgICAgICAgICAs
IGlzSmV0dGlzb25lZChmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhLCA0PiBvc3JFbnRy
eTsKICAgICAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxERkc6Ok9TUkV4aXQsIDE2PiBvc3JFeGl0
OwogICAgICAgICAgICAgVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeSwgND4gc3BlY3Vs
YXRpb25SZWNvdmVyeTsKKyAgICAgICAgICAgIGJvb2wgaXNNYXJrZWQ7CisgICAgICAgICAgICBi
b29sIGlzSmV0dGlzb25lZDsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIE93blB0cjxE
RkdEYXRhPiBtX2RmZ0RhdGE7CkBAIC0xMzIxLDYgKzEzMzksMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHJldHVybiBpc0lubGluZUNhbGxGcmFtZVNsb3coKTsKICAgICB9CiAjZW5kaWYK
KworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1h
cmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gV2UgaGF2ZSB0
byBjaGVjayBmb3IgMCBhbmQgLTEgYmVjYXVzZSB0aG9zZSBhcmUgdXNlZCBieSB0aGUgSGFzaE1h
cCBhcyBtYXJrZXJzLgorICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oY2FuZGlkYXRlQ29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
aXMgY2hlY2tzIGZvciBib3RoIG9mIHRob3NlIG5hc3R5IGNhc2VzIGluIG9uZSBnby4KKyAgICAg
ICAgLy8gMCArIDEgPSAxCisgICAgICAgIC8vIC0xICsgMSA9IDAKKyAgICAgICAgaWYgKHZhbHVl
ICsgMSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgSGFzaFNl
dDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmZpbmQoc3RhdGljX2Nhc3Q8Q29k
ZUJsb2NrKj4oY2FuZGlkYXRlQ29kZUJsb2NrKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fc2V0
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgKCppdGVyKS0+
bV9kZmdEYXRhLT5pc01hcmtlZCA9IHRydWU7CisgICAgfQorI2VuZGlmCiAgICAgCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0
aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMTAwNDA5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5
ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJv
b3RzLmgiCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdDb2RlQmxvY2tz
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRl
ICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTExMyw5ICsxMTQsOSBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjph
ZGQodm9pZCogYmVnaW4sCiAgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgZHVtbXlNYXJr
SG9vayk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBKZXR0aXNvbmVkQ29kZUJsb2NrcyYgamV0dGlzb25lZENvZGVCbG9ja3MpCit2b2lk
IENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgREZHQ29kZUJs
b2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBq
ZXR0aXNvbmVkQ29kZUJsb2Nrcyk7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgZGZn
Q29kZUJsb2Nrcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCShyZXZpc2lvbiAxMDA0MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlND
ZWxsOwotY2xhc3MgSmV0dGlzb25lZENvZGVCbG9ja3M7CitjbGFzcyBERkdDb2RlQmxvY2tzOwog
Y2xhc3MgSGVhcDsKIAogY2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewpAQCAtNDIsNyArNDIsNyBA
QCBwdWJsaWM6CiAgICAgfkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lk
KiBiZWdpbiwgdm9pZCogZW5kKTsKLSAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5k
LCBKZXR0aXNvbmVkQ29kZUJsb2NrcyYpOworICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lk
KiBlbmQsIERGR0NvZGVCbG9ja3MmKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIEpT
Q2VsbCoqIHJvb3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2Rl
QmxvY2tzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdD
b2RlQmxvY2tzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK0RGR0NvZGVCbG9ja3M6OkRG
R0NvZGVCbG9ja3MoKSB7IH0KKworREZHQ29kZUJsb2Nrczo6fkRGR0NvZGVCbG9ja3MoKQorewor
ICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAxNj4gdG9SZW1vdmU7CisgICAgCisgICAgZm9yIChIYXNo
U2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBt
X3NldC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmICgoKml0ZXIpLT5tX2RmZ0RhdGEtPmlz
SmV0dGlzb25lZCkKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgqaXRlcik7CisgICAgfQor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkg
eworICAgICAgICAvLyBOZWVkIHRvIGRvIHRoaXMgc2VwYXJhdGVseSBmcm9tIEhhc2hTZXQgaXRl
cmF0aW9uIGJlY2F1c2UgfkNvZGVCbG9jayB3aWxsIHJlbW92ZQorICAgICAgICAvLyBpdHNlbGYg
ZnJvbSB0aGUgc2V0LgorICAgICAgICBkZWxldGUgdG9SZW1vdmVbaV07CisgICAgfQorfQorCit2
b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29uKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxv
Y2tQdHIpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkZWxldGUgaXQgbm93OyB3ZSBqdXN0
IHdhbnQgaXRzIHBvaW50ZXIuCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tQ
dHIubGVha1B0cigpOworICAgIAorICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgIEFTU0VSVChj
b2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIAorICAgIC8v
IEl0IHNob3VsZCBub3QgaGF2ZSBhbHJlYWR5IGJlZW4gamV0dGlzb25lZC4KKyAgICBBU1NFUlQo
IWNvZGVCbG9jay0+bV9kZmdEYXRhLT5pc0pldHRpc29uZWQpOworCisgICAgLy8gV2Ugc2hvdWxk
IGhhdmUgdGhpcyBibG9jayBhbHJlYWR5LgorICAgIEFTU0VSVChtX3NldC5maW5kKGNvZGVCbG9j
aykgIT0gbV9zZXQuZW5kKCkpOworICAgIAorICAgIGNvZGVCbG9jay0+bV9kZmdEYXRhLT5pc0pl
dHRpc29uZWQgPSB0cnVlOworfQorCit2b2lkIERGR0NvZGVCbG9ja3M6OmNsZWFyTWFya3MoKQor
eworICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJl
Z2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+bV9k
ZmdEYXRhLT5pc01hcmtlZCA9IGZhbHNlOworfQorCit2b2lkIERGR0NvZGVCbG9ja3M6OmRlbGV0
ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKQoreworICAgIFZlY3RvcjxDb2RlQmxvY2sq
LCAxNj4gdG9SZW1vdmU7CisgICAgCisgICAgZm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVy
YXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7
CisgICAgICAgIGlmICgoKml0ZXIpLT5tX2RmZ0RhdGEtPmlzSmV0dGlzb25lZCAmJiAhKCppdGVy
KS0+bV9kZmdEYXRhLT5pc01hcmtlZCkKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgqaXRl
cik7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5z
aXplKCk7ICsraSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgY2FsbCBDb2RlQmxvY2s6On5Db2Rl
QmxvY2ssIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBDb2RlQmxvY2sqIGZyb20KKyAgICAgICAgLy8g
dGhpcy0+bV9zZXQuCisgICAgICAgIGRlbGV0ZSB0b1JlbW92ZVtpXTsKKyAgICB9Cit9CisKK3Zv
aWQgREZHQ29kZUJsb2Nrczo6dHJhY2VNYXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1f
c2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAo
KCppdGVyKS0+bV9kZmdEYXRhLT5pc01hcmtlZCkKKyAgICAgICAgICAgICgqaXRlciktPnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvREZHQ29kZUJsb2Nrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0RGR0NvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0RGR0NvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Nv
ZGVCbG9ja3NfaAorI2RlZmluZSBERkdDb2RlQmxvY2tzX2gKKworI2luY2x1ZGUgPHd0Zi9GYXN0
QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKKy8vIERGR0NvZGVCbG9ja3Mgbm90aWZpZXMgdGhlIGdhcmJhZ2UgY29s
bGVjdG9yIGFib3V0IG9wdGltaXplZCBjb2RlIGJsb2NrcyB0aGF0CisvLyBoYXZlIGRpZmZlcmVu
dCBtYXJraW5nIGJlaGF2aW9yIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBv
biB0aGUKKy8vIHN0YWNrLCBhbmQgdGhhdCBtYXkgYmUgamV0dGlzb25lZC4gSmV0dGlzb25pbmcg
aXMgdGhlIHByb2Nlc3Mgb2YgZGlzY2FyZGluZworLy8gYSBjb2RlIGJsb2NrIGFmdGVyIGFsbCBj
YWxscyB0byBpdCBoYXZlIGJlZW4gdW5saW5rZWQuIFRoaXMgY2xhc3MgdGFrZXMgc3BlY2lhbAor
Ly8gY2FyZSB0byBlbnN1cmUgdGhhdCBpZiB0aGVyZSBhcmUgc3RpbGwgY2FsbCBmcmFtZXMgdGhh
dCBhcmUgdXNpbmcgdGhlIGNvZGUKKy8vIGJsb2NrLCB0aGVuIGl0IHNob3VsZCBub3QgYmUgaW1t
ZWRpYXRlbHkgZGVsZXRlZCwgYnV0IHJhdGhlciwgaXQgc2hvdWxkIGJlCisvLyBkZWxldGVkIG9u
Y2Ugd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBsb25nZXIgYW55IHJlZmVyZW5jZXMgdG8gaXQg
ZnJvbSBhbnkKKy8vIGNhbGwgZnJhbWVzLiBUaGlzIGNsYXNzIHRha2VzIGl0cyBuYW1lIGZyb20g
dGhlIERGRyBjb21waWxlcjsgb25seSBjb2RlIGJsb2NrcworLy8gY29tcGlsZWQgYnkgdGhlIERG
RyBuZWVkIHNwZWNpYWwgbWFya2luZyBiZWhhdmlvciBpZiB0aGV5IGFyZSBvbiB0aGUgc3RhY2ss
IGFuZAorLy8gb25seSB0aG9zZSBjb2RlIGJsb2NrcyBtYXkgYmUgamV0dGlzb25lZC4KKworI2lm
IEVOQUJMRShERkdfSklUKQorY2xhc3MgREZHQ29kZUJsb2NrcyB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBERkdDb2RlQmxvY2tzKCk7CisgICAgfkRGR0Nv
ZGVCbG9ja3MoKTsKKyAgICAKKyAgICAvLyBJbmZvcm0gdGhlIGNvbGxlY3RvciB0aGF0IGEgY29k
ZSBibG9jayBoYXMgYmVlbiBqZXR0aXNvbmVkIGZvcm0gaXRzCisgICAgLy8gZXhlY3V0YWJsZSBh
bmQgc2hvdWxkIG9ubHkgYmUga2VwdCBhbGl2ZSBpZiB0aGVyZSBhcmUgY2FsbCBmcmFtZXMgdGhh
dCB1c2UKKyAgICAvLyBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGVpdGhlciBmcm9tIGEg
cmVjb21waWxhdGlvbiB0cmlnZ2VyLCBvciBmcm9tCisgICAgLy8gYW4gdW5jb25kaXRpb25hbCBm
aW5hbGl6ZXIgYXNzb2NpYXRlZCB3aXRoIGEgQ29kZUJsb2NrIHRoYXQgaGFkIHdlYWsKKyAgICAv
LyByZWZlcmVuY2VzLCB3aGVyZSBzb21lIHN1YnNldCBvZiB0aG9zZSByZWZlcmVuY2VzIHdlcmUg
ZGVhZC4KKyAgICB2b2lkIGpldHRpc29uKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CisgICAgCisg
ICAgLy8gQ2xlYXIgYWxsIG1hcmsgYml0cyBhc3NvY2lhdGVkIHdpdGggREZHIGNvZGUgYmxvY2tz
LgorICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAgIAorICAgIC8vIE1hcmsgYSBwb2ludGVyIHRo
YXQgbWF5IGJlIGEgQ29kZUJsb2NrIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IG9mIERGRyBjb2Rl
CisgICAgLy8gYmxvY2tzLiBUaGlzIGlzIGRlZmluZWQgaW5saW5lIGluIENvZGVCbG9jay5oCisg
ICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CisgICAgCisgICAgLy8gRGVs
ZXRlIGFsbCBqZXR0aXNvbmVkIGNvZGUgYmxvY2tzIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQg
KGkuZS4gYXJlIG5vdCByZWZlcmVuY2VkCisgICAgLy8gZnJvbSBjYWxsIGZyYW1lcykuCisgICAg
dm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgLy8g
VHJhY2UgYWxsIG1hcmtlZCBjb2RlIGJsb2NrcyAoaS5lLiBhcmUgcmVmZXJlbmNlZCBmcm9tIGNh
bGwgZnJhbWVzKS4gVGhlIENvZGVCbG9jaworICAgIC8vIGlzIGZyZWUgdG8gbWFrZSB1c2Ugb2Yg
bV9kZmdEYXRhLT5pc01hcmtlZCBhbmQgbV9kZmdEYXRhLT5pc0pldHRpc29uZWQuCisgICAgdm9p
ZCB0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIAorICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj4gbV9z
ZXQ7Cit9OworI2Vsc2UKK2NsYXNzIERGR0NvZGVCbG9ja3MgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgdm9pZCBqZXR0aXNvbihQYXNzT3duUHRyPENvZGVC
bG9jaz4pIHsgfQorICAgIHZvaWQgY2xlYXJNYXJrcygpIHsgfQorICAgIHZvaWQgbWFyayh2b2lk
KikgeyB9CisgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCkgeyB9
CisgICAgdm9pZCB0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3ImKSB7IH0KK307Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODYsNiArNDg2LDExIEBAIGJv
b2wgSGVhcDo6dW5wcm90ZWN0KEpTVmFsdWUgaykKICAgICByZXR1cm4gbV9wcm90ZWN0ZWRWYWx1
ZXMucmVtb3ZlKGsuYXNDZWxsKCkpOwogfQogCit2b2lkIEhlYXA6OmpldHRpc29uREZHQ29kZUJs
b2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgbV9kZmdDb2RlQmxv
Y2tzLmpldHRpc29uKGNvZGVCbG9jayk7Cit9CisKIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9i
amVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCiB7CiAgICAgUHJvdGVjdENv
dW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKQEAgLTQ5Mywx
MSArNDk4LDYgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdAogICAg
ICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5maXJzdCk7CiB9CiAKLXZvaWQgSGVhcDo6
YWRkSmV0dGlzb25lZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKQot
ewotICAgIG1famV0dGlzb25lZENvZGVCbG9ja3MuYWRkQ29kZUJsb2NrKGNvZGVCbG9jayk7Ci19
Ci0KIHZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+
KiB0ZW1wVmVjdG9yKQogewogICAgIG1fdGVtcFNvcnRpbmdWZWN0b3JzLmFwcGVuZCh0ZW1wVmVj
dG9yKTsKQEAgLTU3OSwxMiArNTc5LDExIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVs
bEdDKQogICAgIH0KIAogICAgIENvbnNlcnZhdGl2ZVJvb3RzIHJlZ2lzdGVyRmlsZVJvb3RzKCZt
X29iamVjdFNwYWNlLmJsb2NrcygpKTsKLSAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmNsZWFy
TWFya3MoKTsKKyAgICBtX2RmZ0NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOwogICAgIHsKICAgICAg
ICAgR0NQSEFTRShHYXRoZXJSZWdpc3RlckZpbGVSb290cyk7Ci0gICAgICAgIHJlZ2lzdGVyRmls
ZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJlZ2lzdGVyRmlsZVJvb3RzLCBtX2pldHRpc29u
ZWRDb2RlQmxvY2tzKTsKKyAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMocmVnaXN0ZXJGaWxlUm9vdHMsIG1fZGZnQ29kZUJsb2Nrcyk7CiAgICAgfQotICAgIG1f
amV0dGlzb25lZENvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7CiAjaWYgRU5B
QkxFKEdHQykKICAgICBNYXJrZWRCbG9jazo6RGlydHlDZWxsVmVjdG9yIGRpcnR5Q2VsbHM7CiAg
ICAgaWYgKCFmdWxsR0MpIHsKQEAgLTY2OCw3ICs2NjcsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290
cyhib29sIGZ1bGxHQykKICAgICAKICAgICAgICAgewogICAgICAgICAgICAgR0NQSEFTRShUcmFj
ZUNvZGVCbG9ja3MpOwotICAgICAgICAgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy50cmFjZUNv
ZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAgICAgICBtX2RmZ0NvZGVCbG9ja3MudHJhY2VNYXJr
ZWRDb2RlQmxvY2tzKHZpc2l0b3IpOwogICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFp
bigpOwogICAgICAgICB9CiAgICAgCkBAIC04MDUsNiArODA0LDExIEBAIHZvaWQgSGVhcDo6Y29s
bGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAgICAgR0NQSEFTRShSZXNldEFsbG9jYXRv
cik7CiAgICAgICAgIHJlc2V0QWxsb2NhdG9yKCk7CiAgICAgfQorICAgIAorICAgIHsKKyAgICAg
ICAgR0NQSEFTRShEZWxldGVDb2RlQmxvY2tzKTsKKyAgICAgICAgbV9kZmdDb2RlQmxvY2tzLmRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICB9CiAKICAgICBpZiAoc3dl
ZXBUb2dnbGUgPT0gRG9Td2VlcCkgewogICAgICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1Jl
Z2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBTd2VlcGluZyIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw5IEBACiAjZGVmaW5lIEhl
YXBfaAogCiAjaW5jbHVkZSAiQWxsb2NhdGlvblNwYWNlLmgiCisjaW5jbHVkZSAiREZHQ29kZUJs
b2Nrcy5oIgogI2luY2x1ZGUgIkhhbmRsZUhlYXAuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5o
IgotI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxv
Y2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNl
LmgiCkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgQ29k
ZUJsb2NrOwogICAgIGNsYXNzIEdDQWN0aXZpdHlDYWxsYmFjazsKICAgICBjbGFzcyBHbG9iYWxD
b2RlQmxvY2s7CiAgICAgY2xhc3MgSGVhcDsKQEAgLTEwMyw3ICsxMDQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwogICAgICAgICBib29sIHVucHJv
dGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90ZWN0IGNvdW50IGRyb3BzIHRvIDAu
CiAgICAgICAgIAotICAgICAgICB2b2lkIGFkZEpldHRpc29uZWRDb2RlQmxvY2soUGFzc093blB0
cjxDb2RlQmxvY2s+KTsKKyAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzT3du
UHRyPENvZGVCbG9jaz4pOwogCiAgICAgICAgIHNpemVfdCBzaXplKCk7CiAgICAgICAgIHNpemVf
dCBjYXBhY2l0eSgpOwpAQCAtMTMxLDYgKzEzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0
aW9uU3BhY2U7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICAgICAgZnJp
ZW5kIGNsYXNzIENvZGVCbG9jazsKIAogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1pbkV4
dHJhQ29zdCA9IDI1NjsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhFeHRyYUNvc3Qg
PSAxMDI0ICogMTAyNDsKQEAgLTIwNCw3ICsyMDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9oYW5k
bGVTdGFjazsKLSAgICAgICAgSmV0dGlzb25lZENvZGVCbG9ja3MgbV9qZXR0aXNvbmVkQ29kZUJs
b2NrczsKKyAgICAgICAgREZHQ29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CiAgICAgICAgIEZp
bmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CiAgICAgICAgIAogICAgICAgICBib29sIG1f
aXNTYWZlVG9Db2xsZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlz
b25lZENvZGVCbG9ja3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNwcAkocmV2aXNpb24gMTAwNDA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpldHRpc29uZWRDb2Rl
QmxvY2tzLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUpldHRp
c29uZWRDb2RlQmxvY2tzOjpKZXR0aXNvbmVkQ29kZUJsb2NrcygpIHsgfQotCi1KZXR0aXNvbmVk
Q29kZUJsb2Nrczo6fkpldHRpc29uZWRDb2RlQmxvY2tzKCkKLXsKLSAgICBXVEY6OmRlbGV0ZUFs
bEtleXMobV9tYXApOwotfQotCi12b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjphZGRDb2RlQmxv
Y2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQobV9tYXAu
ZmluZChjb2RlQmxvY2suZ2V0KCkpID09IG1fbWFwLmVuZCgpKTsKLSAgICAKLSAgICBtX21hcC5h
ZGQoY29kZUJsb2NrLmxlYWtQdHIoKSwgZmFsc2UpOwotfQotCi12b2lkIEpldHRpc29uZWRDb2Rl
QmxvY2tzOjpjbGVhck1hcmtzKCkKLXsKLSAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+Ojpp
dGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7Ci0gICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBi
b29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPENvZGVC
bG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
Ci0gICAgICAgIGl0ZXItPnNlY29uZCA9IGZhbHNlOwotfQotCi12b2lkIEpldHRpc29uZWRDb2Rl
QmxvY2tzOjpkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKQotewotICAgIFZlY3RvcjxDb2RlQmxv
Y2sqPiB0b1JlbW92ZTsKLSAgICAKLSAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVy
YXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7Ci0gICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29s
Pjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPENvZGVCbG9j
ayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
LSAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQpCi0gICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
aXRlci0+Zmlyc3QpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbV9tYXAucmVtb3ZlKHRvUmVtb3ZlW2ld
KTsKLSAgICAgICAgZGVsZXRlIHRvUmVtb3ZlW2ldOwotICAgIH0KLX0KLQotdm9pZCBKZXR0aXNv
bmVkQ29kZUJsb2Nrczo6dHJhY2VDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikK
LXsKLSAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFw
LmJlZ2luKCk7Ci0gICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0g
bV9tYXAuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRv
ciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0
LT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2Rl
QmxvY2tzLmgJKHJldmlzaW9uIDEwMDQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0pldHRpc29uZWRDb2RlQmxvY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpl
dHRpc29uZWRDb2RlQmxvY2tzX2gKLSNkZWZpbmUgSmV0dGlzb25lZENvZGVCbG9ja3NfaAotCi0j
aW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBD
b2RlQmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKLQotY2xhc3MgSmV0dGlzb25lZENvZGVCbG9j
a3MgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyAvLyBPbmx5IG1hbGxvYydkIGluIENv
bnNlcnZhdGl2ZVJvb3RzCi1wdWJsaWM6Ci0gICAgSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKLSAg
ICAKLSAgICB+SmV0dGlzb25lZENvZGVCbG9ja3MoKTsKLSAgICAKLSAgICB2b2lkIGFkZENvZGVC
bG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4pOwotICAgIAotICAgIHZvaWQgY2xlYXJNYXJrcygp
OwotICAgIAotICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spCi0gICAgewot
ICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBiZWNhdXNlIHRob3NlIGFy
ZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCi0gICAgICAgIHVpbnRwdHJfdCB2YWx1
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVDb2RlQmxvY2spOwotICAg
ICAgICAKLSAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGJvdGggb2YgdGhvc2UgbmFzdHkgY2Fz
ZXMgaW4gb25lIGdvLgotICAgICAgICAvLyAwICsgMSA9IDEKLSAgICAgICAgLy8gLTEgKyAxID0g
MAotICAgICAgICBpZiAodmFsdWUgKyAxIDw9IDEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgICAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0g
bV9tYXAuZmluZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihjYW5kaWRhdGVDb2RlQmxvY2spKTsK
LSAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGl0ZXItPnNlY29uZCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZGVsZXRl
VW5tYXJrZWRDb2RlQmxvY2tzKCk7Ci0gICAgCi0gICAgdm9pZCB0cmFjZUNvZGVCbG9ja3MoU2xv
dFZpc2l0b3ImKTsKLQotcHJpdmF0ZToKLSAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCB0byB1c2Ug
YW4gT3duUHRyPENvZGVCbG9jaz4gaGVyZSBidXQgdGhhdCB3b3VsZAotICAgIC8vIGFsbW9zdCBj
ZXJ0YWlubHkgbm90IHdvcmsuCi0gICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPiBtX21hcDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSmV0dGlzb25lZENvZGVCbG9j
a3NfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJG
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
UmVnaXN0ZXJGaWxlLmNwcAkocmV2aXNpb24gMTAwNDA5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDkg
KzczLDkgQEAgdm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvbwogICAgIGNv
bnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSk7CiB9CiAKLXZvaWQgUmVnaXN0ZXJG
aWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0
aXZlUm9vdHMsIEpldHRpc29uZWRDb2RlQmxvY2tzJiBqZXR0aXNvbmVkQ29kZUJsb2NrcykKK3Zv
aWQgUmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290
cyYgY29uc2VydmF0aXZlUm9vdHMsIERGR0NvZGVCbG9ja3MmIGRmZ0NvZGVCbG9ja3MpCiB7Ci0g
ICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpLCBqZXR0aXNvbmVkQ29kZUJs
b2Nrcyk7CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpLCBkZmdDb2Rl
QmxvY2tzKTsKIH0KIAogdm9pZCBSZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVy
RmlsZS5oCShyZXZpc2lvbiAxMDA0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7Ci0gICAgY2xhc3Mg
SmV0dGlzb25lZENvZGVCbG9ja3M7CisgICAgY2xhc3MgREZHQ29kZUJsb2NrczsKIAogICAgIGNs
YXNzIFJlZ2lzdGVyRmlsZSB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZ2lzdGVy
RmlsZSk7CkBAIC02NSw3ICs2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB+UmVnaXN0
ZXJGaWxlKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKZXR0aXNvbmVkQ29kZUJsb2NrcyYpOworICAgICAgICB2
b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgREZHQ29kZUJs
b2NrcyYpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOyB9CiAgICAgICAgIFJlZ2lz
dGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDEwMDQwOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKEpTR2xvYmFs
RGEKICAgICBPd25QdHI8VD4gY29kZUJsb2NrVG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNl
KCk7CiAgICAgY29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pl
dHRpc29uLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+
dW5saW5rSW5jb21pbmdDYWxscygpOwotICAgIGdsb2JhbERhdGEuaGVhcC5hZGRKZXR0aXNvbmVk
Q29kZUJsb2NrKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihjb2RlQmxvY2tUb0pldHRp
c29uLnJlbGVhc2UoKSkpOworICAgIGdsb2JhbERhdGEuaGVhcC5qZXR0aXNvbkRGR0NvZGVCbG9j
ayhzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4oY29kZUJsb2NrVG9KZXR0aXNvbi5yZWxl
YXNlKCkpKTsKIH0KICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115466</attachid>
            <date>2011-11-16 15:54:27 -0800</date>
            <delta_ts>2011-11-16 17:06:16 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgcodeblocks_patch_4.diff</filename>
            <type>text/plain</type>
            <size>40627</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDExLTExLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZSBibG9jayBqZXR0aXNvbmluZyBzaG91bGQgYmUgcGFydCBvZiB0aGUgR0MncyB0cmFuc2l0
aXZlIGNsb3N1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyNDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBSZXBsYWNlZCBKZXR0aXNvbmVkQ29kZUJsb2NrcyB3aXRoIERGR0NvZGVCbG9j
a3MuIFRoZSBsYXR0ZXIga25vd3MgYWJvdXQgYWxsCisgICAgICAgIERGRyBjb2RlIGJsb2NrcyAo
aS5lLiB0aG9zZSB0aGF0IG1heSBiZSBqZXR0aXNvbmVkLCBhbmQgbWF5IGhhdmUgaW5saW5lZCB3
ZWFrCisgICAgICAgIHJlZmVyZW5jZXMpIGFuZCBoZWxwcyB0cmFjayB3aGF0IHN0YXRlIGVhY2gg
b2YgdGhvc2UgY29kZSBibG9ja3MgaXMgaW4gZHVyaW5nCisgICAgICAgIEdDLiBUaGUgc3RhdGUg
Y29uc2lzdHMgb2YgdHdvIGZsYWdzOyBtYXlCZUV4ZWN1dGluZywgd2hpY2ggdGVsbHMgaWYgdGhl
IGNvZGUgYmxvY2sKKyAgICAgICAgaXMgbGl2ZSBmcm9tIGNhbGwgZnJhbWVzOyBhbmQgaXNKZXR0
aXNvbmVkLCB3aGljaCB0ZWxscyBpZiB0aGUgY29kZSBibG9jayBpcworICAgICAgICBub3Qgb3du
ZWQgYnkgYW55IGV4ZWN1dGFibGUgYW5kIHRodXMgc2hvdWxkIGJlIGRlbGV0ZWQgYXMgc29vbiBh
cyBpdCBpcyBub3QKKyAgICAgICAgbWF5QmVFeGVjdXRpbmcuCisgICAgICAgIAorICAgICAgICAt
IE5vdCBleGVjdXRpbmcsIE5vdCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBtYXkgb3IgbWF5
IG5vdCBiZSByZWFjaGFibGUgZnJvbQorICAgICAgICAgIGFueSBleGVjdXRhYmxlcywgYnV0IGl0
IGlzIG93bmVkIGJ5IGFuIGV4ZWN1dGFibGUsIGFuZCBoZW5jZSBzaG91bGQgYmUKKyAgICAgICAg
ICBrZXB0IGFsaXZlIGlmIGl0cyBleGVjdXRhYmxlIGlzIGxpdmUgYW5kIGlmIGFsbCBvZiBpdHMg
d2VhayByZWZlcmVuY2VzIGFyZQorICAgICAgICAgIGxpdmUuIE90aGVyd2lzZSBpdCBzaG91bGQg
YmUgZGVsZXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQgR0MgY3ljbGUsIGFuZCBpdHMKKyAgICAgICAg
ICBvdXRnb2luZyByZWZlcmVuY2VzIHNob3VsZCBub3QgYmUgc2Nhbm5lZC4KKyAgICAgICAgICAK
KyAgICAgICAgLSBOb3QgZXhlY3V0aW5nIGJ1dCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBz
aG91bGQgYmUgZGVsZXRlZCBhcyBzb29uIGFzCisgICAgICAgICAgcG9zc2libGUgYW5kIG5vbmUg
b2YgaXRzIG91dGdvaW5nIHJlZmVyZW5jZXMgc2hvdWxkIGJlIHNjYW5uZWQuCisgICAgICAgICAg
CisgICAgICAgIC0gRXhlY3V0aW5nIGJ1dCBub3QgamV0dGlzb25lZDogVGhlIGNvZGUgYmxvY2sg
c2hvdWxkIGJlIGtlcHQgYWxpdmUgZHVyaW5nIHRoaXMKKyAgICAgICAgICBHQyBjeWNsZSwgYW5k
IGFsbCBvZiBpdHMgb3V0Z29pbmcgcmVmZXJlbmNlcyAoaW5jbHVkaW5nIHRoZSB3ZWFrIG9uZXMp
CisgICAgICAgICAgc2hvdWxkIGJlIHNjYW5uZWQgYW5kIG1hcmtlZCBzdHJvbmdseS4gVGhlIG1h
eUJlRXhlY3V0aW5nIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXQKKyAgICAgICAgICB0aGUgZW5kIG9m
IHRoZSBHQyBjeWNsZS4KKyAgICAgICAgICAKKyAgICAgICAgLSBFeGVjdXRpbmcgYW5kIGpldHRp
c29uZWQ6IFRoZSBjb2RlIGJsb2NrIHNob3VsZCBiZSBrZXB0IGFsaXZlIGR1cmluZyB0aGlzCisg
ICAgICAgICAgR0MgY3ljbGUsIGFuZCBhbGwgb2YgaXRzIG91dGdvaW5nIHJlZmVyZW5jZXMgKGlu
Y2x1ZGluZyB0aGUgd2VhayBvbmVzKQorICAgICAgICAgIHNob3VsZCBiZSBzY2FubmVkIGFuZCBt
YXJrZWQgc3Ryb25nbHkuIEhvd2V2ZXIsIG9uIHRoZSBuZXh0IEdDIGN5Y2xlLCBpdAorICAgICAg
ICAgIHdpbGwgaGF2ZSBpdHMgbWF5QmVFeGVjdXRpbmcgYml0IGNsZWFyZWQgYW5kIGhlbmNlIGl0
IHdpbGwgYmVjb21lIGEgY2FuZGlkYXRlCisgICAgICAgICAgZm9yIGltbWVkaWF0ZSBkZWxldGlv
biBwcm92aWRlZCBpdCBpcyBub3QgZXhlY3V0aW5nIGFnYWluLgorCisgICAgICAgIFRoaXMgaXMg
cGVyZm9ybWFuY2UtbmV1dHJhbC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpERkdEYXRhOjpERkdEYXRhKToKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6bWFyayk6
CisgICAgICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHA6CisgICAgICAgIChKU0M6OkNv
bnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMu
aDoKKyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6REZHQ29kZUJsb2Nrczo6REZHQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVC
bG9ja3M6On5ERkdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6amV0
dGlzb24pOgorICAgICAgICAoSlNDOjpERkdDb2RlQmxvY2tzOjpjbGVhck1hcmtzKToKKyAgICAg
ICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2Nr
cyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6OnRyYWNlTWFya2VkQ29kZUJsb2Nrcyk6
CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVj
dCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oOiBSZW1vdmVkLgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHA6Cisg
ICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAg
ICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhl
Y3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OmpldHRpc29uQ29kZUJsb2NrKToKKwogMjAxMS0x
MS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBnbG9i
YWwgdmFyaWFibGUgQ1NFIG1pc2hhbmRsZXMgdGhlIGNyb3NzLWdsb2JhbC1vYmplY3QgaW5saW5p
bmcgY29ybmVyIGNhc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDEwMDUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNjcsMTAgKzY3LDEwIEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAgICAgZGZnL0RGR1RodW5rcy5jcHAKIAogICAgIGhlYXAvQWxsb2NhdGlvblNwYWNlLmNw
cAorICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAKICAgICBoZWFwL0hlYXAuY3BwCiAgICAgaGVh
cC9IYW5kbGVIZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlU3RhY2suY3BwCi0gICAgaGVhcC9KZXR0
aXNvbmVkQ29kZUJsb2Nrcy5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAg
ICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAgIGhlYXAvTWFya2VkU3BhY2UuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTAwNTE0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE2MywxMSArMTYzLDExIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9ERkdDb2RlQmxvY2tzLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29k
ZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmggXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEwMDUxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYsMTAgQEAgU09V
UkNFUyArPSBcCiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAogICAgIGhlYXAv
QWxsb2NhdGlvblNwYWNlLmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAor
ICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAgXAog
ICAgIGhlYXAvSGFuZGxlU3RhY2suY3BwIFwKICAgICBoZWFwL0hlYXAuY3BwIFwKLSAgICBoZWFw
L0pldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBcCiAgICAgaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIu
Y3BwIFwKICAgICBoZWFwL01hcmtTdGFjay5jcHAgXAogICAgIGhlYXAvTWFya2VkQmxvY2suY3Bw
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAxMDA1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjAwMiwxMSArMjAwMiwxMSBAQAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv
RmlsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpldHRpc29uZWRD
b2RlQmxvY2tzLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0
aXZlUGF0aD0iLi5cLi5caGVhcFxERkdDb2RlQmxvY2tzLmNwcCIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJs
b2Nrcy5oIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRo
PSIuLlwuLlxoZWFwXERGR0NvZGVCbG9ja3MuaCIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPEZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxMDA1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsOCBAQAogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMz
REMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMTZENzI2MTQyQzM5QzAw
MENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAg
Ki87IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVz
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0
MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkM1NTZGMTQ3MzhG
MzEwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3MzhGMkUwMDEy
MUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYyRTVCRjcxNDYzNTdENTAwM0VC
MkVCIC8qIFNwZWN0cnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJFNUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIz
MDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zl
cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFG
OEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTEwMSw4ICsxMDMsNiBAQAogCQkwRkQ4MkU4NjE0MUYzRkYxMDAx
NzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5jcHAgKi87IH07CiAJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
OEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGRDgyRUY1
MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAvKiBERkdJ
bnRyaW5zaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkwRkQ4MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRjI5MTQy
NkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRDgyRjJDMTQyNkNBNzQwMDE3OUM5
NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25l
ZENvZGVCbG9ja3MuY3BwICovOyB9OwogCQkwRkQ4MkY0QjE0MjgwNkExMDAxNzlDOTQgLyogQml0
VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIEhldXJpc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIy
QzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3Mu
Y3BwICovOyB9OwpAQCAtODEyLDYgKzgxMiw4IEBACiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4
NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE2RDcyNDE0
MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8q
IERGR0NvZGVCbG9ja3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
REZHQ29kZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM1NTZF
MTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyRTVCRjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2Nyw4ICs4NjksNiBAQAogCQkwRkQ4MkU4
NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcmVkaWN0ZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWx1ZVByb2ZpbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyog
REZHSW50cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludHJp
bnNpYy5oOyBwYXRoID0gZGZnL0RGR0ludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSmV0dGlzb25lZENvZGVC
bG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkQ4MkYyOTE0MjZDQTVB
MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSmV0dGlzb25lZENvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGV1cmlzdGljcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVy
aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhldXJpc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODcsMTAgKzE2ODcsMTAgQEAKIAkJMTQy
RTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLywKKwkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5oICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi8sCiAJCQkJMEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxl
SGFuZGxlci5oICovLAotCQkJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVk
Q29kZUJsb2Nrcy5jcHAgKi8sCi0JCQkJMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRp
c29uZWRDb2RlQmxvY2tzLmggKi8sCiAJCQkJQTcwNDU2QUUxNDI3RkIwMzAwMzdEQTY4IC8qIEFs
bG9jYXRpb25TcGFjZS5jcHAgKi8sCiAJCQkJQTcwNDU2QUYxNDI3RkIxNTAwMzdEQTY4IC8qIEFs
bG9jYXRpb25TcGFjZS5oICovLAogCQkJCUE3NTIxRTEyMTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJk
U2V0LmggKi8sCkBAIC0yNTI0LDcgKzI1MjQsNiBAQAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2
RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3
RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgy
RjRCMTQyODA2QTEwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
RDgyRjJCMTQyNkNBNkQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEODJFRjUxNDIzMDc1QjAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFODUxNDFGM0ZFMzAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNr
ZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQg
LyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLApAQCAtMjkyMyw2ICsyOTIyLDcgQEAKIAkJ
CQkwRjQzMTczODE0NkJBQzY5MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpT
RGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM1NTZGMTQ3MzhGMzEwMDEyMUU0RiAv
KiBERkdDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTMyMzcsNyArMzIzNyw2IEBACiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJMEYxNkQ3
MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkw
RkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEODJFOTAxNDIwN0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGlj
dGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU1NjE0MURBRjA4MDAxNzlDOTQg
LyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDU4LDYgKzM0NTcsNyBAQAog
CQkJCTBGQzA5NzlFMTQ2QjI3MjEwMENGMjQ0MiAvKiBERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1
bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3ODgwMTQwMTQ3MUFEOTIwMDQxQjAxNiAvKiBK
U0RhdGVNYXRoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEwMDUxNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDk2LDYgKzE0OTYsMTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogeworI2lmIEVOQUJMRShERkdf
SklUKQorICAgIC8vIFJlbW92ZSBteXNlbGYgZnJvbSB0aGUgc2V0IG9mIERGRyBjb2RlIGJsb2Nr
cy4gTm90ZSB0aGF0IEkgbWF5IG5vdCBiZSBpbiB0aGlzIHNldAorICAgIC8vIChiZWNhdXNlIEkn
bSBub3QgYSBERkcgY29kZSBibG9jayksIGluIHdoaWNoIGNhc2UgdGhpcyBpcyBhIG5vLW9wIGFu
eXdheS4KKyAgICBtX2dsb2JhbERhdGEtPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92
ZSh0aGlzKTsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUp
CiAgICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTAwNTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29tcGFj
dEpJVENvZGVNYXAuaCIKKyNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiREZH
T1NSRW50cnkuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVD
YWNoZS5oIgpAQCAtNzEsNiArNzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAg
Y2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIERGR0NvZGVCbG9ja3M7CiAKICAgICBlbnVtIENv
ZGVUeXBlIHsgR2xvYmFsQ29kZSwgRXZhbENvZGUsIEZ1bmN0aW9uQ29kZSB9OwogCkBAIC00OTIs
NiArNDk0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBtX2pp
dENvZGUgPSBjb2RlOwogICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2Rl
V2l0aEFyaXR5Q2hlY2s7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAgICBpZiAobV9q
aXRDb2RlLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpIHsKKyAgICAgICAgICAgICAgICBj
cmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEt
PmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LmFkZCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyNl
bmRpZgogICAgICAgICB9CiAgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBt
X2ppdENvZGU7IH0KICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldEpJVENvZGVXaXRo
QXJpdHlDaGVjaygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CkBAIC0xMDQ3
LDYgKzEwNTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CisgICAgICAgIGZy
aWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOworICAgICAgICAKICNpZiAhZGVmaW5lZChOREVCVUcp
IHx8IEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUq
LCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3Rv
cjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJikgY29uc3Q7CiAKQEAgLTExMDUsOSArMTEx
NSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFw
PiBtX2ppdENvZGVNYXA7CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgREZHRGF0YSB7CisgICAg
ICAgICAgICBERkdEYXRhKCkKKyAgICAgICAgICAgICAgICA6IG1heUJlRXhlY3V0aW5nKGZhbHNl
KQorICAgICAgICAgICAgICAgICwgaXNKZXR0aXNvbmVkKGZhbHNlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBWZWN0b3I8REZHOjpPU1JF
bnRyeURhdGEsIDQ+IG9zckVudHJ5OwogICAgICAgICAgICAgU2VnbWVudGVkVmVjdG9yPERGRzo6
T1NSRXhpdCwgMTY+IG9zckV4aXQ7CiAgICAgICAgICAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlv
blJlY292ZXJ5LCA0PiBzcGVjdWxhdGlvblJlY292ZXJ5OworICAgICAgICAgICAgYm9vbCBtYXlC
ZUV4ZWN1dGluZzsKKyAgICAgICAgICAgIGJvb2wgaXNKZXR0aXNvbmVkOwogICAgICAgICB9Owog
ICAgICAgICAKICAgICAgICAgT3duUHRyPERGR0RhdGE+IG1fZGZnRGF0YTsKQEAgLTEzMjksNiAr
MTM0NywyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGlzSW5saW5lQ2FsbEZy
YW1lU2xvdygpOwogICAgIH0KICNlbmRpZgorCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaW5s
aW5lIHZvaWQgREZHQ29kZUJsb2Nrczo6bWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spCisg
ICAgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBiZWNhdXNlIHRo
b3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCisgICAgICAgIHVpbnRwdHJf
dCB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVDb2RlQmxvY2sp
OworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGJvdGggb2YgdGhvc2UgbmFz
dHkgY2FzZXMgaW4gb25lIGdvLgorICAgICAgICAvLyAwICsgMSA9IDEKKyAgICAgICAgLy8gLTEg
KyAxID0gMAorICAgICAgICBpZiAodmFsdWUgKyAxIDw9IDEpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0g
bV9zZXQuZmluZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihjYW5kaWRhdGVDb2RlQmxvY2spKTsK
KyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICAoKml0ZXIpLT5tX2RmZ0RhdGEtPm1heUJlRXhlY3V0aW5nID0gdHJ1
ZTsKKyAgICB9CisjZW5kaWYKICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZp
c2lvbiAxMDA1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVS
b290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKIAorI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTEzLDkgKzEx
NCw5IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwKICAgICBnZW5l
cmljQWRkU3BhbihiZWdpbiwgZW5kLCBkdW1teU1hcmtIb29rKTsKIH0KIAotdm9pZCBDb25zZXJ2
YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpldHRpc29uZWRDb2RlQmxv
Y2tzJiBqZXR0aXNvbmVkQ29kZUJsb2NrcykKK3ZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2
b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQogewot
ICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGpldHRpc29uZWRDb2RlQmxvY2tzKTsKKyAg
ICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBkZmdDb2RlQmxvY2tzKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDEwMDUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NlbGw7Ci1jbGFzcyBKZXR0aXNvbmVkQ29k
ZUJsb2NrczsKK2NsYXNzIERGR0NvZGVCbG9ja3M7CiBjbGFzcyBIZWFwOwogCiBjbGFzcyBDb25z
ZXJ2YXRpdmVSb290cyB7CkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB+Q29uc2VydmF0
aXZlUm9vdHMoKTsKIAogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQpOwotICAg
IHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpldHRpc29uZWRDb2RlQmxvY2tzJik7
CisgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgREZHQ29kZUJsb2NrcyYpOwog
ICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDb2RlQmxv
Y2tzLmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworREZHQ29kZUJsb2Nrczo6REZHQ29kZUJsb2NrcygpIHsgfQorCitERkdD
b2RlQmxvY2tzOjp+REZHQ29kZUJsb2NrcygpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDE2
PiB0b1JlbW92ZTsKKyAgICAKKyAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgaWYgKCgqaXRlciktPm1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkKQorICAgICAgICAgICAg
dG9SZW1vdmUuYXBwZW5kKCppdGVyKTsKKyAgICB9CisgICAgCisgICAgV1RGOjpkZWxldGVBbGxW
YWx1ZXModG9SZW1vdmUpOworfQorCit2b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29uKFBhc3NP
d25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2tQdHIpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBkZWxldGUgaXQgbm93OyB3ZSBqdXN0IHdhbnQgaXRzIHBvaW50ZXIuCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tQdHIubGVha1B0cigpOworICAgIAorICAgIEFTU0VSVChj
b2RlQmxvY2spOworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2Rl
OjpERkdKSVQpOworICAgIAorICAgIC8vIEl0IHNob3VsZCBub3QgaGF2ZSBhbHJlYWR5IGJlZW4g
amV0dGlzb25lZC4KKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+bV9kZmdEYXRhLT5pc0pldHRpc29u
ZWQpOworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgdGhpcyBibG9jayBhbHJlYWR5LgorICAgIEFT
U0VSVChtX3NldC5maW5kKGNvZGVCbG9jaykgIT0gbV9zZXQuZW5kKCkpOworICAgIAorICAgIGNv
ZGVCbG9jay0+bV9kZmdEYXRhLT5pc0pldHRpc29uZWQgPSB0cnVlOworfQorCit2b2lkIERGR0Nv
ZGVCbG9ja3M6OmNsZWFyTWFya3MoKQoreworICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6
aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRl
cikKKyAgICAgICAgKCppdGVyKS0+bV9kZmdEYXRhLT5tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOwor
fQorCit2b2lkIERGR0NvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9j
a3MoKQoreworICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAxNj4gdG9SZW1vdmU7CisgICAgCisgICAg
Zm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsg
aXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmICgoKml0ZXIpLT5tX2Rm
Z0RhdGEtPmlzSmV0dGlzb25lZCAmJiAhKCppdGVyKS0+bV9kZmdEYXRhLT5tYXlCZUV4ZWN1dGlu
ZykKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgqaXRlcik7CisgICAgfQorICAgIAorICAg
IFdURjo6ZGVsZXRlQWxsVmFsdWVzKHRvUmVtb3ZlKTsKK30KKwordm9pZCBERkdDb2RlQmxvY2tz
Ojp0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9y
IChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRl
ciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmICgoKml0ZXIpLT5tX2RmZ0Rh
dGEtPm1heUJlRXhlY3V0aW5nKQorICAgICAgICAgICAgKCppdGVyKS0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgfQorfQorCisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKwordm9pZCBE
RkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQYXNzT3duUHRyPENvZGVCbG9jaz4pCit7Cit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0NvZGVCbG9ja3NfaAorI2RlZmluZSBERkdDb2RlQmxvY2tz
X2gKKworI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQ29kZUJsb2NrOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKy8vIERGR0NvZGVCbG9ja3Mg
bm90aWZpZXMgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGFib3V0IG9wdGltaXplZCBjb2RlIGJsb2Nr
cyB0aGF0CisvLyBoYXZlIGRpZmZlcmVudCBtYXJraW5nIGJlaGF2aW9yIGRlcGVuZGluZyBvbiB3
aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBvbiB0aGUKKy8vIHN0YWNrLCBhbmQgdGhhdCBtYXkgYmUg
amV0dGlzb25lZC4gSmV0dGlzb25pbmcgaXMgdGhlIHByb2Nlc3Mgb2YgZGlzY2FyZGluZworLy8g
YSBjb2RlIGJsb2NrIGFmdGVyIGFsbCBjYWxscyB0byBpdCBoYXZlIGJlZW4gdW5saW5rZWQuIFRo
aXMgY2xhc3MgdGFrZXMgc3BlY2lhbAorLy8gY2FyZSB0byBlbnN1cmUgdGhhdCBpZiB0aGVyZSBh
cmUgc3RpbGwgY2FsbCBmcmFtZXMgdGhhdCBhcmUgdXNpbmcgdGhlIGNvZGUKKy8vIGJsb2NrLCB0
aGVuIGl0IHNob3VsZCBub3QgYmUgaW1tZWRpYXRlbHkgZGVsZXRlZCwgYnV0IHJhdGhlciwgaXQg
c2hvdWxkIGJlCisvLyBkZWxldGVkIG9uY2Ugd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBsb25n
ZXIgYW55IHJlZmVyZW5jZXMgdG8gaXQgZnJvbSBhbnkKKy8vIGNhbGwgZnJhbWVzLiBUaGlzIGNs
YXNzIHRha2VzIGl0cyBuYW1lIGZyb20gdGhlIERGRyBjb21waWxlcjsgb25seSBjb2RlIGJsb2Nr
cworLy8gY29tcGlsZWQgYnkgdGhlIERGRyBuZWVkIHNwZWNpYWwgbWFya2luZyBiZWhhdmlvciBp
ZiB0aGV5IGFyZSBvbiB0aGUgc3RhY2ssIGFuZAorLy8gb25seSB0aG9zZSBjb2RlIGJsb2NrcyBt
YXkgYmUgamV0dGlzb25lZC4KKworI2lmIEVOQUJMRShERkdfSklUKQorY2xhc3MgREZHQ29kZUJs
b2NrcyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBERkdD
b2RlQmxvY2tzKCk7CisgICAgfkRGR0NvZGVCbG9ja3MoKTsKKyAgICAKKyAgICAvLyBJbmZvcm0g
dGhlIGNvbGxlY3RvciB0aGF0IGEgY29kZSBibG9jayBoYXMgYmVlbiBqZXR0aXNvbmVkIGZvcm0g
aXRzCisgICAgLy8gZXhlY3V0YWJsZSBhbmQgc2hvdWxkIG9ubHkgYmUga2VwdCBhbGl2ZSBpZiB0
aGVyZSBhcmUgY2FsbCBmcmFtZXMgdGhhdCB1c2UKKyAgICAvLyBpdC4gVGhpcyBpcyB0eXBpY2Fs
bHkgY2FsbGVkIGVpdGhlciBmcm9tIGEgcmVjb21waWxhdGlvbiB0cmlnZ2VyLCBvciBmcm9tCisg
ICAgLy8gYW4gdW5jb25kaXRpb25hbCBmaW5hbGl6ZXIgYXNzb2NpYXRlZCB3aXRoIGEgQ29kZUJs
b2NrIHRoYXQgaGFkIHdlYWsKKyAgICAvLyByZWZlcmVuY2VzLCB3aGVyZSBzb21lIHN1YnNldCBv
ZiB0aG9zZSByZWZlcmVuY2VzIHdlcmUgZGVhZC4KKyAgICB2b2lkIGpldHRpc29uKFBhc3NPd25Q
dHI8Q29kZUJsb2NrPik7CisgICAgCisgICAgLy8gQ2xlYXIgYWxsIG1hcmsgYml0cyBhc3NvY2lh
dGVkIHdpdGggREZHIGNvZGUgYmxvY2tzLgorICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAgIAor
ICAgIC8vIE1hcmsgYSBwb2ludGVyIHRoYXQgbWF5IGJlIGEgQ29kZUJsb2NrIHRoYXQgYmVsb25n
cyB0byB0aGUgc2V0IG9mIERGRyBjb2RlCisgICAgLy8gYmxvY2tzLiBUaGlzIGlzIGRlZmluZWQg
aW5saW5lIGluIENvZGVCbG9jay5oCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVC
bG9jayk7CisgICAgCisgICAgLy8gRGVsZXRlIGFsbCBqZXR0aXNvbmVkIGNvZGUgYmxvY2tzIHRo
YXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQgKGkuZS4gYXJlIG5vdCByZWZlcmVuY2VkCisgICAgLy8g
ZnJvbSBjYWxsIGZyYW1lcykuCisgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2Rl
QmxvY2tzKCk7CisgICAgCisgICAgLy8gVHJhY2UgYWxsIG1hcmtlZCBjb2RlIGJsb2NrcyAoaS5l
LiBhcmUgcmVmZXJlbmNlZCBmcm9tIGNhbGwgZnJhbWVzKS4gVGhlIENvZGVCbG9jaworICAgIC8v
IGlzIGZyZWUgdG8gbWFrZSB1c2Ugb2YgbV9kZmdEYXRhLT5pc01hcmtlZCBhbmQgbV9kZmdEYXRh
LT5pc0pldHRpc29uZWQuCisgICAgdm9pZCB0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0
b3ImKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIAorICAg
IEhhc2hTZXQ8Q29kZUJsb2NrKj4gbV9zZXQ7Cit9OworI2Vsc2UKK2NsYXNzIERGR0NvZGVCbG9j
a3MgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgdm9pZCBq
ZXR0aXNvbihQYXNzT3duUHRyPENvZGVCbG9jaz4pOworICAgIHZvaWQgY2xlYXJNYXJrcygpIHsg
fQorICAgIHZvaWQgbWFyayh2b2lkKikgeyB9CisgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRp
c29uZWRDb2RlQmxvY2tzKCkgeyB9CisgICAgdm9pZCB0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xv
dFZpc2l0b3ImKSB7IH0KK307CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEwMDUxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00ODYsNiArNDg2LDExIEBAIGJvb2wgSGVhcDo6dW5wcm90ZWN0KEpTVmFsdWUgaykKICAgICBy
ZXR1cm4gbV9wcm90ZWN0ZWRWYWx1ZXMucmVtb3ZlKGsuYXNDZWxsKCkpOwogfQogCit2b2lkIEhl
YXA6OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sp
Cit7CisgICAgbV9kZmdDb2RlQmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7Cit9CisKIHZvaWQg
SGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0
b3IpCiB7CiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZh
bHVlcy5lbmQoKTsKQEAgLTQ5MywxMSArNDk4LDYgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVk
T2JqZWN0cyhIZWFwUm9vdAogICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5maXJz
dCk7CiB9CiAKLXZvaWQgSGVhcDo6YWRkSmV0dGlzb25lZENvZGVCbG9jayhQYXNzT3duUHRyPENv
ZGVCbG9jaz4gY29kZUJsb2NrKQotewotICAgIG1famV0dGlzb25lZENvZGVCbG9ja3MuYWRkQ29k
ZUJsb2NrKGNvZGVCbG9jayk7Ci19Ci0KIHZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0VmVjdG9yKFZl
Y3RvcjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9yKQogewogICAgIG1fdGVtcFNvcnRpbmdW
ZWN0b3JzLmFwcGVuZCh0ZW1wVmVjdG9yKTsKQEAgLTU3OSwxMiArNTc5LDExIEBAIHZvaWQgSGVh
cDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgIH0KIAogICAgIENvbnNlcnZhdGl2ZVJvb3Rz
IHJlZ2lzdGVyRmlsZVJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpKTsKLSAgICBtX2pldHRp
c29uZWRDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAgICBtX2RmZ0NvZGVCbG9ja3MuY2xlYXJN
YXJrcygpOwogICAgIHsKICAgICAgICAgR0NQSEFTRShHYXRoZXJSZWdpc3RlckZpbGVSb290cyk7
Ci0gICAgICAgIHJlZ2lzdGVyRmlsZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJlZ2lzdGVy
RmlsZVJvb3RzLCBtX2pldHRpc29uZWRDb2RlQmxvY2tzKTsKKyAgICAgICAgcmVnaXN0ZXJGaWxl
KCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxlUm9vdHMsIG1fZGZnQ29kZUJs
b2Nrcyk7CiAgICAgfQotICAgIG1famV0dGlzb25lZENvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRD
b2RlQmxvY2tzKCk7CiAjaWYgRU5BQkxFKEdHQykKICAgICBNYXJrZWRCbG9jazo6RGlydHlDZWxs
VmVjdG9yIGRpcnR5Q2VsbHM7CiAgICAgaWYgKCFmdWxsR0MpIHsKQEAgLTY2OCw3ICs2NjcsNyBA
QCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAKICAgICAgICAgewogICAg
ICAgICAgICAgR0NQSEFTRShUcmFjZUNvZGVCbG9ja3MpOwotICAgICAgICAgICAgbV9qZXR0aXNv
bmVkQ29kZUJsb2Nrcy50cmFjZUNvZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAgICAgICBtX2Rm
Z0NvZGVCbG9ja3MudHJhY2VNYXJrZWRDb2RlQmxvY2tzKHZpc2l0b3IpOwogICAgICAgICAgICAg
dmlzaXRvci5kb25hdGVBbmREcmFpbigpOwogICAgICAgICB9CiAgICAgCkBAIC04MDUsNiArODA0
LDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAgICAg
R0NQSEFTRShSZXNldEFsbG9jYXRvcik7CiAgICAgICAgIHJlc2V0QWxsb2NhdG9yKCk7CiAgICAg
fQorICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShEZWxldGVDb2RlQmxvY2tzKTsKKyAgICAg
ICAgbV9kZmdDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsK
KyAgICB9CiAKICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgewogICAgICAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBTd2VlcGluZyIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTAwNTE0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5
ICsyMyw5IEBACiAjZGVmaW5lIEhlYXBfaAogCiAjaW5jbHVkZSAiQWxsb2NhdGlvblNwYWNlLmgi
CisjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkhhbmRsZUhlYXAuaCIKICNp
bmNsdWRlICJIYW5kbGVTdGFjay5oIgotI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgi
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgog
I2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCisgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEdDQWN0aXZpdHlDYWxsYmFj
azsKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CiAgICAgY2xhc3MgSGVhcDsKQEAgLTEwMyw3
ICsxMDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcm90ZWN0KEpTVmFsdWUp
OwogICAgICAgICBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90
ZWN0IGNvdW50IGRyb3BzIHRvIDAuCiAgICAgICAgIAotICAgICAgICB2b2lkIGFkZEpldHRpc29u
ZWRDb2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+KTsKKyAgICAgICAgdm9pZCBqZXR0aXNv
bkRGR0NvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4pOwogCiAgICAgICAgIHNpemVfdCBz
aXplKCk7CiAgICAgICAgIHNpemVfdCBjYXBhY2l0eSgpOwpAQCAtMTMxLDYgKzEzMiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBBbGxvY2F0aW9uU3BhY2U7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbG90
VmlzaXRvcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKIAogICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1pbkV4dHJhQ29zdCA9IDI1NjsKICAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBtYXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsKQEAgLTIwNCw3ICsyMDYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAg
ICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKLSAgICAgICAgSmV0dGlzb25lZENvZGVCbG9j
a3MgbV9qZXR0aXNvbmVkQ29kZUJsb2NrczsKKyAgICAgICAgREZHQ29kZUJsb2NrcyBtX2RmZ0Nv
ZGVCbG9ja3M7CiAgICAgICAgIEZpbmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CiAgICAg
ICAgIAogICAgICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNwcAkocmV2aXNp
b24gMTAwNTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVC
bG9ja3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIK
LSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLUpldHRpc29uZWRDb2RlQmxvY2tzOjpKZXR0aXNvbmVkQ29kZUJsb2Nr
cygpIHsgfQotCi1KZXR0aXNvbmVkQ29kZUJsb2Nrczo6fkpldHRpc29uZWRDb2RlQmxvY2tzKCkK
LXsKLSAgICBXVEY6OmRlbGV0ZUFsbEtleXMobV9tYXApOwotfQotCi12b2lkIEpldHRpc29uZWRD
b2RlQmxvY2tzOjphZGRDb2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykK
LXsKLSAgICBBU1NFUlQobV9tYXAuZmluZChjb2RlQmxvY2suZ2V0KCkpID09IG1fbWFwLmVuZCgp
KTsKLSAgICAKLSAgICBtX21hcC5hZGQoY29kZUJsb2NrLmxlYWtQdHIoKSwgZmFsc2UpOwotfQot
Ci12b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjpjbGVhck1hcmtzKCkKLXsKLSAgICBIYXNoTWFw
PENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7Ci0gICAg
SGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0g
ICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNlY29uZCA9IGZhbHNlOwotfQot
Ci12b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjpkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKQot
ewotICAgIFZlY3RvcjxDb2RlQmxvY2sqPiB0b1JlbW92ZTsKLSAgICAKLSAgICBIYXNoTWFwPENv
ZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7Ci0gICAgSGFz
aE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQpCi0gICAgICAg
ICAgICB0b1JlbW92ZS5hcHBlbmQoaXRlci0+Zmlyc3QpOwotICAgIH0KLSAgICAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbV9t
YXAucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKLSAgICAgICAgZGVsZXRlIHRvUmVtb3ZlW2ldOwotICAg
IH0KLX0KLQotdm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6dHJhY2VDb2RlQmxvY2tzKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikKLXsKLSAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+Ojpp
dGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7Ci0gICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBi
b29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPENvZGVC
bG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
Ci0gICAgICAgIGl0ZXItPmZpcnN0LT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmgJKHJldmlzaW9uIDEwMDUxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKLSNkZWZpbmUgSmV0dGlz
b25lZENvZGVCbG9ja3NfaAotCi0jaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKLQotY2xh
c3MgSmV0dGlzb25lZENvZGVCbG9ja3MgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyAv
LyBPbmx5IG1hbGxvYydkIGluIENvbnNlcnZhdGl2ZVJvb3RzCi1wdWJsaWM6Ci0gICAgSmV0dGlz
b25lZENvZGVCbG9ja3MoKTsKLSAgICAKLSAgICB+SmV0dGlzb25lZENvZGVCbG9ja3MoKTsKLSAg
ICAKLSAgICB2b2lkIGFkZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4pOwotICAgIAot
ICAgIHZvaWQgY2xlYXJNYXJrcygpOwotICAgIAotICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRh
dGVDb2RlQmxvY2spCi0gICAgewotICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFu
ZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCi0g
ICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5k
aWRhdGVDb2RlQmxvY2spOwotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGJv
dGggb2YgdGhvc2UgbmFzdHkgY2FzZXMgaW4gb25lIGdvLgotICAgICAgICAvLyAwICsgMSA9IDEK
LSAgICAgICAgLy8gLTEgKyAxID0gMAotICAgICAgICBpZiAodmFsdWUgKyAxIDw9IDEpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBIYXNoTWFwPENvZGVCbG9jayosIGJv
b2w+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihj
YW5kaWRhdGVDb2RlQmxvY2spKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGl0ZXItPnNlY29uZCA9IHRydWU7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7Ci0gICAgCi0gICAgdm9p
ZCB0cmFjZUNvZGVCbG9ja3MoU2xvdFZpc2l0b3ImKTsKLQotcHJpdmF0ZToKLSAgICAvLyBJdCB3
b3VsZCBiZSBncmVhdCB0byB1c2UgYW4gT3duUHRyPENvZGVCbG9jaz4gaGVyZSBidXQgdGhhdCB3
b3VsZAotICAgIC8vIGFsbW9zdCBjZXJ0YWlubHkgbm90IHdvcmsuCi0gICAgSGFzaE1hcDxDb2Rl
QmxvY2sqLCBib29sPiBtX21hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gSmV0dGlzb25lZENvZGVCbG9ja3NfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkocmV2aXNpb24gMTAwNTE0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTczLDkgKzczLDkgQEAgdm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNv
bnNlcnZhdGl2ZVJvbwogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSk7
CiB9CiAKLXZvaWQgUmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2
YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpldHRpc29uZWRDb2RlQmxvY2tzJiBqZXR0
aXNvbmVkQ29kZUJsb2NrcykKK3ZvaWQgUmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVS
b290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIERGR0NvZGVCbG9ja3Mm
IGRmZ0NvZGVCbG9ja3MpCiB7Ci0gICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVu
ZCgpLCBqZXR0aXNvbmVkQ29kZUJsb2Nrcyk7CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJl
Z2luKCksIGVuZCgpLCBkZmdDb2RlQmxvY2tzKTsKIH0KIAogdm9pZCBSZWdpc3RlckZpbGU6OnJl
bGVhc2VFeGNlc3NDYXBhY2l0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCShyZXZpc2lvbiAxMDA1MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ29uc2VydmF0
aXZlUm9vdHM7Ci0gICAgY2xhc3MgSmV0dGlzb25lZENvZGVCbG9ja3M7CisgICAgY2xhc3MgREZH
Q29kZUJsb2NrczsKIAogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZSB7CiAgICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFJlZ2lzdGVyRmlsZSk7CkBAIC02NSw3ICs2NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB+UmVnaXN0ZXJGaWxlKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGdh
dGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQg
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKZXR0aXNvbmVkQ29k
ZUJsb2NrcyYpOworICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJiwgREZHQ29kZUJsb2NrcyYpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNl
KCkpOyB9CiAgICAgICAgIFJlZ2lzdGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDEwMDUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyB2b2lkIGpldHRp
c29uQ29kZUJsb2NrKEpTR2xvYmFsRGEKICAgICBPd25QdHI8VD4gY29kZUJsb2NrVG9KZXR0aXNv
biA9IGNvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgY29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJf
Y2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAg
Y29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5jb21pbmdDYWxscygpOwotICAgIGdsb2JhbERh
dGEuaGVhcC5hZGRKZXR0aXNvbmVkQ29kZUJsb2NrKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJs
b2NrPihjb2RlQmxvY2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOworICAgIGdsb2JhbERhdGEuaGVh
cC5qZXR0aXNvbkRGR0NvZGVCbG9jayhzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4oY29k
ZUJsb2NrVG9KZXR0aXNvbi5yZWxlYXNlKCkpKTsKIH0KICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115487</attachid>
            <date>2011-11-16 17:06:16 -0800</date>
            <delta_ts>2011-11-16 17:06:16 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgcodeblocks_patch_5.diff</filename>
            <type>text/plain</type>
            <size>40692</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDExLTExLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZSBibG9jayBqZXR0aXNvbmluZyBzaG91bGQgYmUgcGFydCBvZiB0aGUgR0MncyB0cmFuc2l0
aXZlIGNsb3N1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyNDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisgICAgICAgIAor
ICAgICAgICBSZXBsYWNlZCBKZXR0aXNvbmVkQ29kZUJsb2NrcyB3aXRoIERGR0NvZGVCbG9ja3Mu
IFRoZSBsYXR0ZXIga25vd3MgYWJvdXQgYWxsCisgICAgICAgIERGRyBjb2RlIGJsb2NrcyAoaS5l
LiB0aG9zZSB0aGF0IG1heSBiZSBqZXR0aXNvbmVkLCBhbmQgbWF5IGhhdmUgaW5saW5lZCB3ZWFr
CisgICAgICAgIHJlZmVyZW5jZXMpIGFuZCBoZWxwcyB0cmFjayB3aGF0IHN0YXRlIGVhY2ggb2Yg
dGhvc2UgY29kZSBibG9ja3MgaXMgaW4gZHVyaW5nCisgICAgICAgIEdDLiBUaGUgc3RhdGUgY29u
c2lzdHMgb2YgdHdvIGZsYWdzOyBtYXlCZUV4ZWN1dGluZywgd2hpY2ggdGVsbHMgaWYgdGhlIGNv
ZGUgYmxvY2sKKyAgICAgICAgaXMgbGl2ZSBmcm9tIGNhbGwgZnJhbWVzOyBhbmQgaXNKZXR0aXNv
bmVkLCB3aGljaCB0ZWxscyBpZiB0aGUgY29kZSBibG9jayBpcworICAgICAgICBub3Qgb3duZWQg
YnkgYW55IGV4ZWN1dGFibGUgYW5kIHRodXMgc2hvdWxkIGJlIGRlbGV0ZWQgYXMgc29vbiBhcyBp
dCBpcyBub3QKKyAgICAgICAgbWF5QmVFeGVjdXRpbmcuCisgICAgICAgIAorICAgICAgICAtIE5v
dCBleGVjdXRpbmcsIE5vdCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBtYXkgb3IgbWF5IG5v
dCBiZSByZWFjaGFibGUgZnJvbQorICAgICAgICAgIGFueSBleGVjdXRhYmxlcywgYnV0IGl0IGlz
IG93bmVkIGJ5IGFuIGV4ZWN1dGFibGUsIGFuZCBoZW5jZSBzaG91bGQgYmUKKyAgICAgICAgICBr
ZXB0IGFsaXZlIGlmIGl0cyBleGVjdXRhYmxlIGlzIGxpdmUgYW5kIGlmIGFsbCBvZiBpdHMgd2Vh
ayByZWZlcmVuY2VzIGFyZQorICAgICAgICAgIGxpdmUuIE90aGVyd2lzZSBpdCBzaG91bGQgYmUg
ZGVsZXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQgR0MgY3ljbGUsIGFuZCBpdHMKKyAgICAgICAgICBv
dXRnb2luZyByZWZlcmVuY2VzIHNob3VsZCBub3QgYmUgc2Nhbm5lZC4KKyAgICAgICAgICAKKyAg
ICAgICAgLSBOb3QgZXhlY3V0aW5nIGJ1dCBqZXR0aXNvbmVkOiBUaGUgY29kZSBibG9jayBzaG91
bGQgYmUgZGVsZXRlZCBhcyBzb29uIGFzCisgICAgICAgICAgcG9zc2libGUgYW5kIG5vbmUgb2Yg
aXRzIG91dGdvaW5nIHJlZmVyZW5jZXMgc2hvdWxkIGJlIHNjYW5uZWQuCisgICAgICAgICAgCisg
ICAgICAgIC0gRXhlY3V0aW5nIGJ1dCBub3QgamV0dGlzb25lZDogVGhlIGNvZGUgYmxvY2sgc2hv
dWxkIGJlIGtlcHQgYWxpdmUgZHVyaW5nIHRoaXMKKyAgICAgICAgICBHQyBjeWNsZSwgYW5kIGFs
bCBvZiBpdHMgb3V0Z29pbmcgcmVmZXJlbmNlcyAoaW5jbHVkaW5nIHRoZSB3ZWFrIG9uZXMpCisg
ICAgICAgICAgc2hvdWxkIGJlIHNjYW5uZWQgYW5kIG1hcmtlZCBzdHJvbmdseS4gVGhlIG1heUJl
RXhlY3V0aW5nIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXQKKyAgICAgICAgICB0aGUgZW5kIG9mIHRo
ZSBHQyBjeWNsZS4KKyAgICAgICAgICAKKyAgICAgICAgLSBFeGVjdXRpbmcgYW5kIGpldHRpc29u
ZWQ6IFRoZSBjb2RlIGJsb2NrIHNob3VsZCBiZSBrZXB0IGFsaXZlIGR1cmluZyB0aGlzCisgICAg
ICAgICAgR0MgY3ljbGUsIGFuZCBhbGwgb2YgaXRzIG91dGdvaW5nIHJlZmVyZW5jZXMgKGluY2x1
ZGluZyB0aGUgd2VhayBvbmVzKQorICAgICAgICAgIHNob3VsZCBiZSBzY2FubmVkIGFuZCBtYXJr
ZWQgc3Ryb25nbHkuIEhvd2V2ZXIsIG9uIHRoZSBuZXh0IEdDIGN5Y2xlLCBpdAorICAgICAgICAg
IHdpbGwgaGF2ZSBpdHMgbWF5QmVFeGVjdXRpbmcgYml0IGNsZWFyZWQgYW5kIGhlbmNlIGl0IHdp
bGwgYmVjb21lIGEgY2FuZGlkYXRlCisgICAgICAgICAgZm9yIGltbWVkaWF0ZSBkZWxldGlvbiBw
cm92aWRlZCBpdCBpcyBub3QgZXhlY3V0aW5nIGFnYWluLgorCisgICAgICAgIFRoaXMgaXMgcGVy
Zm9ybWFuY2UtbmV1dHJhbC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp+Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpE
RkdEYXRhOjpERkdEYXRhKToKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6bWFyayk6Cisg
ICAgICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHA6CisgICAgICAgIChKU0M6OkNvbnNl
cnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuaDoK
KyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
REZHQ29kZUJsb2Nrczo6REZHQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9j
a3M6On5ERkdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6amV0dGlz
b24pOgorICAgICAgICAoSlNDOjpERkdDb2RlQmxvY2tzOjpjbGVhck1hcmtzKToKKyAgICAgICAg
KEpTQzo6REZHQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2Nrcyk6
CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6OnRyYWNlTWFya2VkQ29kZUJsb2Nrcyk6Cisg
ICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvSGVh
cC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAgICAg
ICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0
YWJsZS5jcHA6CisgICAgICAgIChKU0M6OmpldHRpc29uQ29kZUJsb2NrKToKKwogMjAxMS0xMS0x
NiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEpTQzo6Q29kZUJs
b2NrIHNob3VsZCBrbm93IHdoaWNoIHJlZmVyZW5jZXMgZ2VuZXJhdGVkIGJ5IHRoZSBERkcgYXJl
IHdlYWsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEw
MDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNjcsMTAgKzY3LDEwIEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
ZGZnL0RGR1RodW5rcy5jcHAKIAogICAgIGhlYXAvQWxsb2NhdGlvblNwYWNlLmNwcAorICAgIGhl
YXAvREZHQ29kZUJsb2Nrcy5jcHAKICAgICBoZWFwL0hlYXAuY3BwCiAgICAgaGVhcC9IYW5kbGVI
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlU3RhY2suY3BwCi0gICAgaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAgICBoZWFwL01h
cmtlZEJsb2NrLmNwcAogICAgIGhlYXAvTWFya2VkU3BhY2UuY3BwCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTAwNTI3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTE2MywxMSArMTYzLDExIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b25zZXJ2YXRpdmVSb290cy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2Rl
QmxvY2tzLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZUhlYXAuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25l
ZENvZGVCbG9ja3MuY3BwIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVk
Q29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmggXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L1RhcmdldC5wcmkJKHJldmlzaW9uIDEwMDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9U
YXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYsMTAgQEAgU09VUkNFUyArPSBc
CiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAogICAgIGhlYXAvQWxsb2NhdGlv
blNwYWNlLmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAorICAgIGhlYXAv
REZHQ29kZUJsb2Nrcy5jcHAgXAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAgXAogICAgIGhlYXAv
SGFuZGxlU3RhY2suY3BwIFwKICAgICBoZWFwL0hlYXAuY3BwIFwKLSAgICBoZWFwL0pldHRpc29u
ZWRDb2RlQmxvY2tzLmNwcCBcCiAgICAgaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwIFwKICAg
ICBoZWFwL01hcmtTdGFjay5jcHAgXAogICAgIGhlYXAvTWFya2VkQmxvY2suY3BwIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qCShyZXZpc2lvbiAxMDA1MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjAwMiwxMSArMjAwMiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpldHRpc29uZWRDb2RlQmxvY2tz
LmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0i
Li5cLi5caGVhcFxERkdDb2RlQmxvY2tzLmNwcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPEZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxo
ZWFwXERGR0NvZGVCbG9ja3MuaCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPEZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMDA1MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQAog
CQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhG
ODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAv
KiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CiAJ
CTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNC
MUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkM1NTZGMTQ3MzhGMzEwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkM1NTcw
MTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBE
RkdDb2RlQmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYyRTVCRjcxNDYzNTdENTAwM0VCMkVCIC8qIFNw
ZWN0cnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJFNUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYg
LyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0
NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmly
dHVhbFJlZ2lzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEwMSw4ICsxMDMsNiBAQAogCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyog
UHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi87
IH07CiAJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFOEUxNDIwN0E1
MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGRDgyRUY1MTQyMzA3NUIw
MDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkQ4
MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRjI5MTQyNkNBNUEwMDE3
OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRDgyRjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0
aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9j
a3MuY3BwICovOyB9OwogCQkwRkQ4MkY0QjE0MjgwNkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0
MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIEhldXJp
c3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4
IC8qIEhldXJpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwICovOyB9
OwpAQCAtODEyLDYgKzgxMiw4IEBACiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXpl
TGltaXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1p
dHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE2RDcyNDE0MkMzOUEyMDBD
Rjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEJpdFZlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1
MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVC
bG9ja3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHQ29kZUJs
b2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM1NTZFMTQ3MzhGMkUw
MDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERGR0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRTVC
RjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2
QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2Nyw4ICs4NjksNiBAQAogCQkwRkQ4MkU4NDE0MUYzRkRB
MDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQcmVkaWN0ZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50cmlu
c2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludHJpbnNpYy5oOyBw
YXRoID0gZGZnL0RGR0ludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSmV0dGlzb25lZENvZGVCbG9ja3MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQg
LyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSmV0dGlzb25lZENvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGV1cmlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhldXJpc3RpY3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODcsMTAgKzE2ODcsMTAgQEAKIAkJMTQyRTMxMkExMzRG
RjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNw
cCAqLywKKwkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICov
LAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVy
LmggKi8sCiAJCQkJMEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5o
ICovLAotCQkJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAgKi8sCi0JCQkJMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2Rl
QmxvY2tzLmggKi8sCiAJCQkJQTcwNDU2QUUxNDI3RkIwMzAwMzdEQTY4IC8qIEFsbG9jYXRpb25T
cGFjZS5jcHAgKi8sCiAJCQkJQTcwNDU2QUYxNDI3RkIxNTAwMzdEQTY4IC8qIEFsbG9jYXRpb25T
cGFjZS5oICovLAogCQkJCUE3NTIxRTEyMTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJkU2V0LmggKi8s
CkBAIC0yNTI0LDcgKzI1MjQsNiBAQAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBB
Uk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZE
RTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRjRCMTQyODA2
QTEwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRDgyRjJCMTQy
NkNBNkQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEODJFRjUxNDIzMDc1QjAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEODJFODUxNDFGM0ZFMzAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQb2ludGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NS
RW50cnkuaCBpbiBIZWFkZXJzICovLApAQCAtMjkyMyw2ICsyOTIyLDcgQEAKIAkJCQkwRjQzMTcz
ODE0NkJBQzY5MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGgu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM1NTZGMTQ3MzhGMzEwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTMyMzcsNyArMzIzNyw2IEBACiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJMEYxNkQ3MjYxNDJDMzlD
MDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkQ4MkYyQzE0
MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZEODJFOTAxNDIwN0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NS
RW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDU4LDYgKzM0NTcsNyBAQAogCQkJCTBGQzA5
NzlFMTQ2QjI3MjEwMENGMjQ0MiAvKiBERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk3ODgwMTQwMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRo
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdD
b2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEwMDUyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDk2LDYgKzE0OTYsMTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogeworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IC8vIFJlbW92ZSBteXNlbGYgZnJvbSB0aGUgc2V0IG9mIERGRyBjb2RlIGJsb2Nrcy4gTm90ZSB0
aGF0IEkgbWF5IG5vdCBiZSBpbiB0aGlzIHNldAorICAgIC8vIChiZWNhdXNlIEknbSBub3QgYSBE
RkcgY29kZSBibG9jayksIGluIHdoaWNoIGNhc2UgdGhpcyBpcyBhIG5vLW9wIGFueXdheS4KKyAg
ICBtX2dsb2JhbERhdGEtPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92ZSh0aGlzKTsK
KyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVt
cFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTAwNTI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVN
YXAuaCIKKyNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnku
aCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgpA
QCAtNzEsNiArNzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgY2xhc3MgRXhl
Y1N0YXRlOworICAgIGNsYXNzIERGR0NvZGVCbG9ja3M7CiAKICAgICBlbnVtIENvZGVUeXBlIHsg
R2xvYmFsQ29kZSwgRXZhbENvZGUsIEZ1bmN0aW9uQ29kZSB9OwogCkBAIC01MjMsNiArNTI1LDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBtX2ppdENvZGUgPSBj
b2RlOwogICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5
Q2hlY2s7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAgICBpZiAobV9qaXRDb2RlLmpp
dFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpIHsKKyAgICAgICAgICAgICAgICBjcmVhdGVERkdE
YXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAubV9k
ZmdDb2RlQmxvY2tzLm1fc2V0LmFkZCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogICAg
ICAgICB9CiAgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7
IH0KICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldEpJVENvZGVXaXRoQXJpdHlDaGVj
aygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CkBAIC0xMDgwLDYgKzEwODgs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFz
cyBERkdDb2RlQmxvY2tzOworICAgICAgICAKICNpZiAhZGVmaW5lZChOREVCVUcpIHx8IEVOQUJM
RShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUqLCBjb25zdCBW
ZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVj
dGlvbj46OmNvbnN0X2l0ZXJhdG9yJikgY29uc3Q7CiAKQEAgLTExNTQsMTEgKzExNjQsMTkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgREZH
RGF0YSB7CisgICAgICAgICAgICBERkdEYXRhKCkKKyAgICAgICAgICAgICAgICA6IG1heUJlRXhl
Y3V0aW5nKGZhbHNlKQorICAgICAgICAgICAgICAgICwgaXNKZXR0aXNvbmVkKGZhbHNlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBWZWN0
b3I8REZHOjpPU1JFbnRyeURhdGE+IG9zckVudHJ5OwogICAgICAgICAgICAgU2VnbWVudGVkVmVj
dG9yPERGRzo6T1NSRXhpdCwgOD4gb3NyRXhpdDsKICAgICAgICAgICAgIFZlY3RvcjxERkc6OlNw
ZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAgICAgICAgICAgICBWZWN0
b3I8V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24+IHRyYW5zaXRpb25zOwogICAgICAgICAgICAgVmVj
dG9yPFdyaXRlQmFycmllcjxKU0NlbGw+ID4gd2Vha1JlZmVyZW5jZXM7CisgICAgICAgICAgICBi
b29sIG1heUJlRXhlY3V0aW5nOworICAgICAgICAgICAgYm9vbCBpc0pldHRpc29uZWQ7CiAgICAg
ICAgIH07CiAgICAgICAgIAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwpAQCAt
MTM4MCw2ICsxMzk4LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaXNJbmxp
bmVDYWxsRnJhbWVTbG93KCk7CiAgICAgfQogI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBpbmxpbmUgdm9pZCBERkdDb2RlQmxvY2tzOjptYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVC
bG9jaykKKyAgICB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIDAgYW5kIC0xIGJl
Y2F1c2UgdGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhhc2hNYXAgYXMgbWFya2Vycy4KKyAgICAgICAg
dWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRpZGF0ZUNv
ZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgYm90aCBvZiB0
aG9zZSBuYXN0eSBjYXNlcyBpbiBvbmUgZ28uCisgICAgICAgIC8vIDAgKyAxID0gMQorICAgICAg
ICAvLyAtMSArIDEgPSAwCisgICAgICAgIGlmICh2YWx1ZSArIDEgPD0gMSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3NldC5maW5kKHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGNhbmRpZGF0ZUNvZGVC
bG9jaykpOworICAgICAgICBpZiAoaXRlciA9PSBtX3NldC5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgICgqaXRlciktPm1fZGZnRGF0YS0+bWF5QmVFeGVjdXRp
bmcgPSB0cnVlOworICAgIH0KKyNlbmRpZgogICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAJKHJldmlzaW9uIDEwMDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTAgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkpT
Q2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiSmV0dGlzb25lZENvZGVC
bG9ja3MuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0x
MTMsOSArMTE0LDkgQEAgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLAog
ICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGR1bW15TWFya0hvb2spOwogfQogCi12b2lk
IENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSmV0dGlzb25l
ZENvZGVCbG9ja3MmIGpldHRpc29uZWRDb2RlQmxvY2tzKQordm9pZCBDb25zZXJ2YXRpdmVSb290
czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIERGR0NvZGVCbG9ja3MmIGRmZ0NvZGVCbG9j
a3MpCiB7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgamV0dGlzb25lZENvZGVCbG9j
a3MpOworICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGRmZ0NvZGVCbG9ja3MpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMTAwNTI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQ2VsbDsKLWNsYXNzIEpldHRp
c29uZWRDb2RlQmxvY2tzOworY2xhc3MgREZHQ29kZUJsb2NrczsKIGNsYXNzIEhlYXA7CiAKIGNs
YXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIH5D
b25zZXJ2YXRpdmVSb290cygpOwogCiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVu
ZCk7Ci0gICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSmV0dGlzb25lZENvZGVC
bG9ja3MmKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBERkdDb2RlQmxv
Y2tzJik7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBKU0NlbGwqKiByb290cygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R0NvZGVCbG9ja3MuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlNsb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCitERkdDb2RlQmxvY2tzOjpERkdDb2RlQmxvY2tzKCkgeyB9
CisKK0RGR0NvZGVCbG9ja3M6On5ERkdDb2RlQmxvY2tzKCkKK3sKKyAgICBWZWN0b3I8Q29kZUJs
b2NrKiwgMTY+IHRvUmVtb3ZlOworICAgIAorICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6
aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBpZiAoKCppdGVyKS0+bV9kZmdEYXRhLT5pc0pldHRpc29uZWQpCisgICAg
ICAgICAgICB0b1JlbW92ZS5hcHBlbmQoKml0ZXIpOworICAgIH0KKyAgICAKKyAgICBXVEY6OmRl
bGV0ZUFsbFZhbHVlcyh0b1JlbW92ZSk7Cit9CisKK3ZvaWQgREZHQ29kZUJsb2Nrczo6amV0dGlz
b24oUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9ja1B0cikKK3sKKyAgICAvLyBXZSBkb24n
dCB3YW50IHRvIGRlbGV0ZSBpdCBub3c7IHdlIGp1c3Qgd2FudCBpdHMgcG9pbnRlci4KKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja1B0ci5sZWFrUHRyKCk7CisgICAgCisgICAg
QVNTRVJUKGNvZGVCbG9jayk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09
IEpJVENvZGU6OkRGR0pJVCk7CisgICAgCisgICAgLy8gSXQgc2hvdWxkIG5vdCBoYXZlIGFscmVh
ZHkgYmVlbiBqZXR0aXNvbmVkLgorICAgIEFTU0VSVCghY29kZUJsb2NrLT5tX2RmZ0RhdGEtPmlz
SmV0dGlzb25lZCk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSB0aGlzIGJsb2NrIGFscmVhZHku
CisgICAgQVNTRVJUKG1fc2V0LmZpbmQoY29kZUJsb2NrKSAhPSBtX3NldC5lbmQoKSk7CisgICAg
CisgICAgY29kZUJsb2NrLT5tX2RmZ0RhdGEtPmlzSmV0dGlzb25lZCA9IHRydWU7Cit9CisKK3Zv
aWQgREZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcygpCit7CisgICAgZm9yIChIYXNoU2V0PENvZGVC
bG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQo
KTsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT5tX2RmZ0RhdGEtPm1heUJlRXhlY3V0aW5nID0g
ZmFsc2U7Cit9CisKK3ZvaWQgREZHQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVk
Q29kZUJsb2NrcygpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDE2PiB0b1JlbW92ZTsKKyAg
ICAKKyAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5i
ZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKCgqaXRl
ciktPm1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkICYmICEoKml0ZXIpLT5tX2RmZ0RhdGEtPm1heUJl
RXhlY3V0aW5nKQorICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCppdGVyKTsKKyAgICB9Cisg
ICAgCisgICAgV1RGOjpkZWxldGVBbGxWYWx1ZXModG9SZW1vdmUpOworfQorCit2b2lkIERGR0Nv
ZGVCbG9ja3M6OnRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdp
bigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKCgqaXRlcikt
Pm1fZGZnRGF0YS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgICAgICAoKml0ZXIpLT52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB9Cit9CisKKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQor
Cit2b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29uKFBhc3NPd25QdHI8Q29kZUJsb2NrPikKK3sK
K30KKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29kZUJsb2Nrc19oCisjZGVmaW5lIERGR0Nv
ZGVCbG9ja3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTbG90VmlzaXRvcjsKKworLy8gREZHQ29k
ZUJsb2NrcyBub3RpZmllcyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYWJvdXQgb3B0aW1pemVkIGNv
ZGUgYmxvY2tzIHRoYXQKKy8vIGhhdmUgZGlmZmVyZW50IG1hcmtpbmcgYmVoYXZpb3IgZGVwZW5k
aW5nIG9uIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIG9uIHRoZQorLy8gc3RhY2ssIGFuZCB0aGF0
IG1heSBiZSBqZXR0aXNvbmVkLiBKZXR0aXNvbmluZyBpcyB0aGUgcHJvY2VzcyBvZiBkaXNjYXJk
aW5nCisvLyBhIGNvZGUgYmxvY2sgYWZ0ZXIgYWxsIGNhbGxzIHRvIGl0IGhhdmUgYmVlbiB1bmxp
bmtlZC4gVGhpcyBjbGFzcyB0YWtlcyBzcGVjaWFsCisvLyBjYXJlIHRvIGVuc3VyZSB0aGF0IGlm
IHRoZXJlIGFyZSBzdGlsbCBjYWxsIGZyYW1lcyB0aGF0IGFyZSB1c2luZyB0aGUgY29kZQorLy8g
YmxvY2ssIHRoZW4gaXQgc2hvdWxkIG5vdCBiZSBpbW1lZGlhdGVseSBkZWxldGVkLCBidXQgcmF0
aGVyLCBpdCBzaG91bGQgYmUKKy8vIGRlbGV0ZWQgb25jZSB3ZSBrbm93IHRoYXQgdGhlcmUgYXJl
IG5vIGxvbmdlciBhbnkgcmVmZXJlbmNlcyB0byBpdCBmcm9tIGFueQorLy8gY2FsbCBmcmFtZXMu
IFRoaXMgY2xhc3MgdGFrZXMgaXRzIG5hbWUgZnJvbSB0aGUgREZHIGNvbXBpbGVyOyBvbmx5IGNv
ZGUgYmxvY2tzCisvLyBjb21waWxlZCBieSB0aGUgREZHIG5lZWQgc3BlY2lhbCBtYXJraW5nIGJl
aGF2aW9yIGlmIHRoZXkgYXJlIG9uIHRoZSBzdGFjaywgYW5kCisvLyBvbmx5IHRob3NlIGNvZGUg
YmxvY2tzIG1heSBiZSBqZXR0aXNvbmVkLgorCisjaWYgRU5BQkxFKERGR19KSVQpCitjbGFzcyBE
RkdDb2RlQmxvY2tzIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgor
ICAgIERGR0NvZGVCbG9ja3MoKTsKKyAgICB+REZHQ29kZUJsb2NrcygpOworICAgIAorICAgIC8v
IEluZm9ybSB0aGUgY29sbGVjdG9yIHRoYXQgYSBjb2RlIGJsb2NrIGhhcyBiZWVuIGpldHRpc29u
ZWQgZm9ybSBpdHMKKyAgICAvLyBleGVjdXRhYmxlIGFuZCBzaG91bGQgb25seSBiZSBrZXB0IGFs
aXZlIGlmIHRoZXJlIGFyZSBjYWxsIGZyYW1lcyB0aGF0IHVzZQorICAgIC8vIGl0LiBUaGlzIGlz
IHR5cGljYWxseSBjYWxsZWQgZWl0aGVyIGZyb20gYSByZWNvbXBpbGF0aW9uIHRyaWdnZXIsIG9y
IGZyb20KKyAgICAvLyBhbiB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBhc3NvY2lhdGVkIHdpdGgg
YSBDb2RlQmxvY2sgdGhhdCBoYWQgd2VhaworICAgIC8vIHJlZmVyZW5jZXMsIHdoZXJlIHNvbWUg
c3Vic2V0IG9mIHRob3NlIHJlZmVyZW5jZXMgd2VyZSBkZWFkLgorICAgIHZvaWQgamV0dGlzb24o
UGFzc093blB0cjxDb2RlQmxvY2s+KTsKKyAgICAKKyAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRz
IGFzc29jaWF0ZWQgd2l0aCBERkcgY29kZSBibG9ja3MuCisgICAgdm9pZCBjbGVhck1hcmtzKCk7
CisgICAgCisgICAgLy8gTWFyayBhIHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhh
dCBiZWxvbmdzIHRvIHRoZSBzZXQgb2YgREZHIGNvZGUKKyAgICAvLyBibG9ja3MuIFRoaXMgaXMg
ZGVmaW5lZCBpbmxpbmUgaW4gQ29kZUJsb2NrLmgKKyAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlk
YXRlQ29kZUJsb2NrKTsKKyAgICAKKyAgICAvLyBEZWxldGUgYWxsIGpldHRpc29uZWQgY29kZSBi
bG9ja3MgdGhhdCBoYXZlIG5vdCBiZWVuIG1hcmtlZCAoaS5lLiBhcmUgbm90IHJlZmVyZW5jZWQK
KyAgICAvLyBmcm9tIGNhbGwgZnJhbWVzKS4KKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlz
b25lZENvZGVCbG9ja3MoKTsKKyAgICAKKyAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxv
Y2tzIChpLmUuIGFyZSByZWZlcmVuY2VkIGZyb20gY2FsbCBmcmFtZXMpLiBUaGUgQ29kZUJsb2Nr
CisgICAgLy8gaXMgZnJlZSB0byBtYWtlIHVzZSBvZiBtX2RmZ0RhdGEtPmlzTWFya2VkIGFuZCBt
X2RmZ0RhdGEtPmlzSmV0dGlzb25lZC4KKyAgICB2b2lkIHRyYWNlTWFya2VkQ29kZUJsb2NrcyhT
bG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Cisg
ICAgCisgICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX3NldDsKK307CisjZWxzZQorY2xhc3MgREZH
Q29kZUJsb2NrcyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAg
ICB2b2lkIGpldHRpc29uKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CisgICAgdm9pZCBjbGVhck1h
cmtzKCkgeyB9CisgICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KKyAgICB2b2lkIGRlbGV0ZVVubWFy
a2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKSB7IH0KKyAgICB2b2lkIHRyYWNlTWFya2VkQ29kZUJs
b2NrcyhTbG90VmlzaXRvciYpIHsgfQorfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24g
MTAwNTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4Niw2ICs0ODYsMTEgQEAgYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBr
KQogICAgIHJldHVybiBtX3Byb3RlY3RlZFZhbHVlcy5yZW1vdmUoay5hc0NlbGwoKSk7CiB9CiAK
K3ZvaWQgSGVhcDo6amV0dGlzb25ERkdDb2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNv
ZGVCbG9jaykKK3sKKyAgICBtX2RmZ0NvZGVCbG9ja3MuamV0dGlzb24oY29kZUJsb2NrKTsKK30K
Kwogdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBS
b290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJv
dGVjdGVkVmFsdWVzLmVuZCgpOwpAQCAtNDkzLDExICs0OTgsNiBAQCB2b2lkIEhlYXA6Om1hcmtQ
cm90ZWN0ZWRPYmplY3RzKEhlYXBSb290CiAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgm
aXQtPmZpcnN0KTsKIH0KIAotdm9pZCBIZWFwOjphZGRKZXR0aXNvbmVkQ29kZUJsb2NrKFBhc3NP
d25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCi17Ci0gICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nr
cy5hZGRDb2RlQmxvY2soY29kZUJsb2NrKTsKLX0KLQogdm9pZCBIZWFwOjpwdXNoVGVtcFNvcnRW
ZWN0b3IoVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qIHRlbXBWZWN0b3IpCiB7CiAgICAgbV90ZW1w
U29ydGluZ1ZlY3RvcnMuYXBwZW5kKHRlbXBWZWN0b3IpOwpAQCAtNTc5LDEyICs1NzksMTEgQEAg
dm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgfQogCiAgICAgQ29uc2VydmF0
aXZlUm9vdHMgcmVnaXN0ZXJGaWxlUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCkpOwotICAg
IG1famV0dGlzb25lZENvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIG1fZGZnQ29kZUJsb2Nr
cy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdhdGhlclJlZ2lzdGVyRmls
ZVJvb3RzKTsKLSAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMo
cmVnaXN0ZXJGaWxlUm9vdHMsIG1famV0dGlzb25lZENvZGVCbG9ja3MpOworICAgICAgICByZWdp
c3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZpbGVSb290cywgbV9k
ZmdDb2RlQmxvY2tzKTsKICAgICB9Ci0gICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5kZWxldGVV
bm1hcmtlZENvZGVCbG9ja3MoKTsKICNpZiBFTkFCTEUoR0dDKQogICAgIE1hcmtlZEJsb2NrOjpE
aXJ0eUNlbGxWZWN0b3IgZGlydHlDZWxsczsKICAgICBpZiAoIWZ1bGxHQykgewpAQCAtNjY4LDcg
KzY2Nyw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgIAogICAgICAg
ICB7CiAgICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrcyk7Ci0gICAgICAgICAgICBt
X2pldHRpc29uZWRDb2RlQmxvY2tzLnRyYWNlQ29kZUJsb2Nrcyh2aXNpdG9yKTsKKyAgICAgICAg
ICAgIG1fZGZnQ29kZUJsb2Nrcy50cmFjZU1hcmtlZENvZGVCbG9ja3ModmlzaXRvcik7CiAgICAg
ICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CiAgICAgICAgIH0KICAgICAKQEAgLTgw
NSw2ICs4MDQsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwog
ICAgICAgICBHQ1BIQVNFKFJlc2V0QWxsb2NhdG9yKTsKICAgICAgICAgcmVzZXRBbGxvY2F0b3Io
KTsKICAgICB9CisgICAgCisgICAgeworICAgICAgICBHQ1BIQVNFKERlbGV0ZUNvZGVCbG9ja3Mp
OworICAgICAgICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJs
b2NrcygpOworICAgIH0KIAogICAgIGlmIChzd2VlcFRvZ2dsZSA9PSBEb1N3ZWVwKSB7CiAgICAg
ICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rpb246IFN3
ZWVwaW5nIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMDA1
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDkgKzIzLDkgQEAKICNkZWZpbmUgSGVhcF9oCiAKICNpbmNsdWRlICJBbGxvY2F0aW9u
U3BhY2UuaCIKKyNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiSGFuZGxlSGVh
cC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCi0jaW5jbHVkZSAiSmV0dGlzb25lZENvZGVC
bG9ja3MuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
U2V0LmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgR0NBY3Rpdml0
eUNhbGxiYWNrOwogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKICAgICBjbGFzcyBIZWFwOwpA
QCAtMTAzLDcgKzEwNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByb3RlY3Qo
SlNWYWx1ZSk7CiAgICAgICAgIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4g
dGhlIHByb3RlY3QgY291bnQgZHJvcHMgdG8gMC4KICAgICAgICAgCi0gICAgICAgIHZvaWQgYWRk
SmV0dGlzb25lZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4pOworICAgICAgICB2b2lk
IGpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CiAKICAgICAgICAg
c2l6ZV90IHNpemUoKTsKICAgICAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0xMzEsNiArMTMy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpb25TcGFjZTsKICAgICAgICAgZnJpZW5kIGNs
YXNzIFNsb3RWaXNpdG9yOworICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluRXh0cmFDb3N0ID0gMjU2OwogICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1heEV4dHJhQ29zdCA9IDEwMjQgKiAxMDI0OwpAQCAtMjA0LDcgKzIw
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEhhbmRsZUhlYXAgbV9oYW5kbGVIZWFw
OwogICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBKZXR0aXNvbmVk
Q29kZUJsb2NrcyBtX2pldHRpc29uZWRDb2RlQmxvY2tzOworICAgICAgICBERkdDb2RlQmxvY2tz
IG1fZGZnQ29kZUJsb2NrczsKICAgICAgICAgRmluYWxpemVyT3duZXIgbV9maW5hbGl6ZXJPd25l
cjsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3Bw
CShyZXZpc2lvbiAxMDA1MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNv
bmVkQ29kZUJsb2Nrcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKLQotI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSmV0dGlzb25lZENvZGVCbG9ja3M6OkpldHRpc29uZWRD
b2RlQmxvY2tzKCkgeyB9Ci0KLUpldHRpc29uZWRDb2RlQmxvY2tzOjp+SmV0dGlzb25lZENvZGVC
bG9ja3MoKQotewotICAgIFdURjo6ZGVsZXRlQWxsS2V5cyhtX21hcCk7Ci19Ci0KLXZvaWQgSmV0
dGlzb25lZENvZGVCbG9ja3M6OmFkZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrKQotewotICAgIEFTU0VSVChtX21hcC5maW5kKGNvZGVCbG9jay5nZXQoKSkgPT0gbV9t
YXAuZW5kKCkpOwotICAgIAotICAgIG1fbWFwLmFkZChjb2RlQmxvY2subGVha1B0cigpLCBmYWxz
ZSk7Ci19Ci0KLXZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmNsZWFyTWFya3MoKQotewotICAg
IEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4o
KTsKLSAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQgPSBtX21hcC5l
bmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIg
PSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c2Vjb25kID0gZmFs
c2U7Ci19Ci0KLXZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2VkQ29kZUJs
b2NrcygpCi17Ci0gICAgVmVjdG9yPENvZGVCbG9jayo+IHRvUmVtb3ZlOwotICAgIAotICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4oKTsK
LSAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQo
KTsKLSAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBi
ZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoIWl0ZXItPnNlY29uZCkK
LSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdGVyLT5maXJzdCk7Ci0gICAgfQotICAgIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkgewotICAg
ICAgICBtX21hcC5yZW1vdmUodG9SZW1vdmVbaV0pOwotICAgICAgICBkZWxldGUgdG9SZW1vdmVb
aV07Ci0gICAgfQotfQotCi12b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjp0cmFjZUNvZGVCbG9j
a3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQotewotICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
Ym9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4oKTsKLSAgICBIYXNoTWFwPENvZGVC
bG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKLSAgICBmb3IgKEhhc2hN
YXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7
ICsraXRlcikKLSAgICAgICAgaXRlci0+Zmlyc3QtPnZpc2l0QWdncmVnYXRlKHNsb3RWaXNpdG9y
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24gMTAwNTI3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSmV0dGlzb25lZENvZGVCbG9ja3NfaAotI2RlZmlu
ZSBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCi0KLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFNsb3RWaXNpdG9y
OwotCi1jbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrcyB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7IC8vIE9ubHkgbWFsbG9jJ2QgaW4gQ29uc2VydmF0aXZlUm9vdHMKLXB1YmxpYzoKLSAg
ICBKZXR0aXNvbmVkQ29kZUJsb2NrcygpOwotICAgIAotICAgIH5KZXR0aXNvbmVkQ29kZUJsb2Nr
cygpOwotICAgIAotICAgIHZvaWQgYWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7
Ci0gICAgCi0gICAgdm9pZCBjbGVhck1hcmtzKCk7Ci0gICAgCi0gICAgdm9pZCBtYXJrKHZvaWQq
IGNhbmRpZGF0ZUNvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sg
Zm9yIDAgYW5kIC0xIGJlY2F1c2UgdGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhhc2hNYXAgYXMgbWFy
a2Vycy4KLSAgICAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGNhbmRpZGF0ZUNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGNoZWNr
cyBmb3IgYm90aCBvZiB0aG9zZSBuYXN0eSBjYXNlcyBpbiBvbmUgZ28uCi0gICAgICAgIC8vIDAg
KyAxID0gMQotICAgICAgICAvLyAtMSArIDEgPSAwCi0gICAgICAgIGlmICh2YWx1ZSArIDEgPD0g
MSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIEhhc2hNYXA8Q29kZUJs
b2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRpY19jYXN0PENvZGVC
bG9jayo+KGNhbmRpZGF0ZUNvZGVCbG9jaykpOwotICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5l
bmQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaXRlci0+c2Vjb25kID0gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKTsKLSAgICAK
LSAgICB2b2lkIHRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOwotCi1wcml2YXRlOgotICAg
IC8vIEl0IHdvdWxkIGJlIGdyZWF0IHRvIHVzZSBhbiBPd25QdHI8Q29kZUJsb2NrPiBoZXJlIGJ1
dCB0aGF0IHdvdWxkCi0gICAgLy8gYWxtb3N0IGNlcnRhaW5seSBub3Qgd29yay4KLSAgICBIYXNo
TWFwPENvZGVCbG9jayosIGJvb2w+IG1fbWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCShyZXZpc2lvbiAx
MDA1MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMsOSBAQCB2b2lkIFJlZ2lzdGVyRmlsZTo6
Z2F0aGVyQ29uc2VydmF0aXZlUm9vCiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCks
IGVuZCgpKTsKIH0KIAotdm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSmV0dGlzb25lZENvZGVCbG9j
a3MmIGpldHRpc29uZWRDb2RlQmxvY2tzKQordm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgREZHQ29k
ZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVn
aW4oKSwgZW5kKCksIGpldHRpc29uZWRDb2RlQmxvY2tzKTsKKyAgICBjb25zZXJ2YXRpdmVSb290
cy5hZGQoYmVnaW4oKSwgZW5kKCksIGRmZ0NvZGVCbG9ja3MpOwogfQogCiB2b2lkIFJlZ2lzdGVy
RmlsZTo6cmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDEwMDUyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBD
b25zZXJ2YXRpdmVSb290czsKLSAgICBjbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrczsKKyAgICBj
bGFzcyBERkdDb2RlQmxvY2tzOwogCiAgICAgY2xhc3MgUmVnaXN0ZXJGaWxlIHsKICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUmVnaXN0ZXJGaWxlKTsKQEAgLTY1LDcgKzY1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH5SZWdpc3RlckZpbGUoKTsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAg
ICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpldHRp
c29uZWRDb2RlQmxvY2tzJik7CisgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmLCBERkdDb2RlQmxvY2tzJik7CiAKICAgICAgICAgUmVnaXN0ZXIq
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0
aW9uLmJhc2UoKSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMTAwNTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIHZv
aWQgamV0dGlzb25Db2RlQmxvY2soSlNHbG9iYWxEYQogICAgIE93blB0cjxUPiBjb2RlQmxvY2tU
b0pldHRpc29uID0gY29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICBjb2RlQmxvY2sgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PFQ+KGNvZGVCbG9ja1RvSmV0dGlzb24tPnJlbGVhc2VBbHRlcm5hdGl2ZSgp
KTsKICAgICBjb2RlQmxvY2tUb0pldHRpc29uLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAg
Z2xvYmFsRGF0YS5oZWFwLmFkZEpldHRpc29uZWRDb2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2Fz
dDxDb2RlQmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFzZSgpKSk7CisgICAgZ2xvYmFs
RGF0YS5oZWFwLmpldHRpc29uREZHQ29kZUJsb2NrKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJs
b2NrPihjb2RlQmxvY2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>