<?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>112839</bug_id>
          
          <creation_ts>2013-03-20 13:43:52 -0700</creation_ts>
          <short_desc>fourthTier: DFG should be able to run on a separate thread</short_desc>
          <delta_ts>2013-05-21 12:10:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          <dependson>114707</dependson>
    
    <dependson>114708</dependson>
    
    <dependson>114762</dependson>
    
    <dependson>114906</dependson>
    
    <dependson>114909</dependson>
    
    <dependson>114987</dependson>
    
    <dependson>115083</dependson>
    
    <dependson>115297</dependson>
    
    <dependson>115299</dependson>
    
    <dependson>115300</dependson>
    
    <dependson>115301</dependson>
    
    <dependson>115445</dependson>
    
    <dependson>115582</dependson>
    
    <dependson>115594</dependson>
    
    <dependson>115598</dependson>
    
    <dependson>116060</dependson>
    
    <dependson>116126</dependson>
    
    <dependson>116350</dependson>
          <blocked>112836</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>859680</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-20 13:43:52 -0700</bug_when>
    <thetext>Because threads are awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890958</commentid>
    <comment_count>1</comment_count>
      <attachid>202219</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-18 14:48:47 -0700</bug_when>
    <thetext>Created attachment 202219
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890980</commentid>
    <comment_count>2</comment_count>
      <attachid>202222</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-18 17:30:57 -0700</bug_when>
    <thetext>Created attachment 202222
it runs things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891003</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-18 21:58:20 -0700</bug_when>
    <thetext>Wow.

Benchmark report for SunSpider on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r150349)
&quot;CoCo&quot; at /Volumes/Data/fromMiniMe/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r150349)

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                    CoCo                                       

3d-cube                         9.7970+-0.3084     ^      7.0279+-0.5858        ^ definitely 1.3940x faster
3d-morph                        9.0063+-0.2394            8.8302+-0.5370          might be 1.0199x faster
3d-raytrace                    10.8543+-0.3490     ^      8.3311+-0.1109        ^ definitely 1.3029x faster
access-binary-trees             1.9811+-0.0081     ?      2.1782+-0.5912        ? might be 1.0994x slower
access-fannkuch                 7.8915+-0.1643     ?      8.5080+-2.2365        ? might be 1.0781x slower
access-nbody                    4.7534+-0.0515     ^      3.9523+-0.0584        ^ definitely 1.2027x faster
access-nsieve                   4.9548+-0.0678     !      6.1717+-0.1144        ! definitely 1.2456x slower
bitops-3bit-bits-in-byte        1.8517+-0.0107     ^      1.7721+-0.0183        ^ definitely 1.0449x faster
bitops-bits-in-byte             6.6758+-0.0920            6.6059+-0.1225          might be 1.0106x faster
bitops-bitwise-and              2.7389+-0.0519     !      4.2159+-1.1382        ! definitely 1.5393x slower
bitops-nsieve-bits              4.7877+-0.0547     ?      7.3282+-3.2467        ? might be 1.5306x slower
controlflow-recursive           3.2102+-0.0488            3.1139+-0.1090          might be 1.0309x faster
crypto-aes                      7.8632+-0.1244     ^      5.1990+-0.0911        ^ definitely 1.5125x faster
crypto-md5                      4.4320+-0.0377     ^      3.0869+-0.0767        ^ definitely 1.4357x faster
crypto-sha1                     3.3562+-0.0248     ^      2.8028+-0.0159        ^ definitely 1.1974x faster
date-format-tofte              15.4000+-0.3783     ?     15.5954+-1.3100        ? might be 1.0127x slower
date-format-xparb               9.6366+-0.1786     ^      8.2300+-0.1334        ^ definitely 1.1709x faster
math-cordic                     4.0619+-0.0539     ^      3.9165+-0.0129        ^ definitely 1.0371x faster
math-partial-sums              12.6170+-0.1246     ^     12.1648+-0.0850        ^ definitely 1.0372x faster
math-spectral-norm              3.1937+-0.0119     ^      2.7017+-0.0070        ^ definitely 1.1821x faster
regexp-dna                     13.2100+-0.3825     ^     12.6349+-0.1839        ^ definitely 1.0455x faster
string-base64                   5.0036+-0.0991     ?      5.0320+-0.0483        ?
string-fasta                   11.1450+-0.2891     ^     10.6305+-0.1452        ^ definitely 1.0484x faster
string-tagcloud                14.3686+-0.2043           14.2502+-0.2312        
string-unpack-code             27.9101+-0.1143     ?     28.0778+-0.6290        ?
string-validate-input           7.3840+-0.2730     ^      6.5804+-0.1159        ^ definitely 1.1221x faster

&lt;arithmetic&gt; *                  8.0032+-0.0840     ^      7.6515+-0.1927        ^ definitely 1.0460x faster
&lt;geometric&gt;                     6.4521+-0.0570     ^      6.0837+-0.1248        ^ definitely 1.0605x faster
&lt;harmonic&gt;                      5.2095+-0.0315     ^      4.8993+-0.1004        ^ definitely 1.0633x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891004</commentid>
    <comment_count>4</comment_count>
      <attachid>202227</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-18 22:33:28 -0700</bug_when>
    <thetext>Created attachment 202227
it&apos;s a speed-up, for the most part

Still have some slow-downs to investigate.  But it&apos;s starting to really work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891005</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-18 23:06:35 -0700</bug_when>
    <thetext>Current results.  Notice that some benchmarks, like navier-stokes, exhibit ridiculous slow-down.  This is almost certainly a bug.


Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r150349)
&quot;CoCo&quot; at /Volumes/Data/fromMiniMe/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r150349)

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                    CoCo                                       
SunSpider:
   3d-cube                                         9.7786+-0.2486     ^      6.7297+-0.0589        ^ definitely 1.4531x faster
   3d-morph                                        8.8167+-0.0967     ?      8.9819+-0.5222        ? might be 1.0187x slower
   3d-raytrace                                    10.8967+-0.3513     ^      8.2750+-0.1397        ^ definitely 1.3168x faster
   access-binary-trees                             1.9855+-0.0096     ^      1.8045+-0.0477        ^ definitely 1.1003x faster
   access-fannkuch                                 7.8129+-0.1508     ?      9.3907+-2.8883        ? might be 1.2020x slower
   access-nbody                                    4.7573+-0.0358            4.4756+-1.1266          might be 1.0630x faster
   access-nsieve                                   4.9352+-0.0712     !      6.1566+-0.1039        ! definitely 1.2475x slower
   bitops-3bit-bits-in-byte                        1.8525+-0.0102     ?      1.9083+-0.2077        ? might be 1.0301x slower
   bitops-bits-in-byte                             6.6271+-0.0720     ?      6.7302+-0.1056        ? might be 1.0156x slower
   bitops-bitwise-and                              2.7114+-0.0832     !      3.9366+-1.1098        ! definitely 1.4519x slower
   bitops-nsieve-bits                              4.7344+-0.0604     ?      5.9164+-2.4752        ? might be 1.2497x slower
   controlflow-recursive                           3.1815+-0.0339            3.1131+-0.1030          might be 1.0220x faster
   crypto-aes                                      7.9432+-0.1245     ^      5.1281+-0.0759        ^ definitely 1.5490x faster
   crypto-md5                                      4.4196+-0.0349     ^      3.0194+-0.0297        ^ definitely 1.4637x faster
   crypto-sha1                                     3.3745+-0.0404     ^      2.7956+-0.0178        ^ definitely 1.2071x faster
   date-format-tofte                              15.3180+-0.2270           15.0403+-0.2231          might be 1.0185x faster
   date-format-xparb                               9.5845+-0.1476     ^      8.0790+-0.1620        ^ definitely 1.1863x faster
   math-cordic                                     4.0867+-0.0078     ?      4.3198+-0.9029        ? might be 1.0570x slower
   math-partial-sums                              12.4959+-0.0957     ^     12.1021+-0.0746        ^ definitely 1.0325x faster
   math-spectral-norm                              3.1934+-0.0110     ^      2.7070+-0.0119        ^ definitely 1.1797x faster
   regexp-dna                                     12.7434+-0.2371           12.6044+-0.2043          might be 1.0110x faster
   string-base64                                   5.0709+-0.0966     ?      5.1673+-0.2849        ? might be 1.0190x slower
   string-fasta                                   10.8532+-0.1253           10.6744+-0.1372          might be 1.0168x faster
   string-tagcloud                                14.5169+-0.2767           14.2301+-0.1903          might be 1.0202x faster
   string-unpack-code                             28.0144+-0.1109           27.6866+-0.5252          might be 1.0118x faster
   string-validate-input                           7.1890+-0.1689     ^      6.6443+-0.1905        ^ definitely 1.0820x faster

   &lt;arithmetic&gt; *                                  7.9574+-0.0694     ^      7.6007+-0.1121        ^ definitely 1.0469x faster
   &lt;geometric&gt;                                     6.4203+-0.0483     ^      6.0430+-0.0871        ^ definitely 1.0624x faster
   &lt;harmonic&gt;                                      5.1931+-0.0283     ^      4.8566+-0.0738        ^ definitely 1.0693x faster

                                                     TipOfTree                    CoCo                                       
V8Spider:
   crypto                                        247.3585+-0.4020     ^    242.7377+-0.5920        ^ definitely 1.0190x faster
   deltablue                                     126.7658+-0.1396     ^    106.2332+-7.5506        ^ definitely 1.1933x faster
   earley-boyer                                   83.7641+-0.4134     ^     74.7976+-5.4524        ^ definitely 1.1199x faster
   raytrace                                       62.7493+-0.2024     ^     37.6050+-0.1536        ^ definitely 1.6686x faster
   regexp                                        102.2530+-0.1857     ^    100.3067+-0.4839        ^ definitely 1.0194x faster
   richards                                      118.3580+-0.2858     ^    113.2298+-1.0252        ^ definitely 1.0453x faster
   splay                                          48.7244+-0.3366     ^     47.4327+-0.4667        ^ definitely 1.0272x faster

   &lt;arithmetic&gt;                                  112.8533+-0.1439     ^    103.1918+-1.7441        ^ definitely 1.0936x faster
   &lt;geometric&gt; *                                  99.5922+-0.1724     ^     87.3317+-1.5862        ^ definitely 1.1404x faster
   &lt;harmonic&gt;                                     89.1031+-0.2119     ^     74.8030+-1.1203        ^ definitely 1.1912x faster

                                                     TipOfTree                    CoCo                                       
Octane and V8v7:
   encrypt                                        1.49987+-0.00933          1.49929+-0.00906       
   decrypt                                       28.16765+-0.06705         28.15719+-0.04085       
   deltablue                             x2       0.56801+-0.00090    !     0.57283+-0.00201       ! definitely 1.0085x slower
   earley                                         0.88494+-0.00446          0.88448+-0.00576       
   boyer                                         12.78958+-0.09568         12.77414+-0.04585       
   raytrace                              x2       4.46236+-0.04225    ?     4.54341+-0.05089       ? might be 1.0182x slower
   regexp                                x2      32.43851+-0.17818         32.35575+-0.08666       
   richards                              x2       0.30187+-0.00008    !     0.31085+-0.00573       ! definitely 1.0297x slower
   splay                                 x2       0.62218+-0.01490    ?     0.65646+-0.04560       ? might be 1.0551x slower
   navier-stokes                         x2      10.79146+-0.01235    !    23.36345+-8.28389       ! definitely 2.1650x slower
   closure                                        0.31881+-0.03402          0.31669+-0.03423       
   jquery                                         4.47099+-0.54795    ?     4.51045+-0.55188       ?
   gbemu                                 x2     263.87720+-10.81013       258.18663+-11.14612        might be 1.0220x faster
   box2d                                 x2      33.77843+-0.13454    ?    33.86534+-0.28680       ?

V8v7:
   &lt;arithmetic&gt;                                   8.85693+-0.02612    !    10.43254+-1.03001       ! definitely 1.1779x slower
   &lt;geometric&gt; *                                  2.78715+-0.01020    !     3.05287+-0.15261       ! definitely 1.0953x slower
   &lt;harmonic&gt;                                     1.00189+-0.00451    !     1.03018+-0.01599       ! definitely 1.0282x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  33.71872+-1.00995    ?    34.35690+-1.24531       ? might be 1.0189x slower
   &lt;geometric&gt; *                                  4.88991+-0.07278    !     5.21323+-0.20748       ! definitely 1.0661x slower
   &lt;harmonic&gt;                                     1.13031+-0.02225    ?     1.15546+-0.03132       ? might be 1.0222x slower

                                                     TipOfTree                    CoCo                                       
Kraken:
   ai-astar                                       493.841+-0.650      ?     496.357+-4.487         ?
   audio-beat-detection                          1204.313+-3.631      !    1224.124+-10.203        ! definitely 1.0164x slower
   audio-dft                                      310.932+-0.909            309.026+-1.527         
   audio-fft                                     1144.335+-7.195           1131.977+-6.795           might be 1.0109x faster
   audio-oscillator                               233.131+-1.077            232.778+-1.102         
   imaging-darkroom                               292.055+-0.850            291.050+-0.829         
   imaging-desaturate                             853.947+-3.313            852.413+-3.945         
   imaging-gaussian-blur                          406.844+-5.471            403.461+-0.323         
   json-parse-financial                            82.815+-1.210             81.831+-0.319           might be 1.0120x faster
   json-stringify-tinderbox                        99.140+-0.318      !     100.808+-0.249         ! definitely 1.0168x slower
   stanford-crypto-aes                            183.598+-0.868            183.096+-1.188         
   stanford-crypto-ccm                            215.641+-1.535            190.852+-24.833          might be 1.1299x faster
   stanford-crypto-pbkdf2                         270.211+-0.635            269.042+-2.759         
   stanford-crypto-sha256-iterative               116.998+-0.515      ^     115.881+-0.389         ^ definitely 1.0096x faster

   &lt;arithmetic&gt; *                                 421.986+-0.899            420.192+-1.980           might be 1.0043x faster
   &lt;geometric&gt;                                    301.550+-0.579            297.993+-3.142           might be 1.0119x faster
   &lt;harmonic&gt;                                     222.969+-0.643            219.542+-3.109           might be 1.0156x faster

                                                     TipOfTree                    CoCo                                       
JSRegress:
   adapt-to-double-divide                         22.4739+-0.0930     ?     31.6828+-10.5863       ? might be 1.4098x slower
   aliased-arguments-getbyval                      0.9335+-0.0125     ^      0.8175+-0.0079        ^ definitely 1.1419x faster
   allocate-big-object                             2.5427+-0.0354     ?      2.6232+-0.2472        ? might be 1.0317x slower
   arity-mismatch-inlining                         0.7796+-0.0117     ?      1.0926+-0.3755        ? might be 1.4015x slower
   array-access-polymorphic-structure              7.0968+-0.0844     ^      6.8144+-0.0696        ^ definitely 1.0414x faster
   array-with-double-add                           5.8303+-0.0842            5.7995+-0.0644        
   array-with-double-increment                     4.1078+-0.0123     ?      4.1340+-0.0686        ?
   array-with-double-mul-add                       7.0954+-0.0899     ?     15.1081+-11.8846       ? might be 2.1293x slower
   array-with-double-sum                           7.8917+-0.1094     ?     15.5021+-8.7747        ? might be 1.9644x slower
   array-with-int32-add-sub                       10.4537+-0.1057     ?     10.5442+-0.1097        ?
   array-with-int32-or-double-sum                  7.9409+-0.0891     ?     10.4671+-5.4904        ? might be 1.3181x slower
   big-int-mul                                     4.9434+-0.0658     ?      5.6440+-1.2370        ? might be 1.1417x slower
   boolean-test                                    4.4148+-0.0760            4.3702+-0.0616          might be 1.0102x faster
   cast-int-to-double                             13.9257+-0.1357     ?     14.8823+-2.1077        ? might be 1.0687x slower
   cell-argument                                  14.4188+-0.1139     ?     17.8431+-3.9468        ? might be 1.2375x slower
   cfg-simplify                                    3.9719+-0.0662     ?      3.9803+-0.0439        ?
   cmpeq-obj-to-obj-other                         12.2042+-0.4054     ?     13.1207+-2.1311        ? might be 1.0751x slower
   constant-test                                   8.3285+-0.1645     ?     11.8873+-7.3971        ? might be 1.4273x slower
   direct-arguments-getbyval                       0.8539+-0.0080     ^      0.7389+-0.0307        ^ definitely 1.1557x faster
   double-pollution-getbyval                      10.7442+-0.1385     ?     14.5226+-4.6349        ? might be 1.3517x slower
   double-pollution-putbyoffset                    5.1270+-0.0994     ?      5.5488+-1.1070        ? might be 1.0823x slower
   empty-string-plus-int                          10.9205+-0.1937           10.8740+-0.1591        
   external-arguments-getbyval                     2.2125+-0.0260     ^      1.8978+-0.0153        ^ definitely 1.1658x faster
   external-arguments-putbyval                     3.3016+-0.0091            3.2219+-0.1288          might be 1.0247x faster
   Float32Array-matrix-mult                       14.2612+-0.0958     ^     13.7907+-0.1085        ^ definitely 1.0341x faster
   fold-double-to-int                             21.9474+-0.1485     ?     23.3149+-2.9695        ? might be 1.0623x slower
   function-dot-apply                              3.2041+-0.0132     ?      3.4739+-0.5573        ? might be 1.0842x slower
   function-test                                   4.9854+-0.0949     ?      5.6177+-1.4156        ? might be 1.1268x slower
   get-by-id-chain-from-try-block                  6.7581+-0.1894     ?      6.8534+-0.1469        ? might be 1.0141x slower
   HashMap-put-get-iterate-keys                   96.1959+-1.2993     ^     93.8202+-0.9095        ^ definitely 1.0253x faster
   HashMap-put-get-iterate                        99.3947+-1.0722     ^     97.4217+-0.6628        ^ definitely 1.0203x faster
   HashMap-string-put-get-iterate                 75.1716+-0.3378     ^     71.5885+-0.7680        ^ definitely 1.0501x faster
   indexed-properties-in-objects                   4.5383+-0.0646     ?      4.7673+-0.3401        ? might be 1.0505x slower
   inline-arguments-access                         1.2664+-0.0086     ?      1.9950+-0.8140        ? might be 1.5753x slower
   inline-arguments-local-escape                  23.1776+-0.1920           22.9687+-0.1958        
   inline-get-scoped-var                           6.5421+-0.1403     ?      9.4513+-4.0656        ? might be 1.4447x slower
   inlined-put-by-id-transition                   16.7348+-0.3361           16.3492+-0.5430          might be 1.0236x faster
   int-or-other-abs-then-get-by-val                8.7916+-0.0755     ?      9.6336+-1.9292        ? might be 1.0958x slower
   int-or-other-abs-zero-then-get-by-val          37.3649+-0.2140     ?     38.8876+-2.7263        ? might be 1.0408x slower
   int-or-other-add-then-get-by-val               10.2339+-0.0866     !     15.3102+-4.7637        ! definitely 1.4960x slower
   int-or-other-add                               10.4608+-0.0814     !     17.8036+-4.0116        ! definitely 1.7019x slower
   int-or-other-div-then-get-by-val                7.8719+-0.0881            7.8416+-0.0912        
   int-or-other-max-then-get-by-val                9.9540+-0.2137     ?     11.8540+-2.9076        ? might be 1.1909x slower
   int-or-other-min-then-get-by-val                8.0446+-0.0652     ?      8.9856+-1.3212        ? might be 1.1170x slower
   int-or-other-mod-then-get-by-val                8.0506+-0.1008            7.9150+-0.1011          might be 1.0171x faster
   int-or-other-mul-then-get-by-val                7.1369+-0.0927     ?      7.8557+-1.6019        ? might be 1.1007x slower
   int-or-other-neg-then-get-by-val                8.1312+-0.1002     !     10.1972+-1.6909        ! definitely 1.2541x slower
   int-or-other-neg-zero-then-get-by-val          36.5502+-0.2997           36.3447+-0.1276        
   int-or-other-sub-then-get-by-val               10.2345+-0.1038     ?     11.5472+-2.9679        ? might be 1.1283x slower
   int-or-other-sub                                8.2688+-0.0986     ?     11.0039+-3.2494        ? might be 1.3308x slower
   int-overflow-local                             12.8705+-0.0951     ?     13.7738+-2.2198        ? might be 1.0702x slower
   Int16Array-bubble-sort                         49.4250+-0.1755     ?     52.1285+-4.3410        ? might be 1.0547x slower
   Int16Array-load-int-mul                         1.8956+-0.0095     ?      2.6325+-1.5924        ? might be 1.3888x slower
   Int8Array-load                                  4.8114+-0.0689     ?      5.1702+-0.5741        ? might be 1.0746x slower
   integer-divide                                 15.1066+-0.1226     ?     17.8787+-6.1291        ? might be 1.1835x slower
   integer-modulo                                  2.1554+-0.0116     ^      2.0299+-0.0368        ^ definitely 1.0618x faster
   make-indexed-storage                            3.9397+-0.0472            3.8425+-0.2482          might be 1.0253x faster
   method-on-number                               25.9195+-0.5861           25.4819+-0.3081          might be 1.0172x faster
   nested-function-parsing-random                379.4199+-13.0925    ?    381.5733+-13.0563       ?
   nested-function-parsing                        47.9182+-1.0874           47.4300+-1.0438          might be 1.0103x faster
   new-array-buffer-dead                           3.6458+-0.0122     ?      6.2953+-5.8220        ? might be 1.7267x slower
   new-array-buffer-push                          10.4308+-0.2114           10.1843+-0.1701          might be 1.0242x faster
   new-array-dead                                 28.2093+-0.0816     !     42.3392+-9.3632        ! definitely 1.5009x slower
   new-array-push                                  6.9565+-0.1293            6.9478+-0.3606        
   number-test                                     4.3422+-0.0524            4.2916+-0.0562          might be 1.0118x faster
   object-closure-call                             8.4023+-0.1510     !     11.8350+-1.7579        ! definitely 1.4085x slower
   object-test                                     4.9035+-0.0348     ?      5.4789+-1.3989        ? might be 1.1173x slower
   poly-stricteq                                 984.3646+-13.4675    ?   1028.7016+-49.3085       ? might be 1.0450x slower
   polymorphic-structure                          20.0156+-0.1019     !     58.9155+-14.8085       ! definitely 2.9435x slower
   polyvariant-monomorphic-get-by-id              12.5454+-0.1149     ?     15.0380+-5.4914        ? might be 1.1987x slower
   rare-osr-exit-on-local                         20.6400+-0.1368     !     26.4702+-3.7327        ! definitely 1.2825x slower
   register-pressure-from-osr                     31.5666+-0.1310     ?     34.1304+-5.3456        ? might be 1.0812x slower
   simple-activation-demo                         34.3976+-0.1046     ?     61.1678+-58.8882       ? might be 1.7783x slower
   slow-array-profile-convergence                  4.4311+-0.0428     ^      4.1532+-0.1402        ^ definitely 1.0669x faster
   slow-convergence                                3.8460+-0.0511     ^      3.4631+-0.0825        ^ definitely 1.1105x faster
   sparse-conditional                              1.3262+-0.0136     ?      1.4397+-0.3124        ? might be 1.0856x slower
   splice-to-remove                               50.3002+-0.1648     ^     49.2651+-0.1984        ^ definitely 1.0210x faster
   string-concat-object                            2.7010+-0.0456            2.6934+-0.0286        
   string-concat-pair-object                       2.6667+-0.0202            2.6593+-0.0438        
   string-concat-pair-simple                      17.0172+-0.2936     ?     18.2761+-1.7396        ? might be 1.0740x slower
   string-concat-simple                           16.8689+-0.2328     ?     17.5145+-1.2728        ? might be 1.0383x slower
   string-cons-repeat                             10.0805+-0.0302     ?     12.7000+-2.9505        ? might be 1.2599x slower
   string-cons-tower                              10.9122+-0.0330           10.8540+-0.0572        
   string-equality                               106.5795+-0.1729     ^    104.4463+-0.1456        ^ definitely 1.0204x faster
   string-hash                                     2.6712+-0.0127     ^      2.5469+-0.0123        ^ definitely 1.0488x faster
   string-repeat-arith                            45.3087+-0.6742     ^     44.2748+-0.1749        ^ definitely 1.0234x faster
   string-sub                                     88.7269+-1.3198           87.4230+-1.7861          might be 1.0149x faster
   string-test                                     4.3118+-0.0364     ?      4.8124+-1.2970        ? might be 1.1161x slower
   structure-hoist-over-transitions                3.2898+-0.0278     ?      3.3188+-0.1845        ?
   tear-off-arguments-simple                       1.8101+-0.0077     ?      1.9340+-0.2435        ? might be 1.0684x slower
   tear-off-arguments                              3.3889+-0.0155            3.2447+-0.1354          might be 1.0444x faster
   temporal-structure                             20.7727+-0.0501     !     49.8408+-19.4181       ! definitely 2.3993x slower
   to-int32-boolean                               30.5883+-0.1113     ?     30.6623+-0.1350        ?
   undefined-test                                  4.5833+-0.0375            4.5686+-0.0860        

   &lt;arithmetic&gt;                                   30.4665+-0.2127     !     33.0164+-1.0522        ! definitely 1.0837x slower
   &lt;geometric&gt; *                                   9.6806+-0.0289     !     10.4774+-0.1859        ! definitely 1.0823x slower
   &lt;harmonic&gt;                                      5.2218+-0.0194     ?      5.3190+-0.0787        ? might be 1.0186x slower

                                                     TipOfTree                    CoCo                                       
All benchmarks:
   &lt;arithmetic&gt;                                   64.4805+-0.2557     ?     65.4113+-0.7401        ? might be 1.0144x slower
   &lt;geometric&gt;                                    12.2789+-0.0595     !     12.7496+-0.1594        ! definitely 1.0383x slower
   &lt;harmonic&gt;                                      3.8243+-0.0368     ?      3.8577+-0.0445        ? might be 1.0087x slower

                                                     TipOfTree                    CoCo                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                                27.5350+-0.1518           27.3131+-0.2670          might be 1.0081x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891049</commentid>
    <comment_count>6</comment_count>
      <attachid>202238</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-19 12:04:44 -0700</bug_when>
    <thetext>Created attachment 202238
fixed more buggies

Still investigating things, but we&apos;re now up to 8% SunSpider speed-up.


Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r150349)
&quot;CoCo&quot; at /Volumes/Data/fromMiniMe/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r150349)

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                    CoCo                                       
SunSpider:
   3d-cube                                         9.5285+-0.1540     ^      6.6626+-0.1032        ^ definitely 1.4301x faster
   3d-morph                                        8.8888+-0.1291     ^      8.5282+-0.1103        ^ definitely 1.0423x faster
   3d-raytrace                                    10.5736+-0.1471     ^      8.3586+-0.1267        ^ definitely 1.2650x faster
   access-binary-trees                             1.9797+-0.0078     ^      1.8267+-0.0135        ^ definitely 1.0838x faster
   access-fannkuch                                 7.8151+-0.1464     ^      7.4967+-0.0599        ^ definitely 1.0425x faster
   access-nbody                                    4.7413+-0.0605     ^      3.9856+-0.0109        ^ definitely 1.1896x faster
   access-nsieve                                   4.9422+-0.0293     ^      4.8525+-0.0294        ^ definitely 1.0185x faster
   bitops-3bit-bits-in-byte                        1.8526+-0.0120     ^      1.7759+-0.0164        ^ definitely 1.0432x faster
   bitops-bits-in-byte                             6.6707+-0.1072     ?      6.6850+-0.1330        ?
   bitops-bitwise-and                              2.7080+-0.0744     ?      2.7749+-0.0337        ? might be 1.0247x slower
   bitops-nsieve-bits                              4.7892+-0.0502     ^      4.4798+-0.0357        ^ definitely 1.0691x faster
   controlflow-recursive                           3.1806+-0.0350     ^      3.0745+-0.0192        ^ definitely 1.0345x faster
   crypto-aes                                      7.8931+-0.1327     ^      5.1704+-0.0682        ^ definitely 1.5266x faster
   crypto-md5                                      4.4070+-0.0595     ^      3.0655+-0.0275        ^ definitely 1.4376x faster
   crypto-sha1                                     3.3563+-0.0149     ^      2.8171+-0.0185        ^ definitely 1.1914x faster
   date-format-tofte                              15.2275+-0.1845           14.9006+-0.1817          might be 1.0219x faster
   date-format-xparb                               9.7970+-0.2375     ^      8.3792+-0.1627        ^ definitely 1.1692x faster
   math-cordic                                     4.0941+-0.0115     ^      3.9618+-0.0486        ^ definitely 1.0334x faster
   math-partial-sums                              12.5590+-0.1206     ^     12.2155+-0.1270        ^ definitely 1.0281x faster
   math-spectral-norm                              3.1948+-0.0121     ^      2.7176+-0.0178        ^ definitely 1.1756x faster
   regexp-dna                                     12.7943+-0.2196           12.6545+-0.1833          might be 1.0110x faster
   string-base64                                   5.0671+-0.0789            5.0279+-0.0450        
   string-fasta                                   10.8400+-0.1384           10.7529+-0.1644        
   string-tagcloud                                14.4488+-0.1885           14.1776+-0.2011          might be 1.0191x faster
   string-unpack-code                             28.0919+-0.1948     ^     27.5249+-0.1342        ^ definitely 1.0206x faster
   string-validate-input                           7.1768+-0.1531     ^      6.4514+-0.1304        ^ definitely 1.1124x faster

   &lt;arithmetic&gt; *                                  7.9468+-0.0666     ^      7.3199+-0.0543        ^ definitely 1.0856x faster
   &lt;geometric&gt;                                     6.4135+-0.0449     ^      5.8037+-0.0351        ^ definitely 1.1051x faster
   &lt;harmonic&gt;                                      5.1892+-0.0250     ^      4.6901+-0.0211        ^ definitely 1.1064x faster

                                                     TipOfTree                    CoCo                                       
V8Spider:
   crypto                                        247.7954+-0.5886     ^    243.3546+-0.8866        ^ definitely 1.0182x faster
   deltablue                                     126.7398+-0.0859     ^    102.6285+-1.0971        ^ definitely 1.2349x faster
   earley-boyer                                   83.8980+-0.3234     ^     69.5889+-0.2082        ^ definitely 1.2056x faster
   raytrace                                       62.7492+-0.2910     ^     38.0090+-0.1596        ^ definitely 1.6509x faster
   regexp                                        102.9754+-0.9878     ^     99.7671+-0.1285        ^ definitely 1.0322x faster
   richards                                      118.3877+-0.2179     ^    112.6261+-0.8601        ^ definitely 1.0512x faster
   splay                                          48.7556+-0.1596     ^     47.0282+-0.3036        ^ definitely 1.0367x faster

   &lt;arithmetic&gt;                                  113.0430+-0.2012     ^    101.8575+-0.2796        ^ definitely 1.1098x faster
   &lt;geometric&gt; *                                  99.7493+-0.1809     ^     86.0376+-0.2319        ^ definitely 1.1594x faster
   &lt;harmonic&gt;                                     89.2255+-0.1756     ^     73.9141+-0.1959        ^ definitely 1.2072x faster

                                                     TipOfTree                    CoCo                                       
Octane and V8v7:
   encrypt                                        1.49364+-0.00896    ?     1.49674+-0.00804       ?
   decrypt                                       28.19836+-0.04289         28.16538+-0.05527       
   deltablue                             x2       0.56748+-0.00049    !     0.57325+-0.00166       ! definitely 1.0102x slower
   earley                                         0.88295+-0.00333          0.87931+-0.00275       
   boyer                                         12.74352+-0.01894    !    12.81610+-0.04487       ! definitely 1.0057x slower
   raytrace                              x2       4.43320+-0.02796    !     4.51827+-0.03663       ! definitely 1.0192x slower
   regexp                                x2      32.55321+-0.15627         32.54845+-0.17454       
   richards                              x2       0.30373+-0.00066    !     0.31527+-0.00570       ! definitely 1.0380x slower
   splay                                 x2       0.61463+-0.00495    ?     0.64555+-0.02756       ? might be 1.0503x slower
   navier-stokes                         x2      10.78794+-0.01333         10.77550+-0.00845       
   closure                                        0.31921+-0.03402          0.31802+-0.03442       
   jquery                                         4.48681+-0.54602    ?     4.49695+-0.54853       ?
   gbemu                                 x2     262.74903+-10.90715       258.06415+-12.03657        might be 1.0182x faster
   box2d                                 x2      33.82863+-0.11753         33.76532+-0.21236       

V8v7:
   &lt;arithmetic&gt;                                   8.86493+-0.02362    ?     8.88188+-0.02486       ? might be 1.0019x slower
   &lt;geometric&gt; *                                  2.78219+-0.00647    !     2.82190+-0.01711       ! definitely 1.0143x slower
   &lt;harmonic&gt;                                     1.00140+-0.00210    !     1.02883+-0.01185       ! definitely 1.0274x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  33.62728+-1.01897         33.20837+-1.12328         might be 1.0126x faster
   &lt;geometric&gt; *                                  4.88340+-0.07030    ?     4.92456+-0.07864       ? might be 1.0084x slower
   &lt;harmonic&gt;                                     1.13010+-0.02092    ?     1.15460+-0.02540       ? might be 1.0217x slower

                                                     TipOfTree                    CoCo                                       
Kraken:
   ai-astar                                       494.364+-0.295      ^     491.928+-0.577         ^ definitely 1.0050x faster
   audio-beat-detection                          1210.120+-7.781      ?    1225.708+-18.890        ? might be 1.0129x slower
   audio-dft                                      310.353+-0.997      ^     308.155+-0.674         ^ definitely 1.0071x faster
   audio-fft                                     1132.330+-5.151      ?    1230.324+-98.202        ? might be 1.0865x slower
   audio-oscillator                               233.828+-1.205            232.605+-0.973         
   imaging-darkroom                               291.906+-0.870            291.580+-0.877         
   imaging-desaturate                             853.856+-3.697            852.350+-3.563         
   imaging-gaussian-blur                          403.180+-0.329      ?     403.314+-0.203         ?
   json-parse-financial                            81.987+-0.429             81.485+-0.206         
   json-stringify-tinderbox                        99.899+-0.374             99.860+-0.293         
   stanford-crypto-aes                            185.453+-1.308            184.623+-0.956         
   stanford-crypto-ccm                            213.829+-1.239      ?     215.180+-2.589         ?
   stanford-crypto-pbkdf2                         270.560+-0.884      !     272.451+-0.965         ! definitely 1.0070x slower
   stanford-crypto-sha256-iterative               116.885+-0.365      ^     115.510+-0.158         ^ definitely 1.0119x faster

   &lt;arithmetic&gt; *                                 421.325+-1.027      ?     428.934+-7.186         ? might be 1.0181x slower
   &lt;geometric&gt;                                    301.263+-0.526      ?     302.555+-1.703         ? might be 1.0043x slower
   &lt;harmonic&gt;                                     222.795+-0.509            222.298+-0.468           might be 1.0022x faster

                                                     TipOfTree                    CoCo                                       
JSRegress:
   adapt-to-double-divide                         22.4466+-0.0983     ?     22.5301+-0.1122        ?
   aliased-arguments-getbyval                      0.9305+-0.0109     ^      0.8241+-0.0078        ^ definitely 1.1291x faster
   allocate-big-object                             2.6085+-0.0957     ^      2.4611+-0.0276        ^ definitely 1.0599x faster
   arity-mismatch-inlining                         0.7793+-0.0115     ?      0.7802+-0.0195        ?
   array-access-polymorphic-structure              7.0565+-0.1269     ^      6.8076+-0.0788        ^ definitely 1.0366x faster
   array-with-double-add                           5.8062+-0.0914     ?      5.8666+-0.0731        ? might be 1.0104x slower
   array-with-double-increment                     4.1395+-0.0935            4.1098+-0.0347        
   array-with-double-mul-add                       7.0991+-0.1008            7.0900+-0.0834        
   array-with-double-sum                           7.8402+-0.1096     ?      7.9001+-0.0895        ?
   array-with-int32-add-sub                       10.3817+-0.0805     ?     10.4571+-0.0570        ?
   array-with-int32-or-double-sum                  7.9751+-0.0966            7.9568+-0.0838        
   big-int-mul                                     4.9398+-0.0774     ^      4.7980+-0.0588        ^ definitely 1.0295x faster
   boolean-test                                    4.4610+-0.0665            4.3665+-0.0777          might be 1.0216x faster
   cast-int-to-double                             13.8484+-0.1551     ?     13.8849+-0.1852        ?
   cell-argument                                  14.4327+-0.1460           14.4141+-0.0964        
   cfg-simplify                                    3.9975+-0.0456            3.9727+-0.0631        
   cmpeq-obj-to-obj-other                         12.1682+-0.2698           12.1626+-0.3441        
   constant-test                                   8.4068+-0.1362     ?      8.5511+-0.0826        ? might be 1.0172x slower
   direct-arguments-getbyval                       0.8562+-0.0086     ^      0.7316+-0.0112        ^ definitely 1.1703x faster
   double-pollution-getbyval                      10.7168+-0.1099     ?     10.9031+-0.1260        ? might be 1.0174x slower
   double-pollution-putbyoffset                    5.0900+-0.1512            4.9592+-0.0735          might be 1.0264x faster
   empty-string-plus-int                          10.9669+-0.2028           10.8820+-0.1666        
   external-arguments-getbyval                     2.2131+-0.0352     ^      1.9324+-0.0121        ^ definitely 1.1453x faster
   external-arguments-putbyval                     3.2895+-0.0200     ^      3.1656+-0.0221        ^ definitely 1.0391x faster
   Float32Array-matrix-mult                       14.2250+-0.0722     ^     13.5711+-0.1048        ^ definitely 1.0482x faster
   fold-double-to-int                             21.9252+-0.3220     ?     22.0347+-0.1511        ?
   function-dot-apply                              3.2002+-0.0133     ^      3.1235+-0.0254        ^ definitely 1.0245x faster
   function-test                                   4.9808+-0.0608     ?      5.0180+-0.0878        ?
   get-by-id-chain-from-try-block                  6.7345+-0.1870            6.7021+-0.1603        
   HashMap-put-get-iterate-keys                   96.9098+-1.6110     ^     92.4773+-0.8929        ^ definitely 1.0479x faster
   HashMap-put-get-iterate                       100.5368+-0.5532     ^     95.4911+-0.9847        ^ definitely 1.0528x faster
   HashMap-string-put-get-iterate                 75.2821+-0.5074     ^     72.5220+-0.7001        ^ definitely 1.0381x faster
   indexed-properties-in-objects                   4.5818+-0.0126     ^      4.4151+-0.0072        ^ definitely 1.0378x faster
   inline-arguments-access                         1.2674+-0.0093     !      1.2855+-0.0085        ! definitely 1.0143x slower
   inline-arguments-local-escape                  23.2293+-0.1921           23.1472+-0.2079        
   inline-get-scoped-var                           6.5505+-0.0923     ?      6.6310+-0.0851        ? might be 1.0123x slower
   inlined-put-by-id-transition                   16.8299+-0.2828     ^     16.1305+-0.2523        ^ definitely 1.0434x faster
   int-or-other-abs-then-get-by-val                8.8349+-0.0854            8.8140+-0.0954        
   int-or-other-abs-zero-then-get-by-val          37.2495+-0.1369     ^     36.9133+-0.1011        ^ definitely 1.0091x faster
   int-or-other-add-then-get-by-val               10.2423+-0.1246           10.2387+-0.1324        
   int-or-other-add                               10.5475+-0.1212     ?     10.6019+-0.0853        ?
   int-or-other-div-then-get-by-val                7.8563+-0.0869            7.7964+-0.0981        
   int-or-other-max-then-get-by-val               10.0489+-0.1153     ?     10.0814+-0.1695        ?
   int-or-other-min-then-get-by-val                8.2059+-0.1147     ^      8.0141+-0.0687        ^ definitely 1.0239x faster
   int-or-other-mod-then-get-by-val                8.0701+-0.0709            7.9355+-0.0870          might be 1.0170x faster
   int-or-other-mul-then-get-by-val                7.2558+-0.0939     ^      7.0464+-0.0838        ^ definitely 1.0297x faster
   int-or-other-neg-then-get-by-val                8.1465+-0.1022            8.0454+-0.0954          might be 1.0126x faster
   int-or-other-neg-zero-then-get-by-val          36.8138+-0.3771           36.4259+-0.2154          might be 1.0106x faster
   int-or-other-sub-then-get-by-val               10.3160+-0.1392           10.2053+-0.0971          might be 1.0108x faster
   int-or-other-sub                                8.2569+-0.0999            8.2380+-0.0979        
   int-overflow-local                             12.8636+-0.1229           12.7774+-0.1217        
   Int16Array-bubble-sort                         49.3466+-0.1220           49.1553+-0.1455        
   Int16Array-load-int-mul                         1.8942+-0.0112     !      1.9136+-0.0067        ! definitely 1.0102x slower
   Int8Array-load                                  4.8423+-0.0599            4.7814+-0.0618          might be 1.0127x faster
   integer-divide                                 15.1039+-0.1330     ?     15.2086+-0.1146        ?
   integer-modulo                                  2.1546+-0.0110     ^      2.0247+-0.0153        ^ definitely 1.0641x faster
   make-indexed-storage                            3.9221+-0.0345     ^      3.5742+-0.0347        ^ definitely 1.0973x faster
   method-on-number                               25.3716+-0.4273           25.3462+-0.4099        
   nested-function-parsing-random                379.8008+-12.9035    ?    379.9561+-13.0431       ?
   nested-function-parsing                        47.9680+-1.0905           47.5330+-1.0243        
   new-array-buffer-dead                           3.6434+-0.0123     ?      3.6564+-0.0304        ?
   new-array-buffer-push                          10.4945+-0.2015           10.2637+-0.1779          might be 1.0225x faster
   new-array-dead                                 28.2327+-0.1104     ?     28.3446+-0.0945        ?
   new-array-push                                  6.9503+-0.1022            6.8054+-0.0983          might be 1.0213x faster
   number-test                                     4.3402+-0.0535            4.2790+-0.0582          might be 1.0143x faster
   object-closure-call                             8.4685+-0.0987     !     10.5277+-1.9032        ! definitely 1.2432x slower
   object-test                                     4.9035+-0.0603            4.8286+-0.0750          might be 1.0155x faster
   poly-stricteq                                 980.3060+-7.8710     !   1029.5500+-41.2130       ! definitely 1.0502x slower
   polymorphic-structure                          20.0159+-0.1304     !     20.8507+-0.0808        ! definitely 1.0417x slower
   polyvariant-monomorphic-get-by-id              12.5403+-0.0946           12.4817+-0.0682        
   rare-osr-exit-on-local                         20.4776+-0.0831     ?     20.5206+-0.0833        ?
   register-pressure-from-osr                     31.4887+-0.1135           31.2958+-0.1150        
   simple-activation-demo                         34.5363+-0.2762           34.2328+-0.0794        
   slow-array-profile-convergence                  4.4793+-0.0917     ^      4.0832+-0.0466        ^ definitely 1.0970x faster
   slow-convergence                                3.8507+-0.0066     ^      3.4197+-0.0096        ^ definitely 1.1261x faster
   sparse-conditional                              1.3163+-0.0188     ?      1.3168+-0.0166        ?
   splice-to-remove                               50.1300+-0.1299     ?     50.2866+-0.1812        ?
   string-concat-object                            2.7650+-0.0503            2.7096+-0.0393          might be 1.0204x faster
   string-concat-pair-object                       2.6786+-0.0516            2.6283+-0.0225          might be 1.0192x faster
   string-concat-pair-simple                      17.2471+-0.2528     ^     16.7335+-0.2530        ^ definitely 1.0307x faster
   string-concat-simple                           16.9704+-0.3704     ?     17.0389+-0.3626        ?
   string-cons-repeat                             10.0613+-0.0222     !     10.1398+-0.0250        ! definitely 1.0078x slower
   string-cons-tower                              10.9021+-0.0357           10.8617+-0.0354        
   string-equality                               106.4793+-0.1430          105.6643+-1.4763        
   string-hash                                     2.6725+-0.0152     ^      2.5458+-0.0092        ^ definitely 1.0497x faster
   string-repeat-arith                            45.2100+-0.3428     ?     45.2340+-0.2505        ?
   string-sub                                     87.5054+-0.8567     ?     89.4133+-1.1788        ? might be 1.0218x slower
   string-test                                     4.3056+-0.0354     ^      4.2396+-0.0269        ^ definitely 1.0156x faster
   structure-hoist-over-transitions                3.2815+-0.0216     ^      3.1741+-0.0264        ^ definitely 1.0338x faster
   tear-off-arguments-simple                       1.8062+-0.0077     ^      1.7394+-0.0074        ^ definitely 1.0384x faster
   tear-off-arguments                              3.3933+-0.0155     ^      3.1772+-0.0196        ^ definitely 1.0680x faster
   temporal-structure                             20.9042+-0.0911     ?     20.9465+-0.0642        ?
   to-int32-boolean                               30.5509+-0.0859     ?     30.6098+-0.1244        ?
   undefined-test                                  4.5289+-0.0791            4.5066+-0.0441        

   &lt;arithmetic&gt;                                   30.4389+-0.1196     ?     30.7956+-0.3653        ? might be 1.0117x slower
   &lt;geometric&gt; *                                   9.6932+-0.0261     ^      9.5507+-0.0353        ^ definitely 1.0149x faster
   &lt;harmonic&gt;                                      5.2284+-0.0169     ^      5.0416+-0.0231        ^ definitely 1.0371x faster

                                                     TipOfTree                    CoCo                                       
All benchmarks:
   &lt;arithmetic&gt;                                   64.4020+-0.2359     ?     64.6243+-0.5400        ? might be 1.0035x slower
   &lt;geometric&gt;                                    12.2837+-0.0565     ^     11.9286+-0.0628        ^ definitely 1.0298x faster
   &lt;harmonic&gt;                                      3.8258+-0.0348            3.7547+-0.0388          might be 1.0189x faster

                                                     TipOfTree                    CoCo                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                                27.5276+-0.1477     ^     26.3489+-0.1858        ^ definitely 1.0447x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891114</commentid>
    <comment_count>7</comment_count>
      <attachid>202256</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-19 22:28:23 -0700</bug_when>
    <thetext>Created attachment 202256
moar

Still playing around with alternatives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891369</commentid>
    <comment_count>8</comment_count>
      <attachid>202329</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-20 15:50:43 -0700</bug_when>
    <thetext>Created attachment 202329
more things

Changed how GC is deferred.  This appears to be an improvement and it fixes some crashes.  Still testing though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891592</commentid>
    <comment_count>9</comment_count>
      <attachid>202380</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-20 23:40:51 -0700</bug_when>
    <thetext>Created attachment 202380
the patch

It passes tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891830</commentid>
    <comment_count>10</comment_count>
      <attachid>202380</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-21 09:22:21 -0700</bug_when>
    <thetext>Comment on attachment 202380
the patch

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

r=me

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:959
&gt; +        worklistState =
&gt; +            stackFrame.vm-&gt;worklist-&gt;completeAllReadyPlansForVM(*stackFrame.vm, codeBlock);

This seems OK for now, but it might become a problem if LLVM compilation sticks at ~4ms / function. If you had 4 functions queued up, one call to cti_optimize would cause you to drop an animation frame. If you had 16 functions queued up, you&apos;d drop 4 frames. Basically, there&apos;s a tradeoff here between startup time and responsiveness, and the nob is turned all the way toward startup time right now, which is probably the wrong balance.

&gt; Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h:97
&gt; +    typedef ConcurrentJITLock Lock;
&gt; +    typedef ConcurrentJITLocker Locker;

Actually, I think this reads even better without the typedef, since it calls out the other client you&apos;re locking against.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891839</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-21 09:29:08 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 202380 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=202380&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITStubs.cpp:959
&gt; &gt; +        worklistState =
&gt; &gt; +            stackFrame.vm-&gt;worklist-&gt;completeAllReadyPlansForVM(*stackFrame.vm, codeBlock);
&gt; 
&gt; This seems OK for now, but it might become a problem if LLVM compilation sticks at ~4ms / function. If you had 4 functions queued up, one call to cti_optimize would cause you to drop an animation frame. If you had 16 functions queued up, you&apos;d drop 4 frames. Basically, there&apos;s a tradeoff here between startup time and responsiveness, and the nob is turned all the way toward startup time right now, which is probably the wrong balance.

No it won&apos;t, there&apos;s no trade-off.  This method, &quot;complete all ready [sic] plans for VM&quot;, does not wait for the compilation thread.  It just completes the ones that are done.  The only waiting it does is on the Worklist::m_lock, which is only held when modifying the queue/map/finished data structures.  Those modifications are pretty quick - at worst, grab the lock, loop over the list, release the lock.  The compilation thread only holds the lock for a very short time - at worst to dequeue or to append.

This is distinct from completeAllPlansForVM(), which does wait for the compilation thread to finish.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h:97
&gt; &gt; +    typedef ConcurrentJITLock Lock;
&gt; &gt; +    typedef ConcurrentJITLocker Locker;
&gt; 
&gt; Actually, I think this reads even better without the typedef, since it calls out the other client you&apos;re locking against.

Do you advocate making this change throughout?  There are a bunch of places that use the typedef-ConcurrentJITLock-to-Lock idiom.  I kind of like how this makes most code terse but still lets you find what the typedef means.

But I kind of like the change you&apos;re proposing.  Since that would be a larger patch (all of the places that use ConcurrentJITLock, and there are a bunch of them), how about I do it in a separate bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891886</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-21 10:40:04 -0700</bug_when>
    <thetext>Most up-to-date numbers:


Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r150398)
&quot;CoCo&quot; at /Volumes/Data/fromMiniMe/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r150398)

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                    CoCo                                       
SunSpider:
   3d-cube                                         9.6499+-0.2056     ^      6.7133+-0.1048        ^ definitely 1.4374x faster
   3d-morph                                        8.9624+-0.1326     ^      8.5918+-0.1158        ^ definitely 1.0431x faster
   3d-raytrace                                    10.6995+-0.1522     ^      8.3448+-0.1436        ^ definitely 1.2822x faster
   access-binary-trees                             1.9843+-0.0099            1.9258+-0.0948          might be 1.0304x faster
   access-fannkuch                                 7.8671+-0.1521     ^      7.5370+-0.0595        ^ definitely 1.0438x faster
   access-nbody                                    4.7480+-0.0643     ^      4.0090+-0.0225        ^ definitely 1.1844x faster
   access-nsieve                                   4.9202+-0.0510     ^      4.7887+-0.0721        ^ definitely 1.0275x faster
   bitops-3bit-bits-in-byte                        1.8576+-0.0104     ^      1.7855+-0.0192        ^ definitely 1.0404x faster
   bitops-bits-in-byte                             6.6267+-0.0955            6.5624+-0.0832        
   bitops-bitwise-and                              2.8060+-0.0186            2.7799+-0.0239        
   bitops-nsieve-bits                              4.7735+-0.0727     ^      4.4933+-0.0226        ^ definitely 1.0624x faster
   controlflow-recursive                           3.1904+-0.0353     ^      3.0758+-0.0189        ^ definitely 1.0372x faster
   crypto-aes                                      8.0045+-0.1763     ^      5.1721+-0.0808        ^ definitely 1.5476x faster
   crypto-md5                                      4.3211+-0.0290     ^      3.1718+-0.0213        ^ definitely 1.3624x faster
   crypto-sha1                                     3.3981+-0.0154     ^      2.8351+-0.0177        ^ definitely 1.1986x faster
   date-format-tofte                              15.3863+-0.1878     ^     14.5663+-0.1854        ^ definitely 1.0563x faster
   date-format-xparb                               9.4774+-0.1809     ^      8.2224+-0.1213        ^ definitely 1.1526x faster
   math-cordic                                     4.1031+-0.0089     ^      3.9208+-0.0402        ^ definitely 1.0465x faster
   math-partial-sums                              12.5822+-0.1089     ^     12.2123+-0.1300        ^ definitely 1.0303x faster
   math-spectral-norm                              3.2215+-0.0147     ^      2.7153+-0.0182        ^ definitely 1.1864x faster
   regexp-dna                                     12.5889+-0.1631     ?     12.7145+-0.1816        ?
   string-base64                                   5.0933+-0.0910            5.0118+-0.0700          might be 1.0163x faster
   string-fasta                                   10.7299+-0.0893           10.7248+-0.1361        
   string-tagcloud                                14.3621+-0.1760           14.2318+-0.1842        
   string-unpack-code                             28.3396+-0.1400     ^     27.6466+-0.1300        ^ definitely 1.0251x faster
   string-validate-input                           7.1897+-0.1548     ^      6.5280+-0.0847        ^ definitely 1.1014x faster

   &lt;arithmetic&gt; *                                  7.9571+-0.0665     ^      7.3185+-0.0530        ^ definitely 1.0873x faster
   &lt;geometric&gt;                                     6.4260+-0.0464     ^      5.8174+-0.0378        ^ definitely 1.1046x faster
   &lt;harmonic&gt;                                      5.2093+-0.0267     ^      4.7217+-0.0327        ^ definitely 1.1033x faster

                                                     TipOfTree                    CoCo                                       
V8Spider:
   crypto                                        252.3019+-6.3185     ^    242.0084+-0.3358        ^ definitely 1.0425x faster
   deltablue                                     127.7899+-0.8304     ^    102.0635+-0.6066        ^ definitely 1.2521x faster
   earley-boyer                                   84.0409+-0.2748     ^     69.8289+-0.3471        ^ definitely 1.2035x faster
   raytrace                                       63.6212+-0.3199     ^     38.1306+-0.1315        ^ definitely 1.6685x faster
   regexp                                        102.3147+-0.5922     ^     99.8834+-0.3194        ^ definitely 1.0243x faster
   richards                                      118.7354+-0.2458     ^    112.7906+-0.8365        ^ definitely 1.0527x faster
   splay                                          48.7566+-0.2879     ^     47.2623+-0.5742        ^ definitely 1.0316x faster

   &lt;arithmetic&gt;                                  113.9372+-0.9922     ^    101.7097+-0.1476        ^ definitely 1.1202x faster
   &lt;geometric&gt; *                                 100.2889+-0.4861     ^     86.0756+-0.1392        ^ definitely 1.1651x faster
   &lt;harmonic&gt;                                     89.6062+-0.2913     ^     74.0569+-0.1679        ^ definitely 1.2100x faster

                                                     TipOfTree                    CoCo                                       
Octane and V8v7:
   encrypt                                        1.49828+-0.00917          1.49704+-0.00886       
   decrypt                                       28.21896+-0.04017         28.14959+-0.14971       
   deltablue                             x2       0.57479+-0.00275    ?     0.57546+-0.00286       ?
   earley                                         0.88702+-0.00528    ?     0.89320+-0.00329       ?
   boyer                                         12.76316+-0.02460    ?    12.81662+-0.04635       ?
   raytrace                              x2       4.43644+-0.00628    !     4.47048+-0.02746       ! definitely 1.0077x slower
   regexp                                x2      32.48712+-0.13902    ?    32.61359+-0.18111       ?
   richards                              x2       0.30402+-0.00062    !     0.31225+-0.00339       ! definitely 1.0271x slower
   splay                                 x2       0.61994+-0.00764    ?     0.62812+-0.01887       ? might be 1.0132x slower
   navier-stokes                         x2      10.78609+-0.01360         10.77549+-0.00675       
   closure                                        0.31899+-0.03415    ?     0.31931+-0.03499       ?
   jquery                                         4.49077+-0.55383          4.47929+-0.54674       
   gbemu                                 x2     264.59222+-10.11509       258.36364+-12.90555        might be 1.0241x faster
   box2d                                 x2      33.82537+-0.14673         33.74638+-0.16887       

V8v7:
   &lt;arithmetic&gt;                                   8.86151+-0.02077    ?     8.88170+-0.02389       ? might be 1.0023x slower
   &lt;geometric&gt; *                                  2.79117+-0.00590    !     2.81027+-0.01164       ! definitely 1.0068x slower
   &lt;harmonic&gt;                                     1.00681+-0.00232    !     1.02130+-0.00737       ! definitely 1.0144x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  33.79223+-0.94658         33.23299+-1.19610         might be 1.0168x faster
   &lt;geometric&gt; *                                  4.89788+-0.06747    ?     4.90984+-0.07650       ? might be 1.0024x slower
   &lt;harmonic&gt;                                     1.13487+-0.02029    ?     1.14839+-0.02437       ? might be 1.0119x slower

                                                     TipOfTree                    CoCo                                       
Kraken:
   ai-astar                                       494.467+-0.810      ^     492.339+-0.497         ^ definitely 1.0043x faster
   audio-beat-detection                          1201.365+-6.093      ?    1251.031+-68.854        ? might be 1.0413x slower
   audio-dft                                      310.148+-0.726      ?     310.679+-0.772         ?
   audio-fft                                     1138.103+-13.501     ?    1194.025+-59.244        ? might be 1.0491x slower
   audio-oscillator                               234.181+-1.042            233.800+-0.967         
   imaging-darkroom                               290.995+-1.136            290.596+-0.884         
   imaging-desaturate                             849.050+-3.729      ?     849.382+-4.051         ?
   imaging-gaussian-blur                          403.118+-0.605      ?     404.140+-2.560         ?
   json-parse-financial                            81.772+-0.193      ^      80.663+-0.203         ^ definitely 1.0137x faster
   json-stringify-tinderbox                        99.190+-0.263      ?      99.664+-0.355         ?
   stanford-crypto-aes                            183.103+-0.577      ^     181.488+-0.813         ^ definitely 1.0089x faster
   stanford-crypto-ccm                            214.439+-1.003            191.840+-25.989          might be 1.1178x faster
   stanford-crypto-pbkdf2                         269.982+-1.299      ^     265.512+-2.326         ^ definitely 1.0168x faster
   stanford-crypto-sha256-iterative               115.778+-0.193            115.552+-0.124         

   &lt;arithmetic&gt; *                                 420.406+-1.448      ?     425.765+-9.608         ? might be 1.0127x slower
   &lt;geometric&gt;                                    300.374+-0.569            298.448+-4.175           might be 1.0065x faster
   &lt;harmonic&gt;                                     221.866+-0.313      ^     218.375+-3.120         ^ definitely 1.0160x faster

                                                     TipOfTree                    CoCo                                       
JSRegress:
   adapt-to-double-divide                         22.4341+-0.0826     ?     22.5966+-0.1355        ?
   aliased-arguments-getbyval                      0.9417+-0.0102     ^      0.8408+-0.0091        ^ definitely 1.1200x faster
   allocate-big-object                             2.5568+-0.0350            2.5014+-0.0249          might be 1.0222x faster
   arity-mismatch-inlining                         0.7822+-0.0136     ?      0.7833+-0.0211        ?
   array-access-polymorphic-structure              7.2140+-0.1301     ^      6.7576+-0.0936        ^ definitely 1.0675x faster
   array-with-double-add                           5.7864+-0.1013     ?      5.8422+-0.0693        ?
   array-with-double-increment                     4.0798+-0.0531     ?      4.2154+-0.0862        ? might be 1.0332x slower
   array-with-double-mul-add                       7.1538+-0.0799     ?      7.1720+-0.0855        ?
   array-with-double-sum                           7.8619+-0.0979     ?      7.8726+-0.0719        ?
   array-with-int32-add-sub                       10.6305+-0.1364           10.5590+-0.0803        
   array-with-int32-or-double-sum                  7.9269+-0.1150     ?      8.0773+-0.1024        ? might be 1.0190x slower
   big-int-mul                                     4.8795+-0.0737            4.8129+-0.0411          might be 1.0138x faster
   boolean-test                                    4.4385+-0.0589            4.3904+-0.0627          might be 1.0110x faster
   cast-int-to-double                             13.8579+-0.0780     ?     13.9432+-0.1146        ?
   cell-argument                                  14.3010+-0.0312     !     14.4514+-0.0801        ! definitely 1.0105x slower
   cfg-simplify                                    4.0578+-0.0474            4.0042+-0.0364          might be 1.0134x faster
   cmpeq-obj-to-obj-other                         12.2170+-0.3348     ?     12.3393+-0.3465        ? might be 1.0100x slower
   constant-test                                   8.5006+-0.1432     ?      8.5705+-0.1229        ?
   direct-arguments-getbyval                       0.8609+-0.0087     ^      0.7323+-0.0073        ^ definitely 1.1756x faster
   double-pollution-getbyval                      10.7288+-0.1148     ?     10.8311+-0.1005        ?
   double-pollution-putbyoffset                    5.1052+-0.1032            4.9191+-0.0994          might be 1.0378x faster
   empty-string-plus-int                          10.8354+-0.1787     ?     10.8436+-0.1678        ?
   external-arguments-getbyval                     2.2258+-0.0301     ^      1.9093+-0.0095        ^ definitely 1.1658x faster
   external-arguments-putbyval                     3.3275+-0.0165            3.2827+-0.1412          might be 1.0137x faster
   Float32Array-matrix-mult                       14.2371+-0.0983     ^     13.7713+-0.2161        ^ definitely 1.0338x faster
   fold-double-to-int                             21.9802+-0.3169     ?     22.0115+-0.2034        ?
   function-dot-apply                              3.2082+-0.0135     ^      3.1038+-0.0120        ^ definitely 1.0336x faster
   function-test                                   5.1082+-0.0752            5.0986+-0.0716        
   get-by-id-chain-from-try-block                  6.8377+-0.1457            6.7745+-0.1775        
   HashMap-put-get-iterate-keys                   94.8348+-0.8266           93.9742+-1.9139        
   HashMap-put-get-iterate                        98.8796+-1.1131           97.1083+-0.9762          might be 1.0182x faster
   HashMap-string-put-get-iterate                 74.8393+-0.4343     ^     71.7546+-0.4862        ^ definitely 1.0430x faster
   indexed-properties-in-objects                   4.5585+-0.0447     ^      4.3592+-0.0602        ^ definitely 1.0457x faster
   inline-arguments-access                         1.2686+-0.0085     !      1.2946+-0.0073        ! definitely 1.0205x slower
   inline-arguments-local-escape                  22.8639+-0.1066     ?     23.0111+-0.2137        ?
   inline-get-scoped-var                           6.5241+-0.0904     ?      6.5947+-0.0744        ? might be 1.0108x slower
   inlined-put-by-id-transition                   16.9741+-0.3131     ^     16.3867+-0.1678        ^ definitely 1.0358x faster
   int-or-other-abs-then-get-by-val                8.9580+-0.1331            8.8304+-0.0711          might be 1.0145x faster
   int-or-other-abs-zero-then-get-by-val          37.2762+-0.2962           37.0678+-0.2655        
   int-or-other-add-then-get-by-val               10.1959+-0.0883           10.1918+-0.0833        
   int-or-other-add                               10.4838+-0.0927           10.4806+-0.0976        
   int-or-other-div-then-get-by-val                7.9154+-0.1208            7.7420+-0.0836          might be 1.0224x faster
   int-or-other-max-then-get-by-val               10.0459+-0.1317            9.9063+-0.1830          might be 1.0141x faster
   int-or-other-min-then-get-by-val                8.1799+-0.1150            8.0404+-0.0963          might be 1.0174x faster
   int-or-other-mod-then-get-by-val                8.0952+-0.1000     ^      7.8596+-0.0957        ^ definitely 1.0300x faster
   int-or-other-mul-then-get-by-val                7.1842+-0.1142            7.0712+-0.0996          might be 1.0160x faster
   int-or-other-neg-then-get-by-val                8.0313+-0.0966            7.9997+-0.1039        
   int-or-other-neg-zero-then-get-by-val          36.5081+-0.1659     ?     36.5956+-0.3472        ?
   int-or-other-sub-then-get-by-val               10.2755+-0.0902           10.2391+-0.1035        
   int-or-other-sub                                8.2252+-0.0955            8.2185+-0.1083        
   int-overflow-local                             12.8977+-0.0772           12.7714+-0.1342        
   Int16Array-bubble-sort                         49.4208+-0.1271           49.1982+-0.1818        
   Int16Array-load-int-mul                         1.8965+-0.0104     !      1.9175+-0.0086        ! definitely 1.0111x slower
   Int8Array-load                                  4.8578+-0.0608            4.8493+-0.0222        
   integer-divide                                 15.1363+-0.0848           15.0918+-0.0723        
   integer-modulo                                  2.1610+-0.0169     ^      2.0387+-0.0145        ^ definitely 1.0600x faster
   make-indexed-storage                            4.1687+-0.0329     ^      3.7362+-0.0354        ^ definitely 1.1158x faster
   method-on-number                               25.9305+-0.4858           25.5215+-0.5658          might be 1.0160x faster
   nested-function-parsing-random                382.7938+-13.2770         382.5710+-13.3033       
   nested-function-parsing                        48.0004+-1.1081           47.6056+-0.9559        
   new-array-buffer-dead                           3.6478+-0.0126     ?      3.6654+-0.0320        ?
   new-array-buffer-push                          10.4742+-0.1599           10.3453+-0.1926          might be 1.0125x faster
   new-array-dead                                 28.2037+-0.0834     ?     28.3341+-0.0778        ?
   new-array-push                                  6.9144+-0.1146            6.8513+-0.0614        
   number-test                                     4.2870+-0.0863     ?      4.3301+-0.0699        ? might be 1.0101x slower
   object-closure-call                             8.4225+-0.1019     !     10.5617+-1.9059        ! definitely 1.2540x slower
   object-test                                     4.8792+-0.0772     ?      4.9431+-0.0602        ? might be 1.0131x slower
   poly-stricteq                                 970.9461+-2.8302     !    998.5610+-12.9388       ! definitely 1.0284x slower
   polymorphic-structure                          19.9364+-0.0806     !     21.2821+-0.6624        ! definitely 1.0675x slower
   polyvariant-monomorphic-get-by-id              12.4956+-0.0837     ?     12.5439+-0.0887        ?
   rare-osr-exit-on-local                         20.4981+-0.1298           20.4968+-0.0769        
   register-pressure-from-osr                     31.5793+-0.1081     ^     31.3128+-0.1067        ^ definitely 1.0085x faster
   simple-activation-demo                         34.4835+-0.1380     ^     34.2321+-0.0932        ^ definitely 1.0073x faster
   slow-array-profile-convergence                  4.4407+-0.0591     ^      4.1033+-0.0225        ^ definitely 1.0822x faster
   slow-convergence                                3.8817+-0.0047     ^      3.4549+-0.0263        ^ definitely 1.1235x faster
   sparse-conditional                              1.3439+-0.0099            1.3207+-0.0219          might be 1.0175x faster
   splice-to-remove                               50.2737+-0.2501     ^     49.5566+-0.1260        ^ definitely 1.0145x faster
   string-concat-object                            2.7306+-0.0457            2.7267+-0.0512        
   string-concat-pair-object                       2.7407+-0.0789            2.6530+-0.0241          might be 1.0331x faster
   string-concat-pair-simple                      16.8871+-0.3057     ?     16.9288+-0.2450        ?
   string-concat-simple                           17.0945+-0.2832     ?     17.2314+-0.2649        ?
   string-cons-repeat                             10.0806+-0.0248     !     10.1844+-0.0261        ! definitely 1.0103x slower
   string-cons-tower                              10.9453+-0.0229     ^     10.8847+-0.0327        ^ definitely 1.0056x faster
   string-equality                               108.0721+-1.9209     ^    105.1292+-0.8394        ^ definitely 1.0280x faster
   string-hash                                     2.6790+-0.0128     ^      2.5520+-0.0106        ^ definitely 1.0497x faster
   string-repeat-arith                            43.9696+-0.4475     ?     44.3525+-0.1472        ?
   string-sub                                     85.6510+-1.0897     !     87.2145+-0.3700        ! definitely 1.0183x slower
   string-test                                     4.2977+-0.0257            4.2428+-0.0657          might be 1.0129x faster
   structure-hoist-over-transitions                3.3313+-0.0247     ^      3.1696+-0.0227        ^ definitely 1.0510x faster
   tear-off-arguments-simple                       1.8326+-0.0105     ^      1.7574+-0.0085        ^ definitely 1.0428x faster
   tear-off-arguments                              3.4296+-0.0153     ^      3.1928+-0.0189        ^ definitely 1.0742x faster
   temporal-structure                             21.2194+-0.5357           21.0447+-0.1684        
   to-int32-boolean                               30.6567+-0.2084     ?     30.7856+-0.2886        ?
   undefined-test                                  4.5862+-0.0360            4.4873+-0.0853          might be 1.0220x faster

   &lt;arithmetic&gt;                                   30.3231+-0.1327     ?     30.5050+-0.1677        ? might be 1.0060x slower
   &lt;geometric&gt; *                                   9.7065+-0.0245     ^      9.5811+-0.0356        ^ definitely 1.0131x faster
   &lt;harmonic&gt;                                      5.2523+-0.0209     ^      5.0702+-0.0228        ^ definitely 1.0359x faster

                                                     TipOfTree                    CoCo                                       
All benchmarks:
   &lt;arithmetic&gt;                                   64.3186+-0.2581           64.1813+-0.8267          might be 1.0021x faster
   &lt;geometric&gt;                                    12.3018+-0.0546     ^     11.9361+-0.0614        ^ definitely 1.0306x faster
   &lt;harmonic&gt;                                      3.8423+-0.0339     ^      3.7581+-0.0380        ^ definitely 1.0224x faster

                                                     TipOfTree                    CoCo                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                                27.5761+-0.1454     ^     26.3109+-0.1840        ^ definitely 1.0481x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891899</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-21 11:02:20 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 202380 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=202380&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/jit/JITStubs.cpp:959
&gt; &gt; &gt; +        worklistState =
&gt; &gt; &gt; +            stackFrame.vm-&gt;worklist-&gt;completeAllReadyPlansForVM(*stackFrame.vm, codeBlock);
&gt; &gt; 
&gt; &gt; This seems OK for now, but it might become a problem if LLVM compilation sticks at ~4ms / function. If you had 4 functions queued up, one call to cti_optimize would cause you to drop an animation frame. If you had 16 functions queued up, you&apos;d drop 4 frames. Basically, there&apos;s a tradeoff here between startup time and responsiveness, and the nob is turned all the way toward startup time right now, which is probably the wrong balance.
&gt; 
&gt; No it won&apos;t, there&apos;s no trade-off.  This method, &quot;complete all ready [sic] plans for VM&quot;, does not wait for the compilation thread.  It just completes the ones that are done.  The only waiting it does is on the Worklist::m_lock, which is only held when modifying the queue/map/finished data structures.  Those modifications are pretty quick - at worst, grab the lock, loop over the list, release the lock.  The compilation thread only holds the lock for a very short time - at worst to dequeue or to append.
&gt; 
&gt; This is distinct from completeAllPlansForVM(), which does wait for the compilation thread to finish.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h:97
&gt; &gt; &gt; +    typedef ConcurrentJITLock Lock;
&gt; &gt; &gt; +    typedef ConcurrentJITLocker Locker;
&gt; &gt; 
&gt; &gt; Actually, I think this reads even better without the typedef, since it calls out the other client you&apos;re locking against.
&gt; 
&gt; Do you advocate making this change throughout?  There are a bunch of places that use the typedef-ConcurrentJITLock-to-Lock idiom.  I kind of like how this makes most code terse but still lets you find what the typedef means.
&gt; 
&gt; But I kind of like the change you&apos;re proposing.  Since that would be a larger patch (all of the places that use ConcurrentJITLock, and there are a bunch of them), how about I do it in a separate bug?

Filed: https://bugs.webkit.org/show_bug.cgi?id=116561</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891916</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-21 11:26:40 -0700</bug_when>
    <thetext>&gt; &gt; But I kind of like the change you&apos;re proposing.  Since that would be a larger patch (all of the places that use ConcurrentJITLock, and there are a bunch of them), how about I do it in a separate bug?

Sounds great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891937</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-21 12:10:42 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/150465</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202219</attachid>
            <date>2013-05-18 14:48:47 -0700</date>
            <delta_ts>2013-05-18 17:30:57 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30421</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMzQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDEzLTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBvbiBhIHNlcGFyYXRlIHRocmVh
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyODM5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVj
b2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVy
Ojpmb3JjZVNsb3dQYXRoKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlv
bkNvdW50ZXI6OnNldFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5oOgorICAgICAgICAoRXhlY3V0aW9uQ291bnRlcik6CisgICAgICAgICogZGZnL0RGR0Ry
aXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OlBsYW4pOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmtleSk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFu
Lmg6CisgICAgICAgIChQbGFuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OldvcmtsaXN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6fldvcmtsaXN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpXb3JrbGlzdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6Oldv
cmtsaXN0OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjplbnF1ZXVlKToK
KyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3Jr
bGlzdDo6Y29tcGxldGVBbGxGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJ1
blRocmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQXN5bmNocm9u
b3VzUGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnRocmVhZEZ1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjppbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpnbG9iYWxXb3JrbGlzdCk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0
Lmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFdvcmtsaXN0KToKKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpsb2dPU1IpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoVk0pOgor
CiAyMDEzLTA1LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
Zm91cnRoVGllcjogZ2V0Q1RJU3R1YiBzaG91bGQgYmUgdGhyZWFkLXNhZmUKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTAz
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJERkdSZXBhdGNoLmgiCisjaW5jbHVkZSAiREZH
V29ya2xpc3QuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUu
aCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtMzAyNiw2ICszMDI3LDE0IEBAIGludDMy
X3QgQ29kZUJsb2NrOjpjb3VudGVyVmFsdWVGb3JPcHRpbWkKIAogYm9vbCBDb2RlQmxvY2s6OmNo
ZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKIHsKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBpZiAobV92bS0+d29ya2xpc3QKKyAgICAgICAgJiYgbV92bS0+d29ya2xpc3QtPmNv
bXBpbGF0aW9uU3RhdGUodGhpcykgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAg
ICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gbV9qaXRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhy
ZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKIH0KIApAQCAtMzA1NCw2ICszMDYzLDMwIEBAIHZv
aWQgQ29kZUJsb2NrOjpvcHRpbWl6ZVNvb24oKQogICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0
TmV3VGhyZXNob2xkKGNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbigpLCB0aGlzKTsKIH0KIAor
dm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlv
blJlc3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCgocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgPT0gKHJlcGxhY2VtZW50KCkgIT0g
dGhpcykpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBs
YWNlbWVudCgpLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNh
c2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9u
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CisgICAgY2Fz
ZSBDb21waWxhdGlvbkRlZmVycmVkOgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbigp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CisgICAg
ICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KKyAgICAgICAgY291bnRSZW9w
dGltaXphdGlvbigpOworICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEVOQUJMRShKSVQpCiB1aW50MzJfdCBD
b2RlQmxvY2s6OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJl
c2hvbGQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiAxNTAzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2NSw2ICs4NjUsOCBAQCBjbGFzcyBDb2Rl
QmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvCiAgICAgICAgIC8vIHRvIHRyaWdnZXIgb3B0
aW1pemF0aW9uIGlmIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgYmVjb21lcyBob3QKICAgICAgICAg
Ly8gaW4gdGhlIGJhc2VsaW5lIGNvZGUuCiAgICAgICAgIHZvaWQgb3B0aW1pemVTb29uKCk7Cisg
ICAgCisgICAgICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90
IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3Vu
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5jcHAJKHJldmlzaW9uIDE1MDMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsMTEgQEAgRXhlY3V0aW9uQ291bnRlcjo6RXhlY3V0aW9uQ291bnRlcigpCiAgICAgcmVz
ZXQoKTsKIH0KIAordm9pZCBFeGVjdXRpb25Db3VudGVyOjpmb3JjZVNsb3dQYXRoKCkKK3sKKyAg
ICBtX2NvdW50ZXIgPSAwOyAgICAKK30KKwogYm9vbCBFeGVjdXRpb25Db3VudGVyOjpjaGVja0lm
VGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAo
aGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKQpAQCAtMTI4LDcgKzEzMyw3IEBAIGJvb2wg
RXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKENvZGUKICAgICAgICAgCiAgICAgLy8gQ29t
cHV0ZSB0aGUgdHJ1ZSB0b3RhbCBjb3VudC4KICAgICBkb3VibGUgdHJ1ZVRvdGFsQ291bnQgPSBj
b3VudCgpOwotICAgICAgICAKKyAgICAKICAgICAvLyBDb3JyZWN0IHRoZSB0aHJlc2hvbGQgZm9y
IGN1cnJlbnQgbWVtb3J5IHVzYWdlLgogICAgIGRvdWJsZSB0aHJlc2hvbGQgPSBhcHBseU1lbW9y
eVVzYWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmgJKHJldmlzaW9uIDE1MDMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAg
Y2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgRXhlY3V0aW9uQ291bnRlciB7CiBwdWJsaWM6CiAgICAg
RXhlY3V0aW9uQ291bnRlcigpOworICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgp
OyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5
IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5k
U2V0KENvZGVCbG9jayopOwogICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNo
b2xkLCBDb2RlQmxvY2sqKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTAzMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiT3B0
aW9ucy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNjgsMTcgKzY5LDE5
IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKENvbXBpbGUKICAgICBpZiAobG9n
Q29tcGlsYXRpb25DaGFuZ2VzKCkpCiAgICAgICAgIGRhdGFMb2coIkRGRyBjb21waWxpbmcgIiwg
KmNvZGVCbG9jaywgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKICAgICAKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0IHRoZSBERkcgaXMgZ29p
bmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwogICAgIC8vIG1ha2Ugc3VyZSB0
aGF0IGFsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRpb24gb24gdGhlIG1haW4g
dGhyZWFkLgotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5r
R2VuZXJhdG9yKTsKLSAgICBleGVjLT52bSgpLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKLSAgICBleGVjLT52bSgpLmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKGxpbmtDbG9zdXJl
Q2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICBleGVjLT52bSgpLmdldENUSVN0dWIodmlydHVhbENh
bGxUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKHZpcnR1YWxDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7
CisgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcik7CisgICAg
dm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElT
dHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CiAjaWYgRU5BQkxFKEZUTF9KSVQp
Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKEZUTDo6b3NyRXhpdEdlbmVyYXRpb25UaHVua0dl
bmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1YihGVEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtH
ZW5lcmF0b3IpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gRGVyaXZlIG91ciBzZXQgb2YgbXVzdC1o
YW5kbGUgdmFsdWVzLiBUaGUgY29tcGlsYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBjb25zZXJ2YXRp
dmUKQEAgLTEwNSw2ICsxMDgsMTMgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUo
Q29tcGlsZQogICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVu
Y2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwogICAgIH0KICAgICAKKyAgICBpZiAoT3B0aW9u
czo6ZW5hYmxlQ29uY3VycmVudENvbXBpbGF0aW9uKCkpIHsKKyAgICAgICAgaWYgKCF2bS53b3Jr
bGlzdCkKKyAgICAgICAgICAgIHZtLndvcmtsaXN0ID0gZ2xvYmFsV29ya2xpc3QoKTsKKyAgICAg
ICAgdm0ud29ya2xpc3QtPmVucXVldWUocGxhbik7CisgICAgICAgIHJldHVybiBDb21waWxhdGlv
bkRlZmVycmVkOworICAgIH0KKyAgICAKICAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQoKTsKICAg
ICByZXR1cm4gcGxhbi0+ZmluYWxpemUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTUw
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzgsNiArNzgsNyBAQCBQbGFuOjpQbGFuKAogICAgICwgbXVzdEhhbmRsZVZhbHVl
cyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpCiAgICAgLCBj
b21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGFkb3B0
UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0KCkpLCBQcm9maWxl
cjo6REZHKSkgOiAwKQogICAgICwgaWRlbnRpZmllcnMoY29kZUJsb2NrLmdldCgpKQorICAgICwg
aXNDb21waWxlZChmYWxzZSkKIHsKIH0KIApAQCAtMTk5LDYgKzIwMCwxMSBAQCBDb21waWxhdGlv
blJlc3VsdCBQbGFuOjpmaW5hbGl6ZShSZWZQdHI8CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bDsKIH0KIAorQ29kZUJsb2NrKiBQbGFuOjprZXkoKQoreworICAgIHJldHVybiBjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmgJKHJldmlzaW9uIDE1MDMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIHN0cnVjdCBQbGFuIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICAKICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5h
bGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogICAgIAorICAgIENvZGVCbG9jayoga2V5KCk7Cisg
ICAgCiAgICAgY29uc3QgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGU7CiAgICAgVk0mIHZtOwogICAg
IFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKQEAgLTcxLDYgKzczLDggQEAgc3RydWN0IFBs
YW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIERlc2lyZWRXYXRjaHBvaW50cyB3
YXRjaHBvaW50czsKICAgICBEZXNpcmVkSWRlbnRpZmllcnMgaWRlbnRpZmllcnM7CiAgICAgRGVz
aXJlZFN0cnVjdHVyZUNoYWlucyBjaGFpbnM7CisgICAgCisgICAgYm9vbCBpc0NvbXBpbGVkOwog
CiBwcml2YXRlOgogICAgIGJvb2wgaXNTdGlsbFZhbGlkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworV29ya2xpc3Q6
OldvcmtsaXN0KCkKK3sKK30KKworV29ya2xpc3Q6On5Xb3JrbGlzdCgpCit7CisgICAgbV9xdWV1
ZS5hcHBlbmQobnVsbHB0cik7IC8vIFVzZSBudWxsIHBsYW4gdG8gaW5kaWNhdGUgdGhhdCB3ZSB3
YW50IHRoZSB0aHJlYWQgdG8gdGVybWluYXRlLgorICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KG1fdGhyZWFkKTsKK30KKwordm9pZCBXb3JrbGlzdDo6ZmluaXNoQ3JlYXRpb24oKQoreworICAg
IG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKHRocmVhZEZ1bmN0aW9uLCB0aGlzLCAiSlNDIENvbXBp
bGF0aW9uIFRocmVhZCIpOworfQorCitQYXNzUmVmUHRyPFdvcmtsaXN0PiBXb3JrbGlzdDo6Y3Jl
YXRlKCkKK3sKKyAgICBSZWZQdHI8V29ya2xpc3Q+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBXb3Jr
bGlzdCgpKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShQYXNzUmVmUHRyPFBsYW4+IHBhc3NlZFBs
YW4pCit7CisgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBwYXNzZWRQbGFuOworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgIEFTU0VSVChtX3BsYW5zLmZpbmQocGxhbi0+a2V5KCkp
ID09IG1fcGxhbnMuZW5kKCkpOworICAgIG1fcGxhbnMuYWRkKHBsYW4tPmtleSgpLCBwbGFuKTsK
KyAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsKKyAgICBtX2NvbmRpdGlvbi5icm9hZGNhc3QoKTsK
K30KKworQ29tcGlsYXRpb25SZXN1bHQgV29ya2xpc3Q6OmNvbXBsZXRlKENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaykKK3sKKyAgICBSZWZQdHI8UGxhbj4gcGxhbjsKKyAgICAKKyAgICB7CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBwbGFuID0gbV9wbGFucy50
YWtlKHByb2ZpbGVkQmxvY2spOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxhbik7CisgICAg
QVNTRVJUKHBsYW4tPmlzQ29tcGlsZWQpOworICAgIAorICAgIHJldHVybiBwcm9maWxlZEJsb2Nr
LT5yZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShwbGFuKTsKK30KKworV29ya2xpc3Q6
OlN0YXRlIFdvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aykKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBQbGFuTWFwOjppdGVy
YXRvciBpdGVyID0gbV9wbGFucy5maW5kKHByb2ZpbGVkQmxvY2spOworICAgIGlmIChpdGVyID09
IG1fcGxhbnMuZW5kKCkpCisgICAgICAgIHJldHVybiBOb3RLbm93bjsKKyAgICByZXR1cm4gaXRl
ci0+dmFsdWUtPmlzQ29tcGlsZWQgPyBDb21waWxlZCA6IENvbXBpbGluZzsKK30KKwordm9pZCBX
b3JrbGlzdDo6Y29tcGxldGVBbGxGb3JWTShWTSYgdm0pCit7CisgICAgLy8gV2FpdCBmb3IgYWxs
IG9mIHRoZSBwbGFucyBmb3IgdGhlIGdpdmVuIFZNIHRvIGNvbXBsZXRlLCBhbmQgY29sbGVjdCB0
aGUKKyAgICAvLyBDb2RlQmxvY2sqJ3MgdGhhdCBhcmUgdGhlIGtleXMgdG8gdGhvc2UgcGxhbnMu
IFRoZSBpZGVhIGhlcmUgaXMgdGhhdCB3ZQorICAgIC8vIHdhbnQgYWxsIG9mIHRoZSBjYWxsZXIg
Vk0ncyBwbGFucyB0byBiZSBkb25lLiBXZSBkb24ndCBjYXJlIGFib3V0IGFueQorICAgIC8vIG90
aGVyIFZNJ3MgcGxhbnMsIGFuZCB3ZSB3b24ndCBhdHRlbXB0IHRvIGNvbXBsZXRlIHRob3NlLiBB
ZnRlciB3ZQorICAgIC8vIHJlbGVhc2UgdGhpcyBsb2NrLCB3ZSBrbm93IHRoYXQgYWx0aG91Z2gg
b3RoZXIgVk1zIG1heSBzdGlsbCBiZSBhZGRpbmcKKyAgICAvLyBwbGFucywgb3VyIFZNIHdpbGwg
bm90IGJlLgorICAgIFZlY3RvcjxSZWZQdHI8Q29kZUJsb2NrPiA+IGtleUJsb2NrczsKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICBib29sIGFsbEFyZUNvbXBsZXRlZCA9IHRydWU7CisgICAgICAgICAgICBQ
bGFuTWFwOjppdGVyYXRvciBlbmQgPSBtX3BsYW5zLmVuZCgpOworICAgICAgICAgICAgZm9yIChQ
bGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKCZpdGVyLT52YWx1ZS0+dm0gIT0gJnZtKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZh
bHVlLT5pc0NvbXBpbGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsbEFyZUNvbXBsZXRlZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChhbGxBcmVDb21wbGV0
ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
Y29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGxh
bk1hcDo6aXRlcmF0b3IgZW5kID0gbV9wbGFucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbGFuTWFw
OjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgICAgICBpZiAoJml0ZXItPnZhbHVlLT52bSAhPSAmdm0pCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBrZXlCbG9ja3MuYXBwZW5kKGl0ZXItPmtleSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gTm93IGNvbXBsZXRlIGFsbCBvZiB0aGUgcGxh
bnMgZm9yIHRoaXMgVk0uCisgICAgZm9yICh1bnNpZ25lZCBpID0ga2V5QmxvY2tzLnNpemUoKTsg
aS0tOykgeworICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb21wbGV0ZShrZXlC
bG9ja3NbaV0uZ2V0KCkpOworICAgICAgICBrZXlCbG9ja3NbaV0tPnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChyZXN1bHQpOworICAgIH0KK30KKwordm9p
ZCBXb3JrbGlzdDo6cnVuVGhyZWFkKCkKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFJlZlB0
cjxQbGFuPiBwbGFuOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChtX3F1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CisgICAgICAgICAgICBwbGFuID0gbV9x
dWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFwbGFu
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgcGxhbi0+Y29tcGlsZUlu
VGhyZWFkKCk7CisgICAgICAgIGNvbXBsZXRlQXN5bmNocm9ub3VzUGxhbihwbGFuLmdldCgpKTsK
KyAgICB9Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlQXN5bmNocm9ub3VzUGxhbihQbGFu
KiBwbGFuKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHBsYW4tPmtl
eSgpLT5qaXRFeGVjdXRlQ291bnRlcigpLmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKKyAg
ICBwbGFuLT5pc0NvbXBpbGVkID0gdHJ1ZTsKKyAgICBtX2NvbmRpdGlvbi5icm9hZGNhc3QoKTsK
K30KKwordm9pZCBXb3JrbGlzdDo6dGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpCit7Cisg
ICAgc3RhdGljX2Nhc3Q8V29ya2xpc3QqPihhcmd1bWVudCktPnJ1blRocmVhZCgpOworfQorCitz
dGF0aWMgcHRocmVhZF9vbmNlX3QgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5T25jZSA9IFBU
SFJFQURfT05DRV9JTklUOworc3RhdGljIFdvcmtsaXN0KiB0aGVHbG9iYWxXb3JrbGlzdDsKKwor
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZSgpCit7CisgICAgdGhlR2xv
YmFsV29ya2xpc3QgPSBXb3JrbGlzdDo6Y3JlYXRlKCkubGVha1JlZigpOworfQorCitXb3JrbGlz
dCogZ2xvYmFsV29ya2xpc3QoKQoreworICAgIHB0aHJlYWRfb25jZSgmaW5pdGlhbGl6ZUdsb2Jh
bFdvcmtsaXN0S2V5T25jZSwgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZSk7CisgICAgcmV0
dXJuIHRoZUdsb2JhbFdvcmtsaXN0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHV29ya2xp
c3RfaAorI2RlZmluZSBERkdXb3JrbGlzdF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHUGxhbi5oIgorI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKK3B1Ymxp
YzoKKyAgICB+V29ya2xpc3QoKTsKKyAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrbGlz
dD4gY3JlYXRlKCk7CisgICAgCisgICAgdm9pZCBlbnF1ZXVlKFBhc3NSZWZQdHI8UGxhbj4pOwor
ICAgIAorICAgIHZvaWQgY29tcGxldGVBbGxGb3JWTShWTSYpOworICAgIENvbXBpbGF0aW9uUmVz
dWx0IGNvbXBsZXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jayk7CisgICAgCisgICAgZW51bSBT
dGF0ZSB7IE5vdEtub3duLCBDb21waWxpbmcsIENvbXBpbGVkIH07CisgICAgU3RhdGUgY29tcGls
YXRpb25TdGF0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2spOworICAgIAorcHJpdmF0ZToKKyAg
ICBXb3JrbGlzdCgpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oKTsKKyAgICAKKyAgICB2b2lk
IHJ1blRocmVhZCgpOworICAgIHZvaWQgdGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOwor
ICAgIAorICAgIHZvaWQgY29tcGxldGVBc3luY2hyb25vdXNQbGFuKFBsYW4qKTsKKworICAgIERl
cXVlPFJlZlB0cjxQbGFuPiA+IG1fcXVldWU7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxD
b2RlQmxvY2s+LCBSZWZQdHI8UGxhbj4gPiBQbGFuTWFwOworICAgIFBsYW5NYXAgbV9wbGFuczsK
KyAgICBNdXRleCBtX2xvY2s7CisgICAgLy8gV2UgYnJvYWRjYXN0IG9uIHRoaXMgY29uZGl0aW9u
IHdoZW5ldmVyOgorICAgIC8vIC0gU29tZXRoaW5nIGlzIGVucXVldWVkLgorICAgIC8vIC0gU29t
ZXRoaW5nIGlzIGNvbXBsZXRlZC4KKyAgICBUaHJlYWRDb25kaXRpb24gbV9jb25kaXRpb247Cisg
ICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZDsKK307CisKKy8vIEZvciBub3cgd2UgdXNlIGEg
c2luZ2xlIGdsb2JhbCB3b3JrbGlzdC4gSXQncyBub3QgY2xlYXIgdGhhdCB0aGlzCisvLyBpcyB0
aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBpdCBpcyB3aGF0IHdlIGRvLCBmb3Igbm93LgorV29y
a2xpc3QqIGdsb2JhbFdvcmtsaXN0KCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHV29ya2xpc3RfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUwMzM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
Myw2ICs3MDMsMTAgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwog
ICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgSkFWQVNDUklQVENPUkVfR0NfQkVH
SU4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVy
YXRpb24pOworICAgIAorICAgIGlmIChtX3ZtLT53b3JrbGlzdCkKKyAgICAgICAgbV92bS0+d29y
a2xpc3QtPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pOworICAgIAogICAgIG1fb3BlcmF0aW9uSW5Q
cm9ncmVzcyA9IENvbGxlY3Rpb247CiAKICAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPndpbGxDb2xs
ZWN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gMTUwMzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5OCw2ICs4OTgsMTMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCitzdGF0aWMgYm9vbCBs
b2dPU1IoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24oKQorICAg
ICAgICB8fCBPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpz
aG93REZHRGlzYXNzZW1ibHkoKTsKK30KKwogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0
aW1pemUpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtOTA2
LDMxICs5MTMsNTMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAotI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZygKLSAgICAgICAgKmNvZGVCbG9jaywg
IjogRW50ZXJlZCBvcHRpbWl6ZSB3aXRoIGJ5dGVjb2RlSW5kZXggPSAiLCBieXRlY29kZUluZGV4
LAotICAgICAgICAiLCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNv
dW50ZXIoKSwKLSAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwgY29kZUJs
b2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLAotICAgICAgICAiLCBleGl0Q291bnRl
ciA9ICIpOwotICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCi0g
ICAgICAgIGRhdGFMb2coY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5vc3JFeGl0Q291bnRlcigp
KTsKLSAgICBlbHNlCi0gICAgICAgIGRhdGFMb2coIk4vQSIpOwotICAgIGRhdGFMb2coIlxuIik7
Ci0jZW5kaWYKKyAgICBpZiAobG9nT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgb3B0aW1pemUgd2l0aCBieXRlY29kZUluZGV4ID0g
IiwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgICIsIGV4ZWN1dGVDb3VudGVyID0gIiwgY29k
ZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpLAorICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyID0gIiwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigp
LAorICAgICAgICAgICAgIiwgZXhpdENvdW50ZXIgPSAiKTsKKyAgICAgICAgaWYgKGNvZGVCbG9j
ay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIGRhdGFMb2coY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpLT5vc3JFeGl0Q291bnRlcigpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZGF0YUxvZygiTi9BIik7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgfQog
CiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVk
KCkpIHsKICAgICAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwotI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBv
cHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOwotI2VuZGlmCisgICAgICAgIGlmIChs
b2dPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAi
LCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAg
aWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotI2lmIEVOQUJMRShK
SVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIE9TUiAiLCAqY29k
ZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsKLSNlbmRp
ZgorICAgIAorICAgIERGRzo6V29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUgPSBzdGFja0Zy
YW1lLnZtLT53b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShjb2RlQmxvY2spOworICAgIAorICAg
IC8vIFdlIGNhbm5vdCBiZSBpbiB0aGUgcHJvY2VzcyBvZiBhc3luY2hyb25vdXMgY29tcGlsYXRp
b24gYW5kIGFsc28gaGF2ZSBhbiBvcHRpbWl6ZWQKKyAgICAvLyByZXBsYWNlbWVudC4KKyAgICBS
RUxFQVNFX0FTU0VSVCgKKyAgICAgICAgISh3b3JrbGlzdFN0YXRlICE9IFdvcmtsaXN0OjpOb3RL
bm93biAmJiBjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpKTsKKyAgICAKKyAg
ICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgICAgIGNv
ZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsZWQpIHsK
KyAgICAgICAgaWYgKGxvZ09TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiSW5zdGFsbGluZyBk
ZWZlcnJlZCBjb21waWxhdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywgIi5cbiIpOworICAgICAgICAK
KyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gc3RhY2tGcmFtZS52bS0+d29ya2xp
c3QtPmNvbXBsZXRlKGNvZGVCbG9jayk7CisgICAgICAgIGlmIChsb2dPU1IoKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBy
ZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CisgICAgICAgIAorICAgICAgICBjb2RlQmxvY2stPnNl
dE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChyZXN1bHQpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgaWYgKGxvZ09TUigpKQorICAgICAgICAgICAgZGF0
YUxvZygiQ29uc2lkZXJpbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKSwgIi5cbiIpOwogICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9wdGltaXpl
ZCByZXBsYWNlbWVudCwgdGhlbiBpdCBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgd2UgZW50ZXJlZAog
ICAgICAgICAvLyBjdGlfb3B0aW1pemUgZnJvbSBhIGxvb3AuIFRoYXQncyBiZWNhdXNlIGlzIHRo
ZXJlJ3MgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LAogICAgICAgICAvLyB0aGVuIGFsbCBjYWxs
cyB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVsaW5rZWQgdG8gdGhlIHJlcGxhY2VtZW50IGFu
ZCBzbwpAQCAtOTQ1LDYwICs5NzQsMzkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0
aW1pemUpCiAgICAgICAgIC8vIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpIHRvIGFsd2F5
cyByZXR1cm4gdHJ1ZS4gQnV0IHdlIG1ha2UgaXQgZG8gc29tZQogICAgICAgICAvLyBhZGRpdGlv
bmFsIGNoZWNraW5nIGFueXdheSwgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgcmVjb21waWxhdGlv
biB0aHJhc2hpbmcuCiAgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNob3Vs
ZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpKSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
LSAgICAgICAgICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNv
ZGVCbG9jaywgIigiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiKSAoaW4gbG9vcCkuXG4i
KTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKGxvZ09TUigpKSB7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24g
b2YgIiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgIigiLCAqY29kZUJsb2NrLT5y
ZXBsYWNlbWVudCgpLCAiKSAoaW4gbG9vcCkuXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXpl
Tm93KCkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxv
ZygiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZvciAiLCAqY29kZUJsb2NrLCAiIChpbiBsb29wKSBi
ZWNhdXNlIG9mIGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iKTsKLSNlbmRpZgorICAgICAgICAg
ICAgaWYgKGxvZ09TUigpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICAgICAgICAgIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywKKyAgICAg
ICAgICAgICAgICAgICAgIiAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmls
aW5nLlxuIik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZygi
VHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7
Ci0jZW5kaWYKKyAgICAgICAgaWYgKGxvZ09TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiVHJp
Z2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAg
ICAgICAgIAogICAgICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKICAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZSwgcmVzdWx0LCBi
eXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvbigp
Ci0gICAgICAgICAgICB8fCBPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKQotICAgICAgICAgICAg
fHwgT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIGlmIChsb2dPU1IoKSkg
ewogICAgICAgICAgICAgZGF0YUxvZygiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKLSNpZiBFTkFCTEUoSklUX1ZFUkJP
U0VfT1NSKQotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBkYXRhTG9nKCJXQVJOSU5H
OiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZmFpbGVkIHdpdGggYSBKUyBlcnJvci5cbiIpOwotI2Vs
c2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYg
KGVycm9yKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IG9wdGltaXplZCBjb21w
aWxhdGlvbiBmYWlsZWQgd2l0aCBhIEpTIGVycm9yLlxuIik7CisgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVs
KSA9PSAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpICE9IGNvZGVCbG9jaykpOwotICAgICAgICBz
d2l0Y2ggKHJlc3VsdCkgewotICAgICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAgICAg
ICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
LSAgICAgICAgICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBmYWlsZWQu
XG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgp
ID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+ZG9udE9w
dGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBD
b21waWxhdGlvbkludmFsaWRhdGVkOgotICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICAgICAgICAgIC8vIFJldHJ5
IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KLSAgICAgICAgICAgIGNvZGVCbG9jay0+Y291bnRS
ZW9wdGltaXphdGlvbigpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjb2RlQmxvY2stPnNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChyZXN1bHQpOworICAg
ICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKQEAgLTEwMTQsMzIgKzEwMjIsMjgg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgfQogICAgIAogICAg
IGlmICh2b2lkKiBhZGRyZXNzID0gREZHOjpwcmVwYXJlT1NSRW50cnkoY2FsbEZyYW1lLCBvcHRp
bWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7Ci0gICAgICAgIGlmIChPcHRpb25zOjpz
aG93REZHRGlzYXNzZW1ibHkoKSkgeworICAgICAgICBpZiAobG9nT1NSKCkpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgIlBlcmZvcm1pbmcgT1NSICIsICpjb2RlQmxv
Y2ssICIgLT4gIiwgKm9wdGltaXplZENvZGVCbG9jaywgIiwgYWRkcmVzcyAiLAogICAgICAgICAg
ICAgICAgIFJhd1BvaW50ZXIoKFNUVUJfUkVUVVJOX0FERFJFU1MpLnZhbHVlKCkpLCAiIC0+ICIs
IFJhd1BvaW50ZXIoYWRkcmVzcyksICIuXG4iKTsKICAgICAgICAgfQotI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywg
IiBzdWNjZWVkZWQsIHBlcmZvcm1pbmcgT1NSIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJsb2Nr
LT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOwotI2VuZGlmCiAKICAgICAgICAg
Y29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJF
U1MoYWRkcmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJ
VF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIg
c3VjY2VlZGVkLCBPU1IgZmFpbGVkLCBhZnRlciBhIGRlbGF5IG9mICIsIGNvZGVCbG9jay0+b3B0
aW1pemF0aW9uRGVsYXlDb3VudGVyKCksICIuXG4iKTsKLSNlbmRpZgorCisgICAgaWYgKGxvZ09T
UigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyAiLCAqY29k
ZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksCisgICAgICAgICAgICAi
IHN1Y2NlZWRlZCwgT1NSIGZhaWxlZCwgYWZ0ZXIgYSBkZWxheSBvZiAiLAorICAgICAgICAgICAg
Y29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOworICAgIH0KIAog
ICAgIC8vIENvdW50IHRoZSBPU1IgZmFpbHVyZSBhcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUuIElm
IHRoaXMgaGFwcGVucyBhIGxvdCwgdGhlbgogICAgIC8vIHJlb3B0aW1pemUuCiAgICAgb3B0aW1p
emVkQ29kZUJsb2NrLT5jb3VudE9TUkV4aXQoKTsKICAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJP
U0VfT1NSKQotICAgIGRhdGFMb2coIkVuY291bnRlcmVkIE9TUiBmYWlsdXJlICIsICpjb2RlQmxv
Y2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIi5cbiIpOwotI2VuZGlmCi0K
ICAgICAvLyBXZSBhcmUgYSBsb3QgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgdHJpZ2dlcmluZyBy
ZW9wdGltaXphdGlvbiBhZnRlciBPU1IgZmFpbHVyZSB0aGFuCiAgICAgLy8gYmVmb3JlIGl0LiBJ
ZiB3ZSBlbnRlciB0aGUgb3B0aW1pemVfZnJvbV9sb29wIHRyaWdnZXIgd2l0aCBhIGJ1Y2tldCBm
dWxsIG9mIGZhaWwKICAgICAvLyBhbHJlYWR5LCB0aGVuIHdlIHJlYWxseSB3b3VsZCBsaWtlIHRv
IHJlb3B0aW1pemUgaW1tZWRpYXRlbHkuIEJ1dCB0aGlzIGNhc2UgY292ZXJzCkBAIC0xMDQ5LDkg
KzEwNTMsMTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgLy8g
cmlnaHQgbm93LiBTbywgd2Ugb25seSB0cmlnZ2VyIHJlb3B0aW1pemF0aW9uIG9ubHkgdXBvbiB0
aGUgbW9yZSBjb25zZXJ2YXRpdmUgKG5vbi1sb29wKQogICAgIC8vIHJlb3B0aW1pemF0aW9uIHRy
aWdnZXIuCiAgICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6ZU5vdygp
KSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZygiVHJpZ2dl
cmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2st
PnJlcGxhY2VtZW50KCksICIgKGFmdGVyIE9TUiBmYWlsKS5cbiIpOwotI2VuZGlmCisgICAgICAg
IGlmIChsb2dPU1IoKSkgeworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAi
VHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsCisgICAg
ICAgICAgICAgICAgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIiAoYWZ0ZXIgT1NSIGZhaWwp
LlxuIik7CisgICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCShyZXZpc2lvbiAxNTAzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgdihib29sLCBlbmFibGVMTFZNRmFzdElTZWwsIHRydWUpIFwKICAgICB2KHVuc2ln
bmVkLCBsbHZtT3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwKICAgICBcCisgICAgdihib29sLCBlbmFi
bGVDb25jdXJyZW50Q29tcGlsYXRpb24sIGZhbHNlKSBcCisgICAgXAogICAgIHYoYm9vbCwgZW5h
YmxlUHJvZmlsZXIsIGZhbHNlKSBcCiAgICAgXAogICAgIHYodW5zaWduZWQsIG1heGltdW1PcHRp
bWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxMDAwMCkgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUwMzM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3
IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5o
IgorI2luY2xkdWUgIkRGR1dvcmtsaXN0LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShSRUdFWFBf
VFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTUw
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNiArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBuYW1lc3BhY2UgREZHIHsKICAgICBjbGFzcyBMb25nTGl2ZWRTdGF0ZTsKKyAgICBjbGFz
cyBXb3JrbGlzdDsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKQEAgLTIwNyw3
ICsyMDgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGVhcCBoZWFwOwogICAgICAgICAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xpdmVkU3RhdGU+
IG1fZGZnU3RhdGU7CisgICAgICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBkZmdTdGF0
ZTsKKyAgICAgICAgUmVmUHRyPERGRzo6V29ya2xpc3Q+IHdvcmtsaXN0OwogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogCiAgICAgICAgIFZNVHlwZSB2bVR5cGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202222</attachid>
            <date>2013-05-18 17:30:57 -0700</date>
            <delta_ts>2013-05-18 22:33:28 -0700</delta_ts>
            <desc>it runs things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>49182</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMzQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDEzLTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBvbiBhIHNlcGFyYXRlIHRocmVh
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyODM5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVj
b2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVy
Ojpmb3JjZVNsb3dQYXRoKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlv
bkNvdW50ZXI6OnNldFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5oOgorICAgICAgICAoRXhlY3V0aW9uQ291bnRlcik6CisgICAgICAgICogZGZnL0RGR0Ry
aXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OlBsYW4pOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmtleSk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFu
Lmg6CisgICAgICAgIChQbGFuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OldvcmtsaXN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6fldvcmtsaXN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpXb3JrbGlzdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6Oldv
cmtsaXN0OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjplbnF1ZXVlKToK
KyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3Jr
bGlzdDo6Y29tcGxldGVBbGxGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJ1
blRocmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQXN5bmNocm9u
b3VzUGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnRocmVhZEZ1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjppbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpnbG9iYWxXb3JrbGlzdCk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0
Lmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFdvcmtsaXN0KToKKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpsb2dPU1IpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoVk0pOgor
CiAyMDEzLTA1LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
Zm91cnRoVGllcjogZ2V0Q1RJU3R1YiBzaG91bGQgYmUgdGhyZWFkLXNhZmUKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTAzMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzMxLDYgKzMzMSw4IEBACiAJCTBGREIyQ0UwMTc0MkQ4MDQwMDdCM0MxQiAv
KiBERkdQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkRCMkNEODE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0UyMTc0NkMxRkEwMDdCM0Mx
QiAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEQjJDRTExNzQ2QzFGODAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVz
dWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZEQjJDRTQxNzQ2Q0U5RjAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0UzMTc0NkNFOUQw
MDdCM0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgKi87IH07CisJCTBGREIyQ0U3MTc0ODMw
QTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xp
c3QuY3BwICovOyB9OworCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U2
MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wLmNwcCAqLzsgfTsKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVCMTQzNkFCMjMw
MDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTEzMzgsNiArMTM0MCw4IEBACiAJCTBGREIyQ0Q4MTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Bs
YW4uaDsgcGF0aCA9IGRmZy9ERkdQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGREIyQ0UxMTc0NkMxRjgwMDdCM0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb21waWxhdGlvblJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkRCMkNFMzE3NDZDRTlEMDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29tcGlsYXRpb25SZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV29ya2xpc3QuY3BwOyBwYXRo
ID0gZGZnL0RGR1dvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZE
QjJDRTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0Lmg7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBhdGggPSBkZmcvREZH
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1
bXAuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzAzMCw2ICszMDM0LDggQEAKIAkJCQkwRjg1QTMx
RTE2QUI3NkFFMDA3NzU3MUUgLyogREZHVmFyaWFkaWNGdW5jdGlvbi5oICovLAogCQkJCTBGRkZD
OTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyog
REZHV29ya2xpc3QuY3BwICovLAorCQkJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdX
b3JrbGlzdC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzU3Niw2ICszNTgyLDcgQEAKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0
NjAgLyogTm9kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDIwRTE2
RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZEQjJDRTgxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ0MzBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVyT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ0NDBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVyUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJEMzkzOTEwM0U0NTYwMDA3RENCNTIgLyogTnVtZXJp
Y1N0cmluZ3MuaCBpbiBIZWFkZXJzICovLApAQCAtNDM2Niw2ICs0MzczLDcgQEAKIAkJCQkxNDQ2
OURFODEwN0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAv
KiBGVExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5
Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTUwMzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNs
dWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiREZHUmVwYXRjaC5oIgorI2luY2x1ZGUgIkRGR1dv
cmtsaXN0LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTMwMjYsNiArMzAyNywxNCBAQCBpbnQzMl90
IENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1pCiAKIGJvb2wgQ29kZUJsb2NrOjpjaGVj
a0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCiB7CisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgaWYgKG1fdm0tPndvcmtsaXN0CisgICAgICAgICYmIG1fdm0tPndvcmtsaXN0LT5jb21w
aWxhdGlvblN0YXRlKHRoaXMpID09IERGRzo6V29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgICAg
IG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
I2VuZGlmCisgICAgCiAgICAgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CiB9CiAKQEAgLTMwMzcsNiArMzA0NiwxNSBAQCB2b2lk
IENvZGVCbG9jazo6b3B0aW1pemVOZXh0SW52b2NhdGlvbigpCiB2b2lkIENvZGVCbG9jazo6ZG9u
dE9wdGltaXplQW55dGltZVNvb24oKQogewogICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuZGVmZXJJ
bmRlZmluaXRlbHkoKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBUaGVyZSBp
cyBhIHJhY2UgaGVyZS4gV2UgbWF5IGJlZW4gY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIGNvbmN1cnJl
bnQKKyAgICAvLyBjb21waWxhdGlvbiB0aHJlYWQgY29tcGxldGVkLiBDaGVjayBpZiB0aGlzIGlz
IHRoZSBjYXNlLCBhbmQgaWYgc28sCisgICAgLy8gc3dpdGNoIHRvIG9wdGltaXppbmcgdGhlIG5l
eHQgaW52b2NhdGlvbi4KKyAgICBpZiAobV92bS0+d29ya2xpc3QKKyAgICAgICAgJiYgbV92bS0+
d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUodGhpcykgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGls
ZWQpCisgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKKyNlbmRpZgogfQogCiB2b2lk
IENvZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCgpCkBAIC0zMDU0LDYgKzMwNzIsMzUgQEAg
dm9pZCBDb2RlQmxvY2s6Om9wdGltaXplU29vbigpCiAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5z
ZXROZXdUaHJlc2hvbGQoY291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uKCksIHRoaXMpOwogfQog
Cit2b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgp
Cit7CisgICAgbV9qaXRFeGVjdXRlQ291bnRlci5mb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29t
cGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpID09IChyZXBsYWNlbWVu
dCgpICE9IHRoaXMpKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgQ29tcGlsYXRp
b25TdWNjZXNzZnVsOgorICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpKSk7CisgICAgICAgIG9wdGltaXplTmV4
dEludm9jYXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CisgICAgICAgIGRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlk
YXRlZDoKKyAgICAgICAgLy8gUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLgorICAgICAg
ICBjb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjaWYgRU5BQkxFKEpJVCkK
IHVpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3Qg
ZGVzaXJlZFRocmVzaG9sZCkKIHsKQEAgLTMxMTIsNyArMzE1OSw3IEBAIEFycmF5UHJvZmlsZSog
Q29kZUJsb2NrOjpnZXRPckFkZEFycmF5UHIKIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVk
aWN0aW9uc0FuZENvdW50TGl2ZW5lc3MoCiAgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRp
b24sIHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2ln
bmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKQogewotICAgIENvZGVCbG9ja0xvY2sgbG9j
a2VyKG1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAog
ICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7CiAgICAgbnVtYmVy
T2ZTYW1wbGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRoaXMgZGl2aWRlZCBieSBWYWx1ZVByb2Zp
bGU6Om51bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgdGhlbiB2
YWx1ZSBwcm9maWxlcyBhcmUgZnVsbC4KQEAgLTMxNDQsNyArMzE5MSw3IEBAIHZvaWQgQ29kZUJs
b2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmUKIAogdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFs
bEFycmF5UHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24pCiB7Ci0gICAg
Q29kZUJsb2NrTG9jayBsb2NrZXIobV9sb2NrKTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9hcnJheVByb2ZpbGVzLnNp
emUoKTsgaS0tOykKICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2ldLmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihsb2NrZXIsIHRoaXMsIG9wZXJhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTAzMzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2
NSw2ICs4NjUsMTAgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDbwog
ICAgICAgICAvLyB0byB0cmlnZ2VyIG9wdGltaXphdGlvbiBpZiBvbmUgb2YgdGhvc2UgZnVuY3Rp
b25zIGJlY29tZXMgaG90CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAg
ICB2b2lkIG9wdGltaXplU29vbigpOworICAgIAorICAgICAgICB2b2lkIGZvcmNlT3B0aW1pemF0
aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKKyAgICAKKyAgICAgICAgdm9pZCBzZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQp
OwogICAgICAgICAKICAgICAgICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJl
dHVybiBtX29zckV4aXRDb3VudGVyOyB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24g
MTUwMzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMSBAQCBFeGVjdXRpb25Db3VudGVy
OjpFeGVjdXRpb25Db3VudGVyKCkKICAgICByZXNldCgpOwogfQogCit2b2lkIEV4ZWN1dGlvbkNv
dW50ZXI6OmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKQoreworICAgIG1fY291bnRlciA9IDA7
Cit9CisKIGJvb2wgRXhlY3V0aW9uQ291bnRlcjo6Y2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRT
ZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaWYgKGhhc0Nyb3NzZWRUaHJlc2hvbGQo
Y29kZUJsb2NrKSkKQEAgLTEyNCwxMSArMTI5LDExIEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjo6
c2V0VGhyZXNob2xkKENvZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAgICAg
Ci0gICAgQVNTRVJUKCFoYXNDcm9zc2VkVGhyZXNob2xkKGNvZGVCbG9jaykpOworICAgIEFTU0VS
VCghbV9hY3RpdmVUaHJlc2hvbGQgfHwgIWhhc0Nyb3NzZWRUaHJlc2hvbGQoY29kZUJsb2NrKSk7
CiAgICAgICAgIAogICAgIC8vIENvbXB1dGUgdGhlIHRydWUgdG90YWwgY291bnQuCiAgICAgZG91
YmxlIHRydWVUb3RhbENvdW50ID0gY291bnQoKTsKLSAgICAgICAgCisgICAgCiAgICAgLy8gQ29y
cmVjdCB0aGUgdGhyZXNob2xkIGZvciBjdXJyZW50IG1lbW9yeSB1c2FnZS4KICAgICBkb3VibGUg
dGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3MobV9hY3RpdmVUaHJlc2hvbGQs
IGNvZGVCbG9jayk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCShyZXZpc2lvbiAxNTAzMzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEV4ZWN1dGlvbkNv
dW50ZXIgewogcHVibGljOgogICAgIEV4ZWN1dGlvbkNvdW50ZXIoKTsKKyAgICB2b2lkIGZvcmNl
U2xvd1BhdGhDb25jdXJyZW50bHkoKTsgLy8gSWYgeW91IHVzZSB0aGlzLCBjaGVja0lmVGhyZXNo
b2xkQ3Jvc3NlZEFuZFNldCgpIG1heSBzdGlsbCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBjaGVj
a0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqKTsKICAgICB2b2lkIHNldE5ld1Ro
cmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CiAgICAgdm9pZCBkZWZlcklu
ZGVmaW5pdGVseSgpOwpAQCAtNzQsNyArNzUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXQo
KTsKIAogcHVibGljOgotCiAgICAgLy8gTkIuIFRoZXNlIGFyZSBpbnRlbnRpb25hbGx5IHB1Ymxp
YyBiZWNhdXNlIGl0IHdpbGwgYmUgbW9kaWZpZWQgZnJvbSBtYWNoaW5lIGNvZGUuCiAgICAgCiAg
ICAgLy8gVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIGJ5IHRoZSBKSVQgb3IgTExJbnQuIEl0
IHN0YXJ0cyBvdXQgbmVnYXRpdmUgYW5kIGlzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUwMzM5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3MCw3ICsyNzAsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbi5i
eXRlY29kZUluZGV4ID09IG1fY3VycmVudEluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrTG9jayBs
b2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAg
ICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+bV9sb2NrKTsKICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3Vy
cmVudEluZGV4LCBub2RlLT5sb2NhbCgpKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24obG9ja2Vy
LCBrZXkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKQEAgLTgzOSw3ICs4MzksNyBA
QCBwcml2YXRlOgogICAgIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxl
KiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbikKICAgICB7Ci0gICAgICAgIENvZGVCbG9j
a0xvY2sgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPm1fbG9jayk7CiAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAg
IHJldHVybiBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2NrZXIsIHByb2ZpbGUsIGFjdGlvbiwg
ZmFsc2UpOwogICAgIH0KQEAgLTg1MSw3ICs4NTEsNyBAQCBwcml2YXRlOgogICAgIAogICAgIEFy
cmF5TW9kZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJvZmlsZSwg
QXJyYXk6OkFjdGlvbiBhY3Rpb24sIE5vZGUqIGJhc2UpCiAgICAgewotICAgICAgICBDb2RlQmxv
Y2tMb2NrIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICAKICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
CShyZXZpc2lvbiAxNTAzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxMyBAQAogI2luY2x1ZGUgIkRGR0pJ
VENvZGUuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVGh1bmtzLmgiCisj
aW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRl
ICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9wdGlvbnMu
aCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTY4LDE3ICs3MCwxOSBAQCBz
dGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxlCiAgICAgaWYgKGxvZ0NvbXBp
bGF0aW9uQ2hhbmdlcygpKQogICAgICAgICBkYXRhTG9nKCJERkcgY29tcGlsaW5nICIsICpjb2Rl
QmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0
aW9uQ291bnQoKSwgIlxuIik7CiAgICAgCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAK
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRv
IHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBh
bCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVh
ZC4KLSAgICBleGVjLT52bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1
bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxU
aHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1
bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0
VGh1bmtHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cik7CisgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOworICAg
IHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgIHZtLmdl
dENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1Yih2
aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwogI2lmIEVOQUJMRShGVExfSklUKQotICAg
IGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihGVEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IpOworICAgIHZtLmdldENUSVN0dWIoRlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJh
dG9yKTsKICNlbmRpZgogICAgIAogICAgIC8vIERlcml2ZSBvdXIgc2V0IG9mIG11c3QtaGFuZGxl
IHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11c3QgYmUgYXQgbGVhc3QgY29uc2VydmF0aXZlCkBA
IC0xMDUsNyArMTA5LDE2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKENvbXBp
bGUKICAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNr
ZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKICAgICB9CiAgICAgCi0gICAgcGxhbi0+Y29tcGlsZUlu
VGhyZWFkKCk7CisgICAgaWYgKE9wdGlvbnM6OmVuYWJsZUNvbmN1cnJlbnRDb21waWxhdGlvbigp
KSB7CisgICAgICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coIkRlZmVycmluZyBERkcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7
CisgICAgICAgIGlmICghdm0ud29ya2xpc3QpCisgICAgICAgICAgICB2bS53b3JrbGlzdCA9IGds
b2JhbFdvcmtsaXN0KCk7CisgICAgICAgIHZtLndvcmtsaXN0LT5lbnF1ZXVlKHBsYW4pOworICAg
ICAgICByZXR1cm4gQ29tcGlsYXRpb25EZWZlcnJlZDsKKyAgICB9CisgICAgCisgICAgcGxhbi0+
Y29tcGlsZUluVGhyZWFkKCp2bS5kZmdTdGF0ZSk7CiAgICAgcmV0dXJuIHBsYW4tPmZpbmFsaXpl
KGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTAzMzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsMTIgKzQ0LDEy
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAjdW5kZWYgU1RSSU5HSVpF
X0RGR19PUF9FTlVNCiB9OwogCi1HcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuKQorR3Jh
cGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdmVkU3RhdGUmIGxvbmdMaXZlZFN0
YXRlKQogICAgIDogbV92bSh2bSkKICAgICAsIG1fcGxhbihwbGFuKQogICAgICwgbV9jb2RlQmxv
Y2sobV9wbGFuLmNvZGVCbG9jay5nZXQoKSkKICAgICAsIG1fcHJvZmlsZWRCbG9jayhtX2NvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSkKLSAgICAsIG1fYWxsb2NhdG9yKHZtLm1fZGZnU3RhdGUtPm1f
YWxsb2NhdG9yKQorICAgICwgbV9hbGxvY2F0b3IobG9uZ0xpdmVkU3RhdGUubV9hbGxvY2F0b3Ip
CiAgICAgLCBtX2hhc0FyZ3VtZW50cyhmYWxzZSkKICAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZv
cmVGaXhwb2ludCkKICAgICAsIG1fZm9ybShMb2FkU3RvcmUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTAzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgZW51
bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBp
biB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIHsKIHB1YmxpYzoKLSAg
ICBHcmFwaChWTSYsIFBsYW4mKTsKKyAgICBHcmFwaChWTSYsIFBsYW4mLCBMb25nTGl2ZWRTdGF0
ZSYpOwogICAgIH5HcmFwaCgpOwogICAgIAogICAgIHZvaWQgY2hhbmdlQ2hpbGQoRWRnZSYgZWRn
ZSwgTm9kZSogbmV3Tm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkocmV2aXNpb24gMTUwMzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBQbGFuOjpQbGFuKAogICAgICwg
bXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhW
YWx1ZXMpCiAgICAgLCBjb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oY29kZUJsb2NrLT52
bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2su
Z2V0KCkpLCBQcm9maWxlcjo6REZHKSkgOiAwKQogICAgICwgaWRlbnRpZmllcnMoY29kZUJsb2Nr
LmdldCgpKQorICAgICwgaXNDb21waWxlZChmYWxzZSkKIHsKIH0KIApAQCAtODUsMTIgKzg2LDEy
IEBAIFBsYW46On5QbGFuKCkKIHsKIH0KIAotdm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoKQor
dm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUmIGxvbmdMaXZlZFN0YXRl
KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24g
KFBsYW4pIik7CiAgICAgQ29tcGlsYXRpb25TY29wZSBjb21waWxhdGlvblNjb3BlOwogCi0gICAg
R3JhcGggZGZnKHZtLCAqdGhpcyk7CisgICAgR3JhcGggZGZnKHZtLCAqdGhpcywgbG9uZ0xpdmVk
U3RhdGUpOwogICAgIAogICAgIGlmICghcGFyc2UoZGZnKSkgewogICAgICAgICBmaW5hbGl6ZXIg
PSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKCp0aGlzKSk7CkBAIC0xOTksNiArMjAwLDEx
IEBAIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplKFJlZlB0cjwKICAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCitDb2RlQmxvY2sqIFBsYW46OmtleSgpCit7Cisg
ICAgcmV0dXJuIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTUwMzM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgY2xh
c3MgQ29kZUJsb2NrOwogCiBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgTG9uZ0xpdmVkU3RhdGU7
CisKIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9Owog
CiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC01MywxMCArNTUsMTIgQEAgc3RydWN0IFBsYW4gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgICAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKICAgICB+UGxhbigpOwogICAg
IAotICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCk7CisgICAgdm9pZCBjb21waWxlSW5UaHJlYWQo
TG9uZ0xpdmVkU3RhdGUmKTsKICAgICAKICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZShS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spOwogICAgIAorICAgIENvZGVCbG9jayoga2V5KCk7CisgICAgCiAg
ICAgY29uc3QgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGU7CiAgICAgVk0mIHZtOwogICAgIFJlZlB0
cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKQEAgLTcxLDYgKzc1LDggQEAgc3RydWN0IFBsYW4gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIERlc2lyZWRXYXRjaHBvaW50cyB3YXRjaHBv
aW50czsKICAgICBEZXNpcmVkSWRlbnRpZmllcnMgaWRlbnRpZmllcnM7CiAgICAgRGVzaXJlZFN0
cnVjdHVyZUNoYWlucyBjaGFpbnM7CisgICAgCisgICAgYm9vbCBpc0NvbXBpbGVkOwogCiBwcml2
YXRlOgogICAgIGJvb2wgaXNTdGlsbFZhbGlkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1dvcmtsaXN0OjpXb3Jr
bGlzdCgpCit7Cit9CisKK1dvcmtsaXN0Ojp+V29ya2xpc3QoKQoreworICAgIG1fcXVldWUuYXBw
ZW5kKG51bGxwdHIpOyAvLyBVc2UgbnVsbCBwbGFuIHRvIGluZGljYXRlIHRoYXQgd2Ugd2FudCB0
aGUgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KKyAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3Ro
cmVhZCk7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmZpbmlzaENyZWF0aW9uKCkKK3sKKyAgICBtX3Ro
cmVhZCA9IGNyZWF0ZVRocmVhZCh0aHJlYWRGdW5jdGlvbiwgdGhpcywgIkpTQyBDb21waWxhdGlv
biBUaHJlYWQiKTsKK30KKworUGFzc1JlZlB0cjxXb3JrbGlzdD4gV29ya2xpc3Q6OmNyZWF0ZSgp
Cit7CisgICAgUmVmUHRyPFdvcmtsaXN0PiByZXN1bHQgPSBhZG9wdFJlZihuZXcgV29ya2xpc3Qo
KSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbigpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgV29ya2xpc3Q6OmVucXVldWUoUGFzc1JlZlB0cjxQbGFuPiBwYXNzZWRQbGFuKQor
eworICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gcGFzc2VkUGxhbjsKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICBBU1NFUlQobV9wbGFucy5maW5kKHBsYW4tPmtleSgpKSA9PSBt
X3BsYW5zLmVuZCgpKTsKKyAgICBtX3BsYW5zLmFkZChwbGFuLT5rZXkoKSwgcGxhbik7CisgICAg
bV9xdWV1ZS5hcHBlbmQocGxhbik7CisgICAgbV9jb25kaXRpb24uYnJvYWRjYXN0KCk7Cit9CisK
K0NvbXBpbGF0aW9uUmVzdWx0IFdvcmtsaXN0Ojpjb21wbGV0ZUFuZFNjaGVkdWxlT1NSKENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaykKK3sKKyAgICBSZWZQdHI8UGxhbj4gcGxhbjsKKyAgICAKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBwbGFuID0g
bV9wbGFucy50YWtlKHByb2ZpbGVkQmxvY2spOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxh
bik7CisgICAgQVNTRVJUKHBsYW4tPmlzQ29tcGlsZWQpOworICAgIAorICAgIENvbXBpbGF0aW9u
UmVzdWx0IHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6
ZWRDb2RlKHBsYW4pOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCAhPSBDb21waWxh
dGlvbkRlZmVycmVkKTsKKyAgICBwcm9maWxlZEJsb2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hv
bGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitXb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUoQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgIFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmZpbmQocHJvZmlsZWRCbG9j
ayk7CisgICAgaWYgKGl0ZXIgPT0gbV9wbGFucy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIE5vdEtu
b3duOworICAgIHJldHVybiBpdGVyLT52YWx1ZS0+aXNDb21waWxlZCA/IENvbXBpbGVkIDogQ29t
cGlsaW5nOworfQorCitWZWN0b3I8UmVmUHRyPENvZGVCbG9jaz4gPiBXb3JrbGlzdDo6d2FpdFVu
dGlsQWxsRm9yVk1BcmVDb21wbGV0ZShWTSYgdm0pCit7CisgICAgLy8gV2FpdCBmb3IgYWxsIG9m
IHRoZSBwbGFucyBmb3IgdGhlIGdpdmVuIFZNIHRvIGNvbXBsZXRlLCBhbmQgY29sbGVjdCB0aGUK
KyAgICAvLyBDb2RlQmxvY2sqJ3MgdGhhdCBhcmUgdGhlIGtleXMgdG8gdGhvc2UgcGxhbnMuIFRo
ZSBpZGVhIGhlcmUgaXMgdGhhdCB3ZQorICAgIC8vIHdhbnQgYWxsIG9mIHRoZSBjYWxsZXIgVk0n
cyBwbGFucyB0byBiZSBkb25lLiBXZSBkb24ndCBjYXJlIGFib3V0IGFueQorICAgIC8vIG90aGVy
IFZNJ3MgcGxhbnMsIGFuZCB3ZSB3b24ndCBhdHRlbXB0IHRvIGNvbXBsZXRlIHRob3NlLiBBZnRl
ciB3ZQorICAgIC8vIHJlbGVhc2UgdGhpcyBsb2NrLCB3ZSBrbm93IHRoYXQgYWx0aG91Z2ggb3Ro
ZXIgVk1zIG1heSBzdGlsbCBiZSBhZGRpbmcKKyAgICAvLyBwbGFucywgb3VyIFZNIHdpbGwgbm90
IGJlLgorICAgIFZlY3RvcjxSZWZQdHI8Q29kZUJsb2NrPiA+IGtleUJsb2NrczsKKyAgICB7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICBib29sIGFsbEFyZUNvbXBsZXRlZCA9IHRydWU7CisgICAgICAgICAgICBQbGFu
TWFwOjppdGVyYXRvciBlbmQgPSBtX3BsYW5zLmVuZCgpOworICAgICAgICAgICAgZm9yIChQbGFu
TWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CisgICAgICAgICAgICAgICAgaWYgKCZpdGVyLT52YWx1ZS0+dm0gIT0gJnZtKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVl
LT5pc0NvbXBpbGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsbEFyZUNvbXBsZXRlZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChhbGxBcmVDb21wbGV0ZWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY29u
ZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGxhbk1h
cDo6aXRlcmF0b3IgZW5kID0gbV9wbGFucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbGFuTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgICAgICBpZiAoJml0ZXItPnZhbHVlLT52bSAhPSAmdm0pCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBrZXlCbG9ja3MuYXBwZW5kKGl0ZXItPmtleSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGtleUJsb2NrczsKK30KKwordm9pZCBXb3JrbGlzdDo6
Y29tcGxldGVBbGxGb3JWTShWTSYgdm0pCit7CisgICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+
ID4ga2V5QmxvY2tzID0gd2FpdFVudGlsQWxsRm9yVk1BcmVDb21wbGV0ZSh2bSk7CisgICAgCisg
ICAgLy8gTm93IGNvbXBsZXRlIGFsbCBvZiB0aGUgcGxhbnMgZm9yIHRoaXMgVk0uCisgICAgZm9y
ICh1bnNpZ25lZCBpID0ga2V5QmxvY2tzLnNpemUoKTsgaS0tOykKKyAgICAgICAgY29tcGxldGVB
bmRTY2hlZHVsZU9TUihrZXlCbG9ja3NbaV0uZ2V0KCkpOworfQorCit2b2lkIFdvcmtsaXN0Ojpy
dW5UaHJlYWQoKQoreworICAgIExvbmdMaXZlZFN0YXRlIGxvbmdMaXZlZFN0YXRlOworICAgIAor
ICAgIGZvciAoOzspIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW47CisgICAgICAgIHsKKyAg
ICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICAgICAgd2hpbGUg
KG1fcXVldWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9s
b2NrKTsKKyAgICAgICAgICAgIHBsYW4gPSBtX3F1ZXVlLnRha2VGaXJzdCgpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoIXBsYW4pCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQobG9uZ0xpdmVkU3RhdGUpOworICAg
ICAgICBjb21wbGV0ZUFzeW5jaHJvbm91c1BsYW4ocGxhbi5nZXQoKSk7CisgICAgfQorfQorCit2
b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFzeW5jaHJvbm91c1BsYW4oUGxhbiogcGxhbikKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBwbGFuLT5rZXkoKS0+Zm9yY2VPcHRp
bWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpOworICAgIHBsYW4tPmlzQ29tcGlsZWQgPSB0
cnVlOworICAgIG1fY29uZGl0aW9uLmJyb2FkY2FzdCgpOworfQorCit2b2lkIFdvcmtsaXN0Ojp0
aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCkKK3sKKyAgICBzdGF0aWNfY2FzdDxXb3JrbGlz
dCo+KGFyZ3VtZW50KS0+cnVuVGhyZWFkKCk7Cit9CisKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBp
bml0aWFsaXplR2xvYmFsV29ya2xpc3RLZXlPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CitzdGF0
aWMgV29ya2xpc3QqIHRoZUdsb2JhbFdvcmtsaXN0OworCitzdGF0aWMgdm9pZCBpbml0aWFsaXpl
R2xvYmFsV29ya2xpc3RPbmNlKCkKK3sKKyAgICB0aGVHbG9iYWxXb3JrbGlzdCA9IFdvcmtsaXN0
OjpjcmVhdGUoKS5sZWFrUmVmKCk7Cit9CisKK1dvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpCit7
CisgICAgcHRocmVhZF9vbmNlKCZpbml0aWFsaXplR2xvYmFsV29ya2xpc3RLZXlPbmNlLCBpbml0
aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKTsKKyAgICByZXR1cm4gdGhlR2xvYmFsV29ya2xpc3Q7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdXb3JrbGlzdF9oCisjZGVmaW5lIERGR1dvcmts
aXN0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdQbGFuLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgV29ya2xpc3QgOiBw
dWJsaWMgUmVmQ291bnRlZDxXb3JrbGlzdD4geworcHVibGljOgorICAgIH5Xb3JrbGlzdCgpOwor
ICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtsaXN0PiBjcmVhdGUoKTsKKyAgICAKKyAg
ICB2b2lkIGVucXVldWUoUGFzc1JlZlB0cjxQbGFuPik7CisgICAgCisgICAgLy8gVGhpcyBpcyBl
cXVpdmFsZW50IHRvOgorICAgIC8vIFZlY3RvcjxSZWZQdHI8Q29kZUJsb2NrPiA+IGJsb2NrcyA9
IHdvcmtsaXN0LT53YWl0VW50aWxBbGxGb3JWTUFyZUNvbXBsZXRlKHZtKTsKKyAgICAvLyBmb3Ig
KENvZGVCbG9jayogYmxvY2sgaW4gYmxvY2tzKQorICAgIC8vICAgICB3b3JrbGlzdC0+Y29tcGxl
dGVBbmRTY2hlZHVsZU9TUihibG9jayk7CisgICAgdm9pZCBjb21wbGV0ZUFsbEZvclZNKFZNJik7
CisgICAgCisgICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+ID4gd2FpdFVudGlsQWxsRm9yVk1B
cmVDb21wbGV0ZShWTSYpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBsZXRlQW5kU2NoZWR1
bGVPU1IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKTsKKyAgICAKKyAgICBlbnVtIFN0YXRlIHsg
Tm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKKyAgICBTdGF0ZSBjb21waWxhdGlvblN0
YXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jayk7CisgICAgCitwcml2YXRlOgorICAgIFdvcmts
aXN0KCk7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbigpOworICAgIAorICAgIHZvaWQgcnVuVGhy
ZWFkKCk7CisgICAgc3RhdGljIHZvaWQgdGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOwor
ICAgIAorICAgIHZvaWQgY29tcGxldGVBc3luY2hyb25vdXNQbGFuKFBsYW4qKTsKKworICAgIERl
cXVlPFJlZlB0cjxQbGFuPiA+IG1fcXVldWU7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxD
b2RlQmxvY2s+LCBSZWZQdHI8UGxhbj4gPiBQbGFuTWFwOworICAgIFBsYW5NYXAgbV9wbGFuczsK
KyAgICBNdXRleCBtX2xvY2s7CisgICAgLy8gV2UgYnJvYWRjYXN0IG9uIHRoaXMgY29uZGl0aW9u
IHdoZW5ldmVyOgorICAgIC8vIC0gU29tZXRoaW5nIGlzIGVucXVldWVkLgorICAgIC8vIC0gU29t
ZXRoaW5nIGlzIGNvbXBsZXRlZC4KKyAgICBUaHJlYWRDb25kaXRpb24gbV9jb25kaXRpb247Cisg
ICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZDsKK307CisKKy8vIEZvciBub3cgd2UgdXNlIGEg
c2luZ2xlIGdsb2JhbCB3b3JrbGlzdC4gSXQncyBub3QgY2xlYXIgdGhhdCB0aGlzCisvLyBpcyB0
aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBpdCBpcyB3aGF0IHdlIGRvLCBmb3Igbm93LiBUaGlz
IGZ1bmN0aW9uCisvLyB3aWxsIGxhemlseSBjcmVhdGUgb25lIHdoZW4gaXQncyBuZWVkZWQuIEN1
cnJlbnRseSB0aGlzIGlzIG9ubHkgY2FsbGVkCisvLyBmcm9tIERGR0RyaXZlci5jcHAsIHdoZW4g
aXQgYWN0dWFsbHkgd2FudHMgdG8gZW5xdWV1ZSBzb21ldGhpbmcuCitXb3JrbGlzdCogZ2xvYmFs
V29ya2xpc3QoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdXb3JrbGlzdF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTAzMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3Qu
aCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwUm9vdFZp
c2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpAQCAtNzAzLDggKzcwNCwyNSBA
QCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgQVNTRVJUKG1f
aXNTYWZlVG9Db2xsZWN0KTsKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwogICAgIFJF
TEVBU0VfQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7CisgICAg
CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+ID4ga2V5
QmxvY2tzOworICAgIGlmIChtX3ZtLT53b3JrbGlzdCkKKyAgICAgICAga2V5QmxvY2tzID0gbV92
bS0+d29ya2xpc3QtPndhaXRVbnRpbEFsbEZvclZNQXJlQ29tcGxldGUoKm1fdm0pOworI2VuZGlm
CisgICAgCiAgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKIAorI2lmIEVO
QUJMRShERkdfSklUKQorICAgIC8vIERvIHRoZSBjb21wbGV0aW9uIHdoaWxlIGluZGljYXRpbmcg
dGhhdCB3ZSdyZSBpbiB0aGUgR0MsIHNvIHRoYXQgd2UKKyAgICAvLyBkb24ndCB0cnkgdG8gcmVj
dXJzaXZlbHkgR0MuCisgICAgaWYgKG1fdm0tPndvcmtsaXN0KSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGtleUJsb2Nrcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBtX3ZtLT53b3Jr
bGlzdC0+Y29tcGxldGVBbmRTY2hlZHVsZU9TUihrZXlCbG9ja3NbaV0uZ2V0KCkpOworICAgIH0K
KyAgICBrZXlCbG9ja3MucmVzaXplKDApOworI2VuZGlmCisgICAgCiAgICAgbV9hY3Rpdml0eUNh
bGxiYWNrLT53aWxsQ29sbGVjdCgpOwogCiAgICAgZG91YmxlIGxhc3RHQ1N0YXJ0VGltZSA9IFdU
Rjo6Y3VycmVudFRpbWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDE1MDMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEluY3JlbWVudGFsU3dlZXBlciogc3dlZXBlcigpOwogCisgICAgICAg
IC8vIHRydWUgaWYgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcworICAgICAgICBpbmxpbmUgYm9v
bCBpc0NvbGxlY3RpbmcoKTsKICAgICAgICAgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9uIG9yIGNv
bGxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MKICAgICAgICAgaW5saW5lIGJvb2wgaXNCdXN5KCk7CiAg
ICAgICAgIApAQCAtMjkzLDYgKzI5NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0
dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbjsKICAgICB9CiAKKyAgICBi
b29sIEhlYXA6OmlzQ29sbGVjdGluZygpCisgICAgeworICAgICAgICByZXR1cm4gbV9vcGVyYXRp
b25JblByb2dyZXNzID09IENvbGxlY3Rpb247CisgICAgfQorCiAgICAgaW5saW5lIEhlYXAqIEhl
YXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgcmV0dXJuIE1hcmtl
ZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aGVhcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1MDMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAj
aW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgog
I2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNs
dWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKQEAgLTg5OCw2ICs4OTksMTMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oRW5jb2RlZEpTVmFsdWUsIG9wXwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCitzdGF0aWMg
Ym9vbCBsb2dPU1IoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24o
KQorICAgICAgICB8fCBPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRp
b25zOjpzaG93REZHRGlzYXNzZW1ibHkoKTsKK30KKwogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemUpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpA
QCAtOTA2LDMxICs5MTQsNTUgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUp
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAot
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZygKLSAgICAgICAgKmNvZGVC
bG9jaywgIjogRW50ZXJlZCBvcHRpbWl6ZSB3aXRoIGJ5dGVjb2RlSW5kZXggPSAiLCBieXRlY29k
ZUluZGV4LAotICAgICAgICAiLCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+aml0RXhl
Y3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwg
Y29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLAotICAgICAgICAiLCBleGl0
Q291bnRlciA9ICIpOwotICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50
KCkpCi0gICAgICAgIGRhdGFMb2coY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5vc3JFeGl0Q291
bnRlcigpKTsKLSAgICBlbHNlCi0gICAgICAgIGRhdGFMb2coIk4vQSIpOwotICAgIGRhdGFMb2co
IlxuIik7Ci0jZW5kaWYKKyAgICBpZiAobG9nT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgb3B0aW1pemUgd2l0aCBieXRlY29kZUlu
ZGV4ID0gIiwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgICIsIGV4ZWN1dGVDb3VudGVyID0g
IiwgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpLAorICAgICAgICAgICAgIiwgb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyID0gIiwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcigpLAorICAgICAgICAgICAgIiwgZXhpdENvdW50ZXIgPSAiKTsKKyAgICAgICAgaWYgKGNv
ZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIGRhdGFMb2co
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5vc3JFeGl0Q291bnRlcigpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZGF0YUxvZygiTi9BIik7CisgICAgICAgIGRhdGFMb2coIlxuIik7Cisg
ICAgfQogCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRS
ZWFjaGVkKCkpIHsKICAgICAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwot
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5v
dCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOwotI2VuZGlmCisgICAgICAg
IGlmIChsb2dPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBvcHRp
bWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
Ci0gICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIE9TUiAi
LCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsK
LSNlbmRpZgorICAgIAorICAgIERGRzo6V29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7Cisg
ICAgaWYgKHN0YWNrRnJhbWUudm0tPndvcmtsaXN0KQorICAgICAgICB3b3JrbGlzdFN0YXRlID0g
c3RhY2tGcmFtZS52bS0+d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoY29kZUJsb2NrKTsKKyAg
ICBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBERkc6OldvcmtsaXN0OjpOb3RLbm93bjsK
KyAgICAKKyAgICAvLyBXZSBjYW5ub3QgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgYXN5bmNocm9ub3Vz
IGNvbXBpbGF0aW9uIGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1pemVkCisgICAgLy8gcmVwbGFjZW1l
bnQuCisgICAgUkVMRUFTRV9BU1NFUlQoCisgICAgICAgICEod29ya2xpc3RTdGF0ZSAhPSBERkc6
OldvcmtsaXN0OjpOb3RLbm93biAmJiBjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50
KCkpKTsKKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6OldvcmtsaXN0OjpDb21w
aWxpbmcpIHsKKyAgICAgICAgY29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IERG
Rzo6V29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgICAgIGlmIChsb2dPU1IoKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkluc3RhbGxpbmcgZGVmZXJyZWQgY29tcGlsYXRpb24gZm9yICIsICpjb2Rl
QmxvY2ssICIuXG4iKTsKKyAgICAgICAgCisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IHN0YWNrRnJhbWUudm0tPndvcmtsaXN0LT5jb21wbGV0ZUFuZFNjaGVkdWxlT1NSKGNvZGVC
bG9jayk7CisgICAgICAgIGlmIChsb2dPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRlZmVy
cmVkIG9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiByZXN1bHQ6ICIs
IHJlc3VsdCwgIlxuIik7CisgICAgICAgIAorICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0
aW9uU3VjY2Vzc2Z1bCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGNvZGVC
bG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICBpZiAobG9nT1NSKCkp
CisgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAt
PiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7CiAgICAgICAgIC8vIElmIHdl
IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0aGVuIGl0IG11c3QgYmUgdGhlIGNhc2Ug
dGhhdCB3ZSBlbnRlcmVkCiAgICAgICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEgbG9vcC4gVGhh
dCdzIGJlY2F1c2UgaXMgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsCiAgICAgICAg
IC8vIHRoZW4gYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZWxpbmtlZCB0byB0
aGUgcmVwbGFjZW1lbnQgYW5kIHNvCkBAIC05NDUsNjAgKzk3NywzOSBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgLy8gc2hvdWxkUmVvcHRpbWl6ZUZyb21M
b29wTm93KCkgdG8gYWx3YXlzIHJldHVybiB0cnVlLiBCdXQgd2UgbWFrZSBpdCBkbyBzb21lCiAg
ICAgICAgIC8vIGFkZGl0aW9uYWwgY2hlY2tpbmcgYW55d2F5LCB0byByZWR1Y2UgdGhlIGFtb3Vu
dCBvZiByZWNvbXBpbGF0aW9uIHRocmFzaGluZy4KICAgICAgICAgaWYgKGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKS0+c2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkpIHsKLSNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyByZW9wdGlt
aXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiKCIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCks
ICIpIChpbiBsb29wKS5cbiIpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAobG9nT1NSKCkpIHsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiVHJpZ2dlcmlu
ZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAi
KCIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIpIChpbiBsb29wKS5cbiIpOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWNvZGVCbG9j
ay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0g
ICAgICAgICAgICBkYXRhTG9nKCJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICIsICpjb2RlQmxv
Y2ssICIgKGluIGxvb3ApIGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHByb2ZpbGluZy5cbiIpOwot
I2VuZGlmCisgICAgICAgICAgICBpZiAobG9nT1NSKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKAorICAgICAgICAgICAgICAgICAgICAiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZvciAiLCAq
Y29kZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAiIChpbiBsb29wKSBiZWNhdXNlIG9mIGlu
c3VmZmljaWVudCBwcm9maWxpbmcuXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQot
ICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAq
Y29kZUJsb2NrLCAiXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAobG9nT1NSKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZy
YW1lLT5zY29wZSgpOwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQ7CiAgICAgICAg
IEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUs
IHNjb3BlLCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZUNvbXBpbGF0aW9uKCkKLSAgICAgICAgICAgIHx8IE9wdGlvbnM6OnNob3dEaXNhc3NlbWJs
eSgpCi0gICAgICAgICAgICB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKSkKKyAgICAg
ICAgaWYgKGxvZ09TUigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJPcHRpbWl6aW5nIGNvbXBp
bGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOwotI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAg
IGRhdGFMb2coIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQgd2l0aCBhIEpT
IGVycm9yLlxuIik7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oZXJyb3IpOwotI2VuZGlm
CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiV0FSTklO
Rzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRoIGEgSlMgZXJyb3IuXG4iKTsKKyAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoKHJlc3VsdCA9PSBDb21w
aWxhdGlvblN1Y2Nlc3NmdWwpID09IChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkgIT0gY29kZUJs
b2NrKSk7Ci0gICAgICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgICAgIGNhc2UgQ29tcGlsYXRp
b25TdWNjZXNzZnVsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcGlsYXRp
b25GYWlsZWQ6Ci0gICAgICAgIGNhc2UgQ29tcGlsYXRpb25EZWZlcnJlZDoKLSNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZygiT3B0aW1pemluZyAiLCAqY29k
ZUJsb2NrLCAiIGZhaWxlZC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBBU1NFUlQoY29kZUJs
b2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgICAgICAgICAg
Y29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6Ci0gICAgICAgICAgICBBU1NF
UlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAg
ICAgICAgICAgLy8gUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLgotICAgICAgICAgICAg
Y29kZUJsb2NrLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7Ci0gICAgICAgICAgICBjb2RlQmxvY2st
Pm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0KTsKKyAgICAgICAgaWYg
KHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgfQogICAgIAogICAgIENvZGVC
bG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwpAQCAt
MTAxNCwzMiArMTAyNSwyOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkK
ICAgICB9CiAgICAgCiAgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBERkc6OnByZXBhcmVPU1JFbnRy
eShjYWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCkpIHsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OnNob3dERkdEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGlmIChsb2dP
U1IoKSkgewogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiUGVyZm9ybWlu
ZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqb3B0aW1pemVkQ29kZUJsb2NrLCAiLCBhZGRy
ZXNzICIsCiAgICAgICAgICAgICAgICAgUmF3UG9pbnRlcigoU1RVQl9SRVRVUk5fQUREUkVTUyku
dmFsdWUoKSksICIgLT4gIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIi5cbiIpOwogICAgICAgICB9
Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZygiT3B0aW1pemlu
ZyAiLCAqY29kZUJsb2NrLCAiIHN1Y2NlZWRlZCwgcGVyZm9ybWluZyBPU1IgYWZ0ZXIgYSBkZWxh
eSBvZiAiLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpLCAiLlxuIik7Ci0j
ZW5kaWYKIAogICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogICAgICAgICBTVFVC
X1NFVF9SRVRVUk5fQUREUkVTUyhhZGRyZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2coIk9wdGltaXppbmcg
IiwgKmNvZGVCbG9jaywgIiBzdWNjZWVkZWQsIE9TUiBmYWlsZWQsIGFmdGVyIGEgZGVsYXkgb2Yg
IiwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOwotI2VuZGlm
CisKKyAgICBpZiAobG9nT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJP
cHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQo
KSwKKyAgICAgICAgICAgICIgc3VjY2VlZGVkLCBPU1IgZmFpbGVkLCBhZnRlciBhIGRlbGF5IG9m
ICIsCisgICAgICAgICAgICBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpLCAi
LlxuIik7CisgICAgfQogCiAgICAgLy8gQ291bnQgdGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3Vs
YXRpb24gZmFpbHVyZS4gSWYgdGhpcyBoYXBwZW5zIGEgbG90LCB0aGVuCiAgICAgLy8gcmVvcHRp
bWl6ZS4KICAgICBvcHRpbWl6ZWRDb2RlQmxvY2stPmNvdW50T1NSRXhpdCgpOwogICAgIAotI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZygiRW5jb3VudGVyZWQgT1NSIGZh
aWx1cmUgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAi
LlxuIik7Ci0jZW5kaWYKLQogICAgIC8vIFdlIGFyZSBhIGxvdCBtb3JlIGNvbnNlcnZhdGl2ZSBh
Ym91dCB0cmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIGFmdGVyIE9TUiBmYWlsdXJlIHRoYW4KICAg
ICAvLyBiZWZvcmUgaXQuIElmIHdlIGVudGVyIHRoZSBvcHRpbWl6ZV9mcm9tX2xvb3AgdHJpZ2dl
ciB3aXRoIGEgYnVja2V0IGZ1bGwgb2YgZmFpbAogICAgIC8vIGFscmVhZHksIHRoZW4gd2UgcmVh
bGx5IHdvdWxkIGxpa2UgdG8gcmVvcHRpbWl6ZSBpbW1lZGlhdGVseS4gQnV0IHRoaXMgY2FzZSBj
b3ZlcnMKQEAgLTEwNDksOSArMTA1NiwxMSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBv
cHRpbWl6ZSkKICAgICAvLyByaWdodCBub3cuIFNvLCB3ZSBvbmx5IHRyaWdnZXIgcmVvcHRpbWl6
YXRpb24gb25seSB1cG9uIHRoZSBtb3JlIGNvbnNlcnZhdGl2ZSAobm9uLWxvb3ApCiAgICAgLy8g
cmVvcHRpbWl6YXRpb24gdHJpZ2dlci4KICAgICBpZiAob3B0aW1pemVkQ29kZUJsb2NrLT5zaG91
bGRSZW9wdGltaXplTm93KCkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAg
ICBkYXRhTG9nKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIg
LT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIiAoYWZ0ZXIgT1NSIGZhaWwpLlxuIik7
Ci0jZW5kaWYKKyAgICAgICAgaWYgKGxvZ09TUigpKSB7CisgICAgICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgICAgICJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxv
Y2ssICIgLT4gIiwKKyAgICAgICAgICAgICAgICAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAi
IChhZnRlciBPU1IgZmFpbCkuXG4iKTsKKyAgICAgICAgfQogICAgICAgICBjb2RlQmxvY2stPnJl
b3B0aW1pemUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHJldmlzaW9uIDE1MDMz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAyLDEwICsxMDIsMTQgQEAgaW5saW5lIENvbXBpbGF0aW9uUmVz
dWx0IGluc3RhbGxPcHRpbWl6ZQogICAgIGlmIChudW1QYXJhbWV0ZXJzKQogICAgICAgICAqbnVt
UGFyYW1ldGVycyA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwogICAgIAotICAgIGlmIChq
aXRDb2RlKQotICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlD
b3N0KHNpemVvZigqY29kZUJsb2NrKSArIGppdENvZGUtPnNpemUoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigq
Y29kZUJsb2NrKSk7CisgICAgLy8gV2UgY291bGQgYmUgaW5zdGFsbGluZyBvcHRpbWl6ZWQgY29k
ZSBkdWUgdG8gd29ya2xpc3QgZmx1c2ggaW5zaWRlIG9mIEdDLiBXZSBkb24ndAorICAgIC8vIHRo
ZW4gd2FudCB0byByZWN1cnNpdmVseSBHQy4KKyAgICBpZiAoIWNvZGVCbG9jay0+dm0oKS0+aGVh
cC5pc0J1c3koKSkgeworICAgICAgICBpZiAoaml0Q29kZSkKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+dm0oKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpjb2RlQmxvY2spICsg
aml0Q29kZS0+c2l6ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZUJsb2NrLT52
bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKmNvZGVCbG9jaykpOworICAg
IH0KICAgICAKICAgICBpZiAoc2luayAhPSBjb2RlQmxvY2spIHsKICAgICAgICAgLy8gVGhpcyBj
YW4gaGFwcGVuIGlmIHdlIEdDIGFuZCBkZWNpZGUgdGhhdCB0aGUgY29kZSBpcyBpbnZhbGlkLgpA
QCAtMTQxLDEyICsxNDUsMTUgQEAgaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5j
dGlvbgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgogaW5saW5lIENvbXBpbGF0
aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAgIFBhc3NSZWZQ
dHI8REZHOjpQbGFuPiBwbGFuLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNpbmssIFJlZlB0cjxK
SVRDb2RlPiYgaml0Q29kZSwKKyAgICBQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGFzc2VkUGxhbiwg
UmVmUHRyPENvZGVCbG9ja1R5cGU+JiBzaW5rLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGludCogbnVt
UGFyYW1ldGVycykKIHsKKyAgICBSZWZQdHI8REZHOjpQbGFuPiBwbGFuID0gcGFzc2VkUGxhbjsK
KyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OnRyeUZpbmFsaXplUGxhbihwbGFu
LCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgIGlmIChyZXN1bHQgPT0gQ29t
cGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICBwbGFuLT5jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCktPnVubGlua0luY29taW5nQ2FsbHMoKTsKICAgICByZXR1cm4gaW5zdGFsbE9wdGltaXplZENv
ZGUoCi0gICAgICAgIERGRzo6dHJ5RmluYWxpemVQbGFuKHBsYW4sIGppdENvZGUsIGppdENvZGVX
aXRoQXJpdHlDaGVjayksCi0gICAgICAgIHNpbmssIHN0YXRpY19jYXN0PENvZGVCbG9ja1R5cGUq
PihwbGFuLT5jb2RlQmxvY2suZ2V0KCkpLCBqaXRDb2RlLAorICAgICAgICByZXN1bHQsIHNpbmss
IHN0YXRpY19jYXN0PENvZGVCbG9ja1R5cGUqPihwbGFuLT5jb2RlQmxvY2suZ2V0KCkpLCBqaXRD
b2RlLAogICAgICAgICBqaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPyAqaml0Q29kZVdpdGhBcml0eUNo
ZWNrIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksCiAgICAgICAgIG51bVBhcmFtZXRlcnMpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24g
MTUwMzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw2ICs4OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoYm9vbCwg
ZW5hYmxlTExWTUZhc3RJU2VsLCB0cnVlKSBcCiAgICAgdih1bnNpZ25lZCwgbGx2bU9wdGltaXph
dGlvbkxldmVsLCAyKSBcCiAgICAgXAorICAgIHYoYm9vbCwgZW5hYmxlQ29uY3VycmVudENvbXBp
bGF0aW9uLCBmYWxzZSkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVByb2ZpbGVyLCBmYWxz
ZSkgXAogICAgIFwKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRl
SW5zdHJ1Y3Rpb25Db3VudCwgMTAwMDApIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE1MDMzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6cHV0V2lsbEdy
b3dPdXRPZkwKIAogQUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIFN0
cnVjdHVyZTo6cHJvcGVydHlUYWJsZSgpCiB7Ci0gICAgQVNTRVJUKCFnbG9iYWxPYmplY3QoKSB8
fCAhZ2xvYmFsT2JqZWN0KCktPnZtKCkuaGVhcC5pc0J1c3koKSk7CisgICAgQVNTRVJUKCFnbG9i
YWxPYmplY3QoKSB8fCAhZ2xvYmFsT2JqZWN0KCktPnZtKCkuaGVhcC5pc0NvbGxlY3RpbmcoKSk7
CiAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUwMzM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRp
ZmllcnMuaCIKICNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR1dv
cmtsaXN0LmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAt
MjUzLDEyICsyNTQsMTggQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGNhblVzZUpJVCgpKQotICAgICAgICBt
X2RmZ1N0YXRlID0gYWRvcHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CisgICAgICAg
IGRmZ1N0YXRlID0gYWRvcHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYK
IH0KIAogVk06On5WTSgpCiB7CisgICAgLy8gTWFrZSBzdXJlIGNvbmN1cnJlbnQgY29tcGlsYXRp
b25zIGFyZSBkb25lLgorI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICh3b3JrbGlzdCkKKyAg
ICAgICAgd29ya2xpc3QtPmNvbXBsZXRlQWxsRm9yVk0oKnRoaXMpOworI2VuZGlmCisgICAgCiAg
ICAgLy8gQ2xlYXIgdGhpcyBmaXJzdCB0byBlbnN1cmUgdGhhdCBub2JvZHkgdHJpZXMgdG8gcmVt
b3ZlIHRoZW1zZWx2ZXMgZnJvbSBpdC4KICAgICBtX3BlckJ5dGVjb2RlUHJvZmlsZXIuY2xlYXIo
KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTUw
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNiArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBuYW1lc3BhY2UgREZHIHsKICAgICBjbGFzcyBMb25nTGl2ZWRTdGF0ZTsKKyAgICBjbGFz
cyBXb3JrbGlzdDsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKQEAgLTIwNyw3
ICsyMDgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGVhcCBoZWFwOwogICAgICAgICAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xpdmVkU3RhdGU+
IG1fZGZnU3RhdGU7CisgICAgICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBkZmdTdGF0
ZTsKKyAgICAgICAgUmVmUHRyPERGRzo6V29ya2xpc3Q+IHdvcmtsaXN0OwogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogCiAgICAgICAgIFZNVHlwZSB2bVR5cGU7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9CeXRlU3BpbkxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlU3Bp
bkxvY2suaAkocmV2aXNpb24gMTUwMzM5KQorKysgU291cmNlL1dURi93dGYvQnl0ZVNwaW5Mb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMyBAQAogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2Vy
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Z1ByaW1pdGl2ZXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIEJ5dGVTcGluTG9jayB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZVNwaW5Mb2NrKTsKIHB1YmxpYzoKICAgICBC
eXRlU3BpbkxvY2soKQogICAgICAgICA6IG1fbG9jaygwKQpJbmRleDogU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFB
bGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMTUwMzM5KQorKysgU291cmNlL1dURi93dGYvTWV0
YUFsbG9jYXRvckhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxNCArMzEsMTQgQEAKIAogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAog
Y2xhc3MgTWV0YUFsbG9jYXRvcjsKIAotY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1l
dGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CitjbGFzcyBNZXRhQWxsb2NhdG9ySGFu
ZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBw
dWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiBw
cml2YXRlOgogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0
YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202227</attachid>
            <date>2013-05-18 22:33:28 -0700</date>
            <delta_ts>2013-05-19 12:04:44 -0700</delta_ts>
            <desc>it&apos;s a speed-up, for the most part</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61846</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBA
QAorMjAxMy0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYSBzZXBhcmF0ZSB0aHJl
YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgU3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLiBJdCdzIG5vdCBhbHdheXMgYSBzcGVlZC11cCBh
bmQgSSBoYXZlIHRoaW5ncyB0bworICAgICAgICBpbnZlc3RpZ2F0ZS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgdGhlIGZpbmFsIGJpdCBvZiBjb25jdXJyZW50IEpJVGluZy4gVGhlIGlkZWEg
aXMgdGhhdCB0aGVyZSBpcyBhCisgICAgICAgIHNpbmdsZSBnbG9iYWwgd29ya2xpc3QsIGFuZCBh
IHNpbmdsZSBnbG9iYWwgdGhyZWFkLCB0aGF0IGRvZXMgYWxsCisgICAgICAgIG9wdGltaXppbmcg
Y29tcGlsYXRpb24uIFRoaXMgaXMgdGhlIERGRzo6V29ya2xpc3QuIEl0IGNvbnRhaW5zIGEgcXVl
dWUgb2YKKyAgICAgICAgREZHOjpQbGFucywgYW5kIGEgbWFwIGZyb20gQ29kZUJsb2NrKiAodGhl
IGJhc2VsaW5lIGNvZGUgYmxvY2sgd2UncmUKKyAgICAgICAgdHJ5aW5nIHRvIG9wdGltaXplKSB0
byBERkc6OlBsYW4uIElmIHRoZSBERkdEcml2ZXIgdHJpZXMgdG8gY29uY3VycmVudGx5CisgICAg
ICAgIGNvbXBpbGUgc29tZXRoaW5nLCBpdCBwdXRzIHRoZSBQbGFuIG9uIHRoZSBXb3JrbGlzdC4g
VGhlIFdvcmtsaXN0J3MKKyAgICAgICAgdGhyZWFkIHdpbGwgY29tcGlsZSB0aGF0IFBsYW4gZXZl
bnR1YWxseSwgYW5kIHdoZW4gaXQncyBkb25lLCBpdCB3aWxsCisgICAgICAgIHNpZ25hbCBpdHMg
Y29tcGxldGlvbiBieSAoMSkgbm90aWZ5aW5nIGFueW9uZSB3YWl0aW5nIGZvciB0aGUgV29ya2xp
c3QgdG8KKyAgICAgICAgYmUgZG9uZSwgYW5kICgyKSBmb3JjaW5nIHRoZSBDb2RlQmxvY2s6Om1f
aml0RXhlY3V0ZUNvdW50ZXIgdG8gdGFrZSBzbG93CisgICAgICAgIHBhdGguIFRoZSBuZXh0IEJh
c2VsaW5lIEpJVCBjdGlfb3B0aW1pemUgY2FsbCB3aWxsIHRoZW4gaW5zdGFsbCB0aGUgUGxhbi4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYWxsIHZlcnkgcmFjeSBieSBkZXNpZ24uIEZvciBl
eGFtcGxlLCBqdXN0IGFzIHdlIHRyeSB0byBmb3JjZSB0aGUKKyAgICAgICAgZXhlY3V0ZSBjb3Vu
dGVyIHRvIHRha2Ugc2xvdyBwYXRoLCB0aGUgbWFpbiB0aHJlYWQgbWF5IGJlIHNldHRpbmcgdGhl
CisgICAgICAgIGV4ZWN1dGUgY291bnRlciB0byBzb21lIG90aGVyIHZhbHVlLiBXZSBhdm9pZCB0
aGlzIGJ5IGVuc3VyaW5nIHRoYXQgaWYgd2UKKyAgICAgICAgd2VyZSB0byBzZXQgdGhlIGV4ZWN1
dGUgY291bnRlciB0byBzb21lIGxhcmdlIHZhbHVlLCB3ZSBkb3VibGUtY2hlY2sgdGhhdAorICAg
ICAgICBjb21waWxhdGlvbiBoYWRuJ3QgYWxyZWFkeSBjb21wbGV0ZWQuIEZvciB0aGUgbW9zdCBw
YXJ0LCB3ZSBhcmUgYWxsb3dlZAorICAgICAgICB0byBnZXQgdGhpcyB3cm9uZzsgdGhlIHdvcnN0
IGNhc2UgaXMgdGhhdCB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZQorICAgICAgICBvcHRpbWl6ZWQg
Y29kZSB3aWxsIGhhcHBlbiBhIGJpdCBsYXRlci4gTGlrZWx5IG5vYm9keSB3aWxsIG5vdGljZS4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBzb2xpZCBzcGVlZC11cCBvbiBTdW5TcGlkZXIg
KDQlKSBhbmQgVjhTcGlkZXIgKDE0JSksIG91ciB0d28KKyAgICAgICAgbWFpbiBjb21waWxlLXRp
bWUgYmVuY2htYXJrcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZG9udE9wdGltaXplQW55dGltZVNvb24pOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkp
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucyk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9ja0xvY2suaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OmZv
cmNlU2xvd1BhdGhDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKToKKyAgICAgICAgKiBieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmg6CisgICAgICAgIChFeGVjdXRpb25Db3VudGVyKToKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0QXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Z2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyk6CisgICAgICAgICogZGZnL0RGR0Nv
bW1vbi5oOgorICAgICAgICAoSlNDOjpERkc6OmVuYWJsZUNvbmN1cnJlbnRKSVQpOgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChH
cmFwaCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OlBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGxhbjo6a2V5KToKKyAgICAgICAgKERGRyk6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChQbGFuKToKKyAgICAgICAg
KiBkZmcvREZHV29ya2xpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6OldvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlz
dDo6fldvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpERkc6OldvcmtsaXN0OjplbnF1ZXVlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6
Y29tcGxldGVBbmRTY2hlZHVsZU9TUik6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmNv
bXBpbGF0aW9uU3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0Ojp3YWl0VW50aWxB
bGxGb3JWTUFyZUNvbXBsZXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y29tcGxl
dGVBbGxGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJ1blRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQXN5bmNocm9ub3VzUGxhbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnRocmVhZEZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjppbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpnbG9iYWxXb3JrbGlzdCk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6IEFkZGVkLgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKFdvcmtsaXN0KToKKyAgICAgICAgKiBoZWFwL0hlYXAu
Y3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKiBoZWFwL0hlYXAu
aDoKKyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjppc0NvbGxlY3RpbmcpOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
Ojpsb2dPU1IpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVO
Q1RJT04pOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmg6CisgICAgICAg
ICogcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmg6CisgICAgICAgIChKU0M6Omluc3Rh
bGxPcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGlt
aXplZENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpwcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6Cisg
ICAgICAgIChTeW1ib2xUYWJsZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
IChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChWTSk6CisKIDIwMTMtMDUtMTcgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBnZXRD
VElTdHViIHNob3VsZCBiZSB0aHJlYWQtc2FmZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEs
NiArMzMxLDkgQEAKIAkJMEZEQjJDRTAxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q4MTc0MkQ4
MDQwMDdCM0MxQiAvKiBERkdQbGFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTIxNzQ2QzFGQTAwN0IzQzFCIC8qIENvbXBpbGF0aW9u
UmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkRCMkNFMTE3NDZDMUY4MDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFNDE3NDZDRTlG
MDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTMxNzQ2Q0U5RDAwN0IzQzFCIC8qIENvbXBp
bGF0aW9uUmVzdWx0LmNwcCAqLzsgfTsKKwkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERG
R1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CisJ
CTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTYxNzQ4MzBBMjAwN0IzQzFC
IC8qIERGR1dvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2Nr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNF
OTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZH
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi87IH07CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1
NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZH
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQjE0
MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xMzM4LDYgKzEzNDEsOSBAQAogCQkwRkRCMkNEODE3NDJE
ODA0MDA3QjNDMUIgLyogREZHUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdQbGFuLmg7IHBhdGggPSBkZmcvREZHUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkRCMkNFMTE3NDZDMUY4MDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25SZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEQjJDRTMxNzQ2Q0U5RDAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dvcmtsaXN0LmNw
cDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdC5oOyBwYXRoID0gZGZnL0RGR1dvcmts
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0U5MTc0ODk2QzcwMDdC
M0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb25jdXJyZW50SklUTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUExNDM2
QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjMz
LDYgKzI2MzksNyBAQAogCQkJCTBGREIyQ0UxMTc0NkMxRjgwMDdCM0MxQiAvKiBDb21waWxhdGlv
blJlc3VsdC5oICovLAogCQkJCTk2OUEwOTIyMEVEMUUwOUMwMEYxRjY4MSAvKiBDb21wbGV0aW9u
LmNwcCAqLywKIAkJCQlGNUJCMkJDNTAzMEY3NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICov
LAorCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICov
LAogCQkJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAqLywK
IAkJCQlCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAogCQkJ
CUJDRDIwMzQ1MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuY3BwICovLApAQCAt
MzAzMCw2ICszMDM3LDggQEAKIAkJCQkwRjg1QTMxRTE2QUI3NkFFMDA3NzU3MUUgLyogREZHVmFy
aWFkaWNGdW5jdGlvbi5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdW
aXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkw
OTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKKwkJ
CQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovLAorCQkJCTBG
REIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovLAogCQkJKTsKIAkJCW5h
bWUgPSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzQ0NSw2ICszNDU0LDcg
QEAKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBY3RpdmF0
aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29u
Y3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkwMDhF
N0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTQx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQxNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NTc2LDYgKzM1ODYsNyBAQAogCQkJCUJDMThDNDNGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBOb2Rlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDEwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZGNUNEMDBCMzQ0NjAg
LyogTnVtYmVyQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNFODE3
NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDQzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDQ0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0MkQzOTM5MTAzRTQ1NjAwMDdEQ0I1MiAvKiBOdW1lcmljU3RyaW5ncy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC00MzY2LDYgKzQzNzcsNyBAQAogCQkJCTE0NDY5REU4MTA3RUM3RTcw
MDY1MDQ0NiAvKiBQcm9wZXJ0eVNsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOTUx
NzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3NEMz
M0MxNkFBMkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkRCMkNFNzE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNl
V2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR05vZGUu
aCIKICNpbmNsdWRlICJERkdSZXBhdGNoLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNp
bmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgpAQCAtMzAyNiw2ICszMDI3LDE0IEBAIGludDMyX3QgQ29kZUJsb2NrOjpj
b3VudGVyVmFsdWVGb3JPcHRpbWkKIAogYm9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRp
b25UaHJlc2hvbGRSZWFjaGVkKCkKIHsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAobV92
bS0+d29ya2xpc3QKKyAgICAgICAgJiYgbV92bS0+d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUo
dGhpcykgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgb3B0aW1pemVOZXh0
SW52b2NhdGlvbigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICAK
ICAgICByZXR1cm4gbV9qaXRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFu
ZFNldCh0aGlzKTsKIH0KIApAQCAtMzAzNyw2ICszMDQ2LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKIHZvaWQgQ29kZUJsb2NrOjpkb250T3B0aW1pemVBbnl0
aW1lU29vbigpCiB7CiAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgp
OworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIFRoZXJlIGlzIGEgcmFjZSBoZXJl
LiBXZSBtYXkgYmVlbiBjYWxsZWQganVzdCBhZnRlciB0aGUgY29uY3VycmVudAorICAgIC8vIGNv
bXBpbGF0aW9uIHRocmVhZCBjb21wbGV0ZWQuIENoZWNrIGlmIHRoaXMgaXMgdGhlIGNhc2UsIGFu
ZCBpZiBzbywKKyAgICAvLyBzd2l0Y2ggdG8gb3B0aW1pemluZyB0aGUgbmV4dCBpbnZvY2F0aW9u
LgorICAgIGlmIChtX3ZtLT53b3JrbGlzdAorICAgICAgICAmJiBtX3ZtLT53b3JrbGlzdC0+Y29t
cGlsYXRpb25TdGF0ZSh0aGlzKSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxlZCkKKyAgICAgICAg
b3B0aW1pemVOZXh0SW52b2NhdGlvbigpOworI2VuZGlmCiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpv
cHRpbWl6ZUFmdGVyV2FybVVwKCkKQEAgLTMwNTQsNiArMzA3MiwzNSBAQCB2b2lkIENvZGVCbG9j
azo6b3B0aW1pemVTb29uKCkKICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9s
ZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24oKSwgdGhpcyk7CiB9CiAKK3ZvaWQgQ29kZUJs
b2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkKK3sKKyAgICBtX2pp
dEV4ZWN1dGVDb3VudGVyLmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKK30KKwordm9pZCBD
b2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3Vs
dChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZ2V0SklU
VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgocmVz
dWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgPT0gKHJlcGxhY2VtZW50KCkgIT0gdGhpcykp
OworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNl
bWVudCgpLT5nZXRKSVRUeXBlKCkpKTsKKyAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAgIGNhc2Ug
Q29tcGlsYXRpb25EZWZlcnJlZDoKKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21waWxhdGlvbkludmFsaWRhdGVkOgorICAgICAg
ICAvLyBSZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYuCisgICAgICAgIGNvdW50UmVvcHRp
bWl6YXRpb24oKTsKKyAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBFTkFCTEUoSklUKQogdWludDMyX3QgQ29k
ZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNo
b2xkKQogewpAQCAtMzExMiw3ICszMTU5LDcgQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6Omdl
dE9yQWRkQXJyYXlQcgogdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291
bnRMaXZlbmVzcygKICAgICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiwgdW5zaWduZWQm
IG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9m
U2FtcGxlc0luUHJvZmlsZXMpCiB7Ci0gICAgQ29kZUJsb2NrTG9jayBsb2NrZXIobV9sb2NrKTsK
KyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgCiAgICAgbnVtYmVyT2ZM
aXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKICAgICBudW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzID0gMDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZC
dWNrZXRzIGVxdWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVuIHZhbHVlIHByb2ZpbGVz
IGFyZSBmdWxsLgpAQCAtMzE0NCw3ICszMTkxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFs
bFZhbHVlUHJvZmlsZVByZQogCiB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsQXJyYXlQcmVkaWN0
aW9ucyhPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbikKIHsKLSAgICBDb2RlQmxvY2tMb2Nr
IGxvY2tlcihtX2xvY2spOworICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAg
ICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2FycmF5UHJvZmlsZXMuc2l6ZSgpOyBpLS07KQog
ICAgICAgICBtX2FycmF5UHJvZmlsZXNbaV0uY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tl
ciwgdGhpcywgb3BlcmF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODY1LDYgKzg2NSwxMCBA
QCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvCiAgICAgICAgIC8vIHRv
IHRyaWdnZXIgb3B0aW1pemF0aW9uIGlmIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgYmVjb21lcyBo
b3QKICAgICAgICAgLy8gaW4gdGhlIGJhc2VsaW5lIGNvZGUuCiAgICAgICAgIHZvaWQgb3B0aW1p
emVTb29uKCk7CisgICAgCisgICAgICAgIHZvaWQgZm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseSgpOworICAgIAorICAgICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9s
ZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCk7CiAgICAgICAgIAog
ICAgICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRXhp
dENvdW50ZXI7IH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tMb2NrLmgJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDE4ICsyNiwxMiBAQAogI2lmbmRlZiBDb2RlQmxvY2tMb2NrX2gKICNkZWZpbmUgQ29kZUJsb2Nr
TG9ja19oCiAKLSNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL05v
TG9jay5oPgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi0jaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQotdHlwZWRlZiBCeXRlU3BpbkxvY2sgQ29k
ZUJsb2NrTG9jazsKLXR5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgQ29kZUJsb2NrTG9ja2VyOwotI2Vs
c2UKLXR5cGVkZWYgTm9Mb2NrIENvZGVCbG9ja0xvY2s7Ci10eXBlZGVmIE5vTG9ja0xvY2tlciBD
b2RlQmxvY2tMb2NrZXI7Ci0jZW5kaWYKK3R5cGVkZWYgQ29uY3VycmVudEpJVExvY2sgQ29kZUJs
b2NrTG9jazsKK3R5cGVkZWYgQ29uY3VycmVudEpJVExvY2tlciBDb2RlQmxvY2tMb2NrZXI7CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAxNTAzNDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDExIEBAIEV4ZWN1dGlvbkNvdW50ZXI6OkV4ZWN1dGlvbkNv
dW50ZXIoKQogICAgIHJlc2V0KCk7CiB9CiAKK3ZvaWQgRXhlY3V0aW9uQ291bnRlcjo6Zm9yY2VT
bG93UGF0aENvbmN1cnJlbnRseSgpCit7CisgICAgbV9jb3VudGVyID0gMDsKK30KKwogYm9vbCBF
eGVjdXRpb25Db3VudGVyOjpjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKICAgICBpZiAoaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKQpA
QCAtMTI0LDExICsxMjksMTEgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyOjpzZXRUaHJlc2hvbGQo
Q29kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgICAgICAKLSAgICBBU1NFUlQo
IWhhc0Nyb3NzZWRUaHJlc2hvbGQoY29kZUJsb2NrKSk7CisgICAgQVNTRVJUKCFtX2FjdGl2ZVRo
cmVzaG9sZCB8fCAhaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKTsKICAgICAgICAgCiAg
ICAgLy8gQ29tcHV0ZSB0aGUgdHJ1ZSB0b3RhbCBjb3VudC4KICAgICBkb3VibGUgdHJ1ZVRvdGFs
Q291bnQgPSBjb3VudCgpOwotICAgICAgICAKKyAgICAKICAgICAvLyBDb3JyZWN0IHRoZSB0aHJl
c2hvbGQgZm9yIGN1cnJlbnQgbWVtb3J5IHVzYWdlLgogICAgIGRvdWJsZSB0aHJlc2hvbGQgPSBh
cHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsK
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9u
Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgRXhlY3V0aW9uQ291bnRlciB7CiBwdWJs
aWM6CiAgICAgRXhlY3V0aW9uQ291bnRlcigpOworICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1
cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5k
U2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRD
cm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMy
X3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7
CkBAIC03NCw3ICs3NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNldCgpOwogCiBwdWJsaWM6
Ci0KICAgICAvLyBOQi4gVGhlc2UgYXJlIGludGVudGlvbmFsbHkgcHVibGljIGJlY2F1c2UgaXQg
d2lsbCBiZSBtb2RpZmllZCBmcm9tIG1hY2hpbmUgY29kZS4KICAgICAKICAgICAvLyBUaGlzIGNv
dW50ZXIgaXMgaW5jcmVtZW50ZWQgYnkgdGhlIEpJVCBvciBMTEludC4gSXQgc3RhcnRzIG91dCBu
ZWdhdGl2ZSBhbmQgaXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDcg
KzI3MCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBH
ZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgg
PT0gbV9jdXJyZW50SW5kZXgpOwotICAgICAgICBDb2RlQmxvY2tMb2NrIGxvY2tlcihtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xv
Y2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwog
ICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5v
ZGUtPmxvY2FsKCkpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIsIGtleSk7CiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQpAQCAtODM5LDcgKzgzOSw3IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFy
cmF5OjpBY3Rpb24gYWN0aW9uKQogICAgIHsKLSAgICAgICAgQ29kZUJsb2NrTG9jayBsb2NrZXIo
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICBDb2Rl
QmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgcmV0dXJuIEFycmF5
TW9kZTo6ZnJvbU9ic2VydmVkKGxvY2tlciwgcHJvZmlsZSwgYWN0aW9uLCBmYWxzZSk7CiAgICAg
fQpAQCAtODUxLDcgKzg1MSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFy
cmF5TW9kZUFuZEVtaXRDaGVja3MoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9u
IGFjdGlvbiwgTm9kZSogYmFzZSkKICAgICB7Ci0gICAgICAgIENvZGVCbG9ja0xvY2sgbG9ja2Vy
KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgQ29k
ZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1f
bG9jayk7CiAgICAgICAgIAogICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24obG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTUwMzQ5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTU0LDYgKzE1NCwxNSBAQCBpbmxpbmUgYm9vbCB2YWxpZGF0aW9uRW5hYmxlZCgpCiAj
ZW5kaWYKIH0KIAoraW5saW5lIGJvb2wgZW5hYmxlQ29uY3VycmVudEpJVCgpCit7CisjaWYgRU5B
QkxFKENPTkNVUlJFTlRfSklUKQorICAgIHJldHVybiBPcHRpb25zOjplbmFibGVDb25jdXJyZW50
SklUKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBlbnVtIFNwaWxs
UmVnaXN0ZXJzTW9kZSB7IE5lZWRUb1NwaWxsLCBEb250U3BpbGwgfTsKIAogZW51bSBOb1Jlc3Vs
dFRhZyB7IE5vUmVzdWx0IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxMyBAQAogI2luY2x1ZGUg
IkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVGh1bmtz
LmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNp
bmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9w
dGlvbnMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKKyNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTY2LDE5ICs2OCwy
MSBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxlCiAgICAgICAgIHJl
dHVybiBDb21waWxhdGlvbkZhaWxlZDsKICAgICAKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFu
Z2VzKCkpCi0gICAgICAgIGRhdGFMb2coIkRGRyBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiwg
bnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgp
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiREZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2Rl
QmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0
aW9uQ291bnQoKSwgIlxuIik7CisgICAgCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAK
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRv
IHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBh
bCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVh
ZC4KLSAgICBleGVjLT52bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1
bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxU
aHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1
bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0
VGh1bmtHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cik7CisgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOworICAg
IHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgIHZtLmdl
dENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1Yih2
aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwogI2lmIEVOQUJMRShGVExfSklUKQotICAg
IGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihGVEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IpOworICAgIHZtLmdldENUSVN0dWIoRlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJh
dG9yKTsKICNlbmRpZgogICAgIAogICAgIC8vIERlcml2ZSBvdXIgc2V0IG9mIG11c3QtaGFuZGxl
IHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11c3QgYmUgYXQgbGVhc3QgY29uc2VydmF0aXZlCkBA
IC0xMDUsNyArMTA5LDE2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKENvbXBp
bGUKICAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNr
ZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKICAgICB9CiAgICAgCi0gICAgcGxhbi0+Y29tcGlsZUlu
VGhyZWFkKCk7CisgICAgaWYgKGVuYWJsZUNvbmN1cnJlbnRKSVQoKSkgeworICAgICAgICBpZiAo
bG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJpbmcg
REZHIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOworICAgICAgICBpZiAoIXZt
LndvcmtsaXN0KQorICAgICAgICAgICAgdm0ud29ya2xpc3QgPSBnbG9iYWxXb3JrbGlzdCgpOwor
ICAgICAgICB2bS53b3JrbGlzdC0+ZW5xdWV1ZShwbGFuKTsKKyAgICAgICAgcmV0dXJuIENvbXBp
bGF0aW9uRGVmZXJyZWQ7CisgICAgfQorICAgIAorICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZCgq
dm0uZGZnU3RhdGUpOwogICAgIHJldHVybiBwbGFuLT5maW5hbGl6ZShqaXRDb2RlLCBqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2spOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDEyICs0NCwxMiBAQCBzdGF0aWMgY29uc3Qg
Y2hhciogZGZnT3BOYW1lc1tdID0gewogI3VuZGVmIFNUUklOR0laRV9ERkdfT1BfRU5VTQogfTsK
IAotR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbikKK0dyYXBoOjpHcmFwaChWTSYgdm0s
IFBsYW4mIHBsYW4sIExvbmdMaXZlZFN0YXRlJiBsb25nTGl2ZWRTdGF0ZSkKICAgICA6IG1fdm0o
dm0pCiAgICAgLCBtX3BsYW4ocGxhbikKICAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxv
Y2suZ2V0KCkpCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2sobV9jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpCi0gICAgLCBtX2FsbG9jYXRvcih2bS5tX2RmZ1N0YXRlLT5tX2FsbG9jYXRvcikKKyAgICAs
IG1fYWxsb2NhdG9yKGxvbmdMaXZlZFN0YXRlLm1fYWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1
bWVudHMoZmFsc2UpCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAgICAg
LCBtX2Zvcm0oTG9hZFN0b3JlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIGVudW0gQWRkU3BlY3VsYXRpb25N
b2RlIHsKIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZlY3RvciB3aXRo
IHJlZkNvdW50IDAuCiBjbGFzcyBHcmFwaCB7CiBwdWJsaWM6Ci0gICAgR3JhcGgoVk0mLCBQbGFu
Jik7CisgICAgR3JhcGgoVk0mLCBQbGFuJiwgTG9uZ0xpdmVkU3RhdGUmKTsKICAgICB+R3JhcGgo
KTsKICAgICAKICAgICB2b2lkIGNoYW5nZUNoaWxkKEVkZ2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1MDM0
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDYgKzc4LDcgQEAgUGxhbjo6UGxhbigKICAgICAsIG11c3RIYW5kbGVWYWx1ZXMo
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKQogICAgICwgY29t
cGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJl
ZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrLmdldCgpKSwgUHJvZmlsZXI6
OkRGRykpIDogMCkKICAgICAsIGlkZW50aWZpZXJzKGNvZGVCbG9jay5nZXQoKSkKKyAgICAsIGlz
Q29tcGlsZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTg1LDEyICs4NiwxNSBAQCBQbGFuOjp+UGxhbigp
CiB7CiB9CiAKLXZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKCkKK3ZvaWQgUGxhbjo6Y29tcGls
ZUluVGhyZWFkKExvbmdMaXZlZFN0YXRlJiBsb25nTGl2ZWRTdGF0ZSkKIHsKICAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChQbGFuKSIpOwogICAgIENv
bXBpbGF0aW9uU2NvcGUgY29tcGlsYXRpb25TY29wZTsKIAotICAgIEdyYXBoIGRmZyh2bSwgKnRo
aXMpOworICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKKyAgICAgICAgZGF0YUxvZygi
REZHKFBsYW4pIGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rp
b25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOworCisgICAgR3Jh
cGggZGZnKHZtLCAqdGhpcywgbG9uZ0xpdmVkU3RhdGUpOwogICAgIAogICAgIGlmICghcGFyc2Uo
ZGZnKSkgewogICAgICAgICBmaW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVy
KCp0aGlzKSk7CkBAIC0xOTksNiArMjAzLDExIEBAIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZp
bmFsaXplKFJlZlB0cjwKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCitD
b2RlQmxvY2sqIFBsYW46OmtleSgpCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24g
MTUwMzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDggQEAgY2xhc3MgQ29kZUJsb2NrOwogCiBuYW1lc3BhY2UgREZH
IHsKIAorY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CisKIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxl
RnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OwogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC01Mywx
MCArNTUsMTIgQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAg
ICAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRo
VmFsdWVzKTsKICAgICB+UGxhbigpOwogICAgIAotICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCk7
CisgICAgdm9pZCBjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUmKTsKICAgICAKICAgICBD
b21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogICAgIAorICAg
IENvZGVCbG9jayoga2V5KCk7CisgICAgCiAgICAgY29uc3QgQ29tcGlsZU1vZGUgY29tcGlsZU1v
ZGU7CiAgICAgVk0mIHZtOwogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKQEAgLTcx
LDYgKzc1LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAg
IERlc2lyZWRXYXRjaHBvaW50cyB3YXRjaHBvaW50czsKICAgICBEZXNpcmVkSWRlbnRpZmllcnMg
aWRlbnRpZmllcnM7CiAgICAgRGVzaXJlZFN0cnVjdHVyZUNoYWlucyBjaGFpbnM7CisgICAgCisg
ICAgYm9vbCBpc0NvbXBpbGVkOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNTdGlsbFZhbGlkKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdXb3Jr
bGlzdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK1dvcmtsaXN0OjpXb3JrbGlzdCgpCit7Cit9CisKK1dvcmtsaXN0Ojp+V29y
a2xpc3QoKQoreworICAgIG1fcXVldWUuYXBwZW5kKG51bGxwdHIpOyAvLyBVc2UgbnVsbCBwbGFu
IHRvIGluZGljYXRlIHRoYXQgd2Ugd2FudCB0aGUgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KKyAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZCk7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmZp
bmlzaENyZWF0aW9uKCkKK3sKKyAgICBtX3RocmVhZCA9IGNyZWF0ZVRocmVhZCh0aHJlYWRGdW5j
dGlvbiwgdGhpcywgIkpTQyBDb21waWxhdGlvbiBUaHJlYWQiKTsKK30KKworUGFzc1JlZlB0cjxX
b3JrbGlzdD4gV29ya2xpc3Q6OmNyZWF0ZSgpCit7CisgICAgUmVmUHRyPFdvcmtsaXN0PiByZXN1
bHQgPSBhZG9wdFJlZihuZXcgV29ya2xpc3QoKSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlv
bigpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmVucXVldWUoUGFz
c1JlZlB0cjxQbGFuPiBwYXNzZWRQbGFuKQoreworICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gcGFz
c2VkUGxhbjsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBBU1NFUlQobV9w
bGFucy5maW5kKHBsYW4tPmtleSgpKSA9PSBtX3BsYW5zLmVuZCgpKTsKKyAgICBtX3BsYW5zLmFk
ZChwbGFuLT5rZXkoKSwgcGxhbik7CisgICAgbV9xdWV1ZS5hcHBlbmQocGxhbik7CisgICAgbV9j
b25kaXRpb24uYnJvYWRjYXN0KCk7Cit9CisKK0NvbXBpbGF0aW9uUmVzdWx0IFdvcmtsaXN0Ojpj
b21wbGV0ZUFuZFNjaGVkdWxlT1NSKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaykKK3sKKyAgICBS
ZWZQdHI8UGxhbj4gcGxhbjsKKyAgICAKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgICAgICBwbGFuID0gbV9wbGFucy50YWtlKHByb2ZpbGVkQmxvY2spOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxhbik7CisgICAgQVNTRVJUKHBsYW4tPmlzQ29tcGls
ZWQpOworICAgIAorICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IHByb2ZpbGVkQmxvY2st
PnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKHBsYW4pOworICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdCAhPSBDb21waWxhdGlvbkRlZmVycmVkKTsKKyAgICBwcm9maWxlZEJs
b2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQocmVz
dWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXb3JrbGlzdDo6U3RhdGUgV29y
a2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKQoreworICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX3BsYW5zLmZpbmQocHJvZmlsZWRCbG9jayk7CisgICAgaWYgKGl0ZXIgPT0gbV9wbGFucy5l
bmQoKSkKKyAgICAgICAgcmV0dXJuIE5vdEtub3duOworICAgIHJldHVybiBpdGVyLT52YWx1ZS0+
aXNDb21waWxlZCA/IENvbXBpbGVkIDogQ29tcGlsaW5nOworfQorCitWZWN0b3I8UmVmUHRyPENv
ZGVCbG9jaz4gPiBXb3JrbGlzdDo6d2FpdFVudGlsQWxsRm9yVk1BcmVDb21wbGV0ZShWTSYgdm0p
Cit7CisgICAgLy8gV2FpdCBmb3IgYWxsIG9mIHRoZSBwbGFucyBmb3IgdGhlIGdpdmVuIFZNIHRv
IGNvbXBsZXRlLCBhbmQgY29sbGVjdCB0aGUKKyAgICAvLyBDb2RlQmxvY2sqJ3MgdGhhdCBhcmUg
dGhlIGtleXMgdG8gdGhvc2UgcGxhbnMuIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCB3ZQorICAgIC8v
IHdhbnQgYWxsIG9mIHRoZSBjYWxsZXIgVk0ncyBwbGFucyB0byBiZSBkb25lLiBXZSBkb24ndCBj
YXJlIGFib3V0IGFueQorICAgIC8vIG90aGVyIFZNJ3MgcGxhbnMsIGFuZCB3ZSB3b24ndCBhdHRl
bXB0IHRvIGNvbXBsZXRlIHRob3NlLiBBZnRlciB3ZQorICAgIC8vIHJlbGVhc2UgdGhpcyBsb2Nr
LCB3ZSBrbm93IHRoYXQgYWx0aG91Z2ggb3RoZXIgVk1zIG1heSBzdGlsbCBiZSBhZGRpbmcKKyAg
ICAvLyBwbGFucywgb3VyIFZNIHdpbGwgbm90IGJlLgorICAgIFZlY3RvcjxSZWZQdHI8Q29kZUJs
b2NrPiA+IGtleUJsb2NrczsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBib29sIGFsbEFyZUNvbXBsZXRl
ZCA9IHRydWU7CisgICAgICAgICAgICBQbGFuTWFwOjppdGVyYXRvciBlbmQgPSBtX3BsYW5zLmVu
ZCgpOworICAgICAgICAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKCZpdGVy
LT52YWx1ZS0+dm0gIT0gJnZtKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLT5pc0NvbXBpbGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIGFsbEFyZUNvbXBsZXRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChhbGxBcmVDb21wbGV0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgUGxhbk1hcDo6aXRlcmF0b3IgZW5kID0gbV9wbGFucy5lbmQo
KTsKKyAgICAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAoJml0ZXItPnZhbHVlLT52
bSAhPSAmdm0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBrZXlCbG9j
a3MuYXBwZW5kKGl0ZXItPmtleSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGtleUJs
b2NrczsKK30KKwordm9pZCBXb3JrbGlzdDo6Y29tcGxldGVBbGxGb3JWTShWTSYgdm0pCit7Cisg
ICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+ID4ga2V5QmxvY2tzID0gd2FpdFVudGlsQWxsRm9y
Vk1BcmVDb21wbGV0ZSh2bSk7CisgICAgCisgICAgLy8gTm93IGNvbXBsZXRlIGFsbCBvZiB0aGUg
cGxhbnMgZm9yIHRoaXMgVk0uCisgICAgZm9yICh1bnNpZ25lZCBpID0ga2V5QmxvY2tzLnNpemUo
KTsgaS0tOykKKyAgICAgICAgY29tcGxldGVBbmRTY2hlZHVsZU9TUihrZXlCbG9ja3NbaV0uZ2V0
KCkpOworfQorCit2b2lkIFdvcmtsaXN0OjpydW5UaHJlYWQoKQoreworICAgIExvbmdMaXZlZFN0
YXRlIGxvbmdMaXZlZFN0YXRlOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgUmVmUHRy
PFBsYW4+IHBsYW47CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgICAgICAgICAgd2hpbGUgKG1fcXVldWUuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgIHBsYW4gPSBtX3F1
ZXVlLnRha2VGaXJzdCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXBsYW4p
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBwbGFuLT5jb21waWxlSW5U
aHJlYWQobG9uZ0xpdmVkU3RhdGUpOworICAgICAgICBjb21wbGV0ZUFzeW5jaHJvbm91c1BsYW4o
cGxhbi5nZXQoKSk7CisgICAgfQorfQorCit2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFzeW5jaHJv
bm91c1BsYW4oUGxhbiogcGxhbikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsK
KyAgICBwbGFuLT5rZXkoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgp
OworICAgIHBsYW4tPmlzQ29tcGlsZWQgPSB0cnVlOworICAgIG1fY29uZGl0aW9uLmJyb2FkY2Fz
dCgpOworfQorCit2b2lkIFdvcmtsaXN0Ojp0aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCkK
K3sKKyAgICBzdGF0aWNfY2FzdDxXb3JrbGlzdCo+KGFyZ3VtZW50KS0+cnVuVGhyZWFkKCk7Cit9
CisKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RLZXlPbmNl
ID0gUFRIUkVBRF9PTkNFX0lOSVQ7CitzdGF0aWMgV29ya2xpc3QqIHRoZUdsb2JhbFdvcmtsaXN0
OworCitzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKCkKK3sKKyAgICB0
aGVHbG9iYWxXb3JrbGlzdCA9IFdvcmtsaXN0OjpjcmVhdGUoKS5sZWFrUmVmKCk7Cit9CisKK1dv
cmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpCit7CisgICAgcHRocmVhZF9vbmNlKCZpbml0aWFsaXpl
R2xvYmFsV29ya2xpc3RLZXlPbmNlLCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKTsKKyAg
ICByZXR1cm4gdGhlR2xvYmFsV29ya2xpc3Q7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdX
b3JrbGlzdF9oCisjZGVmaW5lIERGR1dvcmtsaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdQbGFuLmgiCisjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgV29ya2xpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrbGlzdD4gewor
cHVibGljOgorICAgIH5Xb3JrbGlzdCgpOworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdv
cmtsaXN0PiBjcmVhdGUoKTsKKyAgICAKKyAgICB2b2lkIGVucXVldWUoUGFzc1JlZlB0cjxQbGFu
Pik7CisgICAgCisgICAgLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvOgorICAgIC8vIFZlY3RvcjxS
ZWZQdHI8Q29kZUJsb2NrPiA+IGJsb2NrcyA9IHdvcmtsaXN0LT53YWl0VW50aWxBbGxGb3JWTUFy
ZUNvbXBsZXRlKHZtKTsKKyAgICAvLyBmb3IgKENvZGVCbG9jayogYmxvY2sgaW4gYmxvY2tzKQor
ICAgIC8vICAgICB3b3JrbGlzdC0+Y29tcGxldGVBbmRTY2hlZHVsZU9TUihibG9jayk7CisgICAg
dm9pZCBjb21wbGV0ZUFsbEZvclZNKFZNJik7CisgICAgCisgICAgVmVjdG9yPFJlZlB0cjxDb2Rl
QmxvY2s+ID4gd2FpdFVudGlsQWxsRm9yVk1BcmVDb21wbGV0ZShWTSYpOworICAgIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBsZXRlQW5kU2NoZWR1bGVPU1IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
KTsKKyAgICAKKyAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQg
fTsKKyAgICBTdGF0ZSBjb21waWxhdGlvblN0YXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jayk7
CisgICAgCitwcml2YXRlOgorICAgIFdvcmtsaXN0KCk7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bigpOworICAgIAorICAgIHZvaWQgcnVuVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgdGhyZWFk
RnVuY3Rpb24odm9pZCogYXJndW1lbnQpOworICAgIAorICAgIHZvaWQgY29tcGxldGVBc3luY2hy
b25vdXNQbGFuKFBsYW4qKTsKKworICAgIERlcXVlPFJlZlB0cjxQbGFuPiA+IG1fcXVldWU7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxDb2RlQmxvY2s+LCBSZWZQdHI8UGxhbj4gPiBQbGFu
TWFwOworICAgIFBsYW5NYXAgbV9wbGFuczsKKyAgICBNdXRleCBtX2xvY2s7CisgICAgLy8gV2Ug
YnJvYWRjYXN0IG9uIHRoaXMgY29uZGl0aW9uIHdoZW5ldmVyOgorICAgIC8vIC0gU29tZXRoaW5n
IGlzIGVucXVldWVkLgorICAgIC8vIC0gU29tZXRoaW5nIGlzIGNvbXBsZXRlZC4KKyAgICBUaHJl
YWRDb25kaXRpb24gbV9jb25kaXRpb247CisgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZDsK
K307CisKKy8vIEZvciBub3cgd2UgdXNlIGEgc2luZ2xlIGdsb2JhbCB3b3JrbGlzdC4gSXQncyBu
b3QgY2xlYXIgdGhhdCB0aGlzCisvLyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBpdCBp
cyB3aGF0IHdlIGRvLCBmb3Igbm93LiBUaGlzIGZ1bmN0aW9uCisvLyB3aWxsIGxhemlseSBjcmVh
dGUgb25lIHdoZW4gaXQncyBuZWVkZWQuIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgY2FsbGVkCisv
LyBmcm9tIERGR0RyaXZlci5jcHAsIHdoZW4gaXQgYWN0dWFsbHkgd2FudHMgdG8gZW5xdWV1ZSBz
b21ldGhpbmcuCitXb3JrbGlzdCogZ2xvYmFsV29ya2xpc3QoKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdX
b3JrbGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAxNTAzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIK
ICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvcklu
bGluZXMuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlD
YWxsYmFjay5oIgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgogI2luY2x1ZGUgIkhlYXBT
dGF0aXN0aWNzLmgiCkBAIC03MDMsOCArNzA0LDI1IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2Vl
cFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpB
VkFTQ1JJUFRDT1JFX0dDX0JFR0lOKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25J
blByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAg
ICBWZWN0b3I8UmVmUHRyPENvZGVCbG9jaz4gPiBrZXlCbG9ja3M7CisgICAgaWYgKG1fdm0tPndv
cmtsaXN0KQorICAgICAgICBrZXlCbG9ja3MgPSBtX3ZtLT53b3JrbGlzdC0+d2FpdFVudGlsQWxs
Rm9yVk1BcmVDb21wbGV0ZSgqbV92bSk7CisjZW5kaWYKKyAgICAKICAgICBtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOwogCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gRG8g
dGhlIGNvbXBsZXRpb24gd2hpbGUgaW5kaWNhdGluZyB0aGF0IHdlJ3JlIGluIHRoZSBHQywgc28g
dGhhdCB3ZQorICAgIC8vIGRvbid0IHRyeSB0byByZWN1cnNpdmVseSBHQy4KKyAgICBpZiAobV92
bS0+d29ya2xpc3QpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0ga2V5QmxvY2tzLnNpemUo
KTsgaS0tOykKKyAgICAgICAgICAgIG1fdm0tPndvcmtsaXN0LT5jb21wbGV0ZUFuZFNjaGVkdWxl
T1NSKGtleUJsb2Nrc1tpXS5nZXQoKSk7CisgICAgfQorICAgIGtleUJsb2Nrcy5yZXNpemUoMCk7
CisjZW5kaWYKKyAgICAKICAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPndpbGxDb2xsZWN0KCk7CiAK
ICAgICBkb3VibGUgbGFzdEdDU3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTExMCw2ICsxMTAsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1lbnRh
bFN3ZWVwZXIqIHN3ZWVwZXIoKTsKIAorICAgICAgICAvLyB0cnVlIGlmIGNvbGxlY3Rpb24gaXMg
aW4gcHJvZ3Jlc3MKKyAgICAgICAgaW5saW5lIGJvb2wgaXNDb2xsZWN0aW5nKCk7CiAgICAgICAg
IC8vIHRydWUgaWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCiAg
ICAgICAgIGlubGluZSBib29sIGlzQnVzeSgpOwogICAgICAgICAKQEAgLTI5Myw2ICsyOTUsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
IT0gTm9PcGVyYXRpb247CiAgICAgfQogCisgICAgYm9vbCBIZWFwOjppc0NvbGxlY3RpbmcoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBDb2xsZWN0aW9u
OworICAgIH0KKwogICAgIGlubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2Vs
bCkKICAgICB7CiAgICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhl
YXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lv
biAxNTAzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgor
I2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRl
ICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCkBAIC04OTgs
NiArODk5LDEzIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIH0K
IAogI2lmIEVOQUJMRShERkdfSklUKQorc3RhdGljIGJvb2wgbG9nT1NSKCkKK3sKKyAgICByZXR1
cm4gT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uKCkKKyAgICAgICAgfHwgT3B0aW9uczo6c2hv
d0Rpc2Fzc2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KCk7
Cit9CisKIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogewogICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTkwNiwzMSArOTE0LDU1IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0g
c3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCk7CiAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NS
KQotICAgIGRhdGFMb2coCi0gICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgb3B0aW1pemUg
d2l0aCBieXRlY29kZUluZGV4ID0gIiwgYnl0ZWNvZGVJbmRleCwKLSAgICAgICAgIiwgZXhlY3V0
ZUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAgICIs
IG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKSwKLSAgICAgICAgIiwgZXhpdENvdW50ZXIgPSAiKTsKLSAgICBpZiAoY29k
ZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQotICAgICAgICBkYXRhTG9nKGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKS0+b3NyRXhpdENvdW50ZXIoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBkYXRhTG9nKCJOL0EiKTsKLSAgICBkYXRhTG9nKCJcbiIpOwotI2VuZGlmCisgICAgaWYgKGxv
Z09TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBF
bnRlcmVkIG9wdGltaXplIHdpdGggYnl0ZWNvZGVJbmRleCA9ICIsIGJ5dGVjb2RlSW5kZXgsCisg
ICAgICAgICAgICAiLCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNv
dW50ZXIoKSwKKyAgICAgICAgICAgICIsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGNv
ZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwKKyAgICAgICAgICAgICIsIGV4
aXRDb3VudGVyID0gIik7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxh
Y2VtZW50KCkpCisgICAgICAgICAgICBkYXRhTG9nKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+
b3NyRXhpdENvdW50ZXIoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRhdGFMb2coIk4v
QSIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgIH0KIAogICAgIGlmICghY29kZUJsb2Nr
LT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIGNvZGVC
bG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NS
KQotICAgICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gb3B0aW1pemUgIiwgKmNvZGVCbG9j
aywgIiB5ZXQuXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAobG9nT1NSKCkpCisgICAgICAgICAg
ICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQu
XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmIChjb2RlQmxvY2stPmhhc09w
dGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAg
ICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7Ci0jZW5kaWYKKyAgICAKKyAgICBERkc6Oldv
cmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChzdGFja0ZyYW1lLnZtLT53b3Jr
bGlzdCkKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHN0YWNrRnJhbWUudm0tPndvcmtsaXN0LT5j
b21waWxhdGlvblN0YXRlKGNvZGVCbG9jayk7CisgICAgZWxzZQorICAgICAgICB3b3JrbGlzdFN0
YXRlID0gREZHOjpXb3JrbGlzdDo6Tm90S25vd247CisgICAgCisgICAgLy8gV2UgY2Fubm90IGJl
IGluIHRoZSBwcm9jZXNzIG9mIGFzeW5jaHJvbm91cyBjb21waWxhdGlvbiBhbmQgYWxzbyBoYXZl
IGFuIG9wdGltaXplZAorICAgIC8vIHJlcGxhY2VtZW50LgorICAgIFJFTEVBU0VfQVNTRVJUKAor
ICAgICAgICAhKHdvcmtsaXN0U3RhdGUgIT0gREZHOjpXb3JrbGlzdDo6Tm90S25vd24gJiYgY29k
ZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSk7CisgICAgCisgICAgaWYgKHdvcmts
aXN0U3RhdGUgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgICAgIGNvZGVCbG9j
ay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxlZCkgewor
ICAgICAgICBpZiAobG9nT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJJbnN0YWxsaW5nIGRl
ZmVycmVkIGNvbXBpbGF0aW9uIGZvciAiLCAqY29kZUJsb2NrLCAiLlxuIik7CisgICAgICAgIAor
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBzdGFja0ZyYW1lLnZtLT53b3JrbGlz
dC0+Y29tcGxldGVBbmRTY2hlZHVsZU9TUihjb2RlQmxvY2spOworICAgICAgICBpZiAobG9nT1NS
KCkpCisgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBvcHRpbWl6aW5nIGNvbXBpbGF0aW9u
IG9mICIsICpjb2RlQmxvY2ssICIgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOworICAgICAgICAK
KyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfSBlbHNlIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2Vt
ZW50KCkpIHsKKyAgICAgICAgaWYgKGxvZ09TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29u
c2lkZXJpbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSwgIi5cbiIpOwogICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNl
bWVudCwgdGhlbiBpdCBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgd2UgZW50ZXJlZAogICAgICAgICAv
LyBjdGlfb3B0aW1pemUgZnJvbSBhIGxvb3AuIFRoYXQncyBiZWNhdXNlIGlzIHRoZXJlJ3MgYW4g
b3B0aW1pemVkIHJlcGxhY2VtZW50LAogICAgICAgICAvLyB0aGVuIGFsbCBjYWxscyB0byB0aGlz
IGZ1bmN0aW9uIHdpbGwgYmUgcmVsaW5rZWQgdG8gdGhlIHJlcGxhY2VtZW50IGFuZCBzbwpAQCAt
OTQ1LDYwICs5NzcsMzkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAg
ICAgICAgIC8vIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpIHRvIGFsd2F5cyByZXR1cm4g
dHJ1ZS4gQnV0IHdlIG1ha2UgaXQgZG8gc29tZQogICAgICAgICAvLyBhZGRpdGlvbmFsIGNoZWNr
aW5nIGFueXdheSwgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgcmVjb21waWxhdGlvbiB0aHJhc2hp
bmcuCiAgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1p
emVGcm9tTG9vcE5vdygpKSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAg
ICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywg
IigiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiKSAoaW4gbG9vcCkuXG4iKTsKLSNlbmRp
ZgorICAgICAgICAgICAgaWYgKGxvZ09TUigpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAgICAgIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNv
ZGVCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgIigiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpLCAiKSAoaW4gbG9vcCkuXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvZGVC
bG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkpIHsK
LSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZygiRGVsYXlp
bmcgb3B0aW1pemF0aW9uIGZvciAiLCAqY29kZUJsb2NrLCAiIChpbiBsb29wKSBiZWNhdXNlIG9m
IGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKGxv
Z09TUigpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAg
IkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAgICAg
ICAgICAgIiAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxuIik7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmlu
ZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7Ci0jZW5kaWYK
KyAgICAgICAgaWYgKGxvZ09TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBv
cHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKICAgICAgICAgQ29t
cGlsYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxv
Y2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvbigpCi0gICAgICAg
ICAgICB8fCBPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKQotICAgICAgICAgICAgfHwgT3B0aW9u
czo6c2hvd0RGR0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIGlmIChsb2dPU1IoKSkgewogICAgICAg
ICAgICAgZGF0YUxvZygiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAi
IHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQot
ICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBkYXRhTG9nKCJXQVJOSU5HOiBvcHRpbWl6
ZWQgY29tcGlsYXRpb24gZmFpbGVkIHdpdGggYSBKUyBlcnJvci5cbiIpOwotI2Vsc2UKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKGVycm9yKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBm
YWlsZWQgd2l0aCBhIEpTIGVycm9yLlxuIik7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKSA9PSAoY29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpICE9IGNvZGVCbG9jaykpOwotICAgICAgICBzd2l0Y2ggKHJl
c3VsdCkgewotICAgICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAgICAgICBjYXNlIENv
bXBpbGF0aW9uRGVmZXJyZWQ6Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAg
ICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBmYWlsZWQuXG4iKTsKLSNl
bmRpZgotICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENv
ZGU6OkJhc2VsaW5lSklUKTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55
dGltZVNvb24oKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBDb21waWxhdGlv
bkludmFsaWRhdGVkOgotICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgp
ID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICAgICAgICAgIC8vIFJldHJ5IHdpdGggZXhw
b25lbnRpYWwgYmFja29mZi4KLSAgICAgICAgICAgIGNvZGVCbG9jay0+Y291bnRSZW9wdGltaXph
dGlvbigpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7Cisg
ICAgICAgIGNvZGVCbG9jay0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KHJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNj
ZXNzZnVsKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9
IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKQEAgLTEwMTQsMzIgKzEwMjUsMjggQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgfQogICAgIAogICAgIGlmICh2b2lk
KiBhZGRyZXNzID0gREZHOjpwcmVwYXJlT1NSRW50cnkoY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2Rl
QmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7Ci0gICAgICAgIGlmIChPcHRpb25zOjpzaG93REZHRGlz
YXNzZW1ibHkoKSkgeworICAgICAgICBpZiAobG9nT1NSKCkpIHsKICAgICAgICAgICAgIGRhdGFM
b2coCiAgICAgICAgICAgICAgICAgIlBlcmZvcm1pbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4g
IiwgKm9wdGltaXplZENvZGVCbG9jaywgIiwgYWRkcmVzcyAiLAogICAgICAgICAgICAgICAgIFJh
d1BvaW50ZXIoKFNUVUJfUkVUVVJOX0FERFJFU1MpLnZhbHVlKCkpLCAiIC0+ICIsIFJhd1BvaW50
ZXIoYWRkcmVzcyksICIuXG4iKTsKICAgICAgICAgfQotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBzdWNjZWVk
ZWQsIHBlcmZvcm1pbmcgT1NSIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJsb2NrLT5vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOwotI2VuZGlmCiAKICAgICAgICAgY29kZUJsb2Nr
LT5vcHRpbWl6ZVNvb24oKTsKICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoYWRkcmVz
cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKLSAgICBkYXRhTG9nKCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgc3VjY2VlZGVk
LCBPU1IgZmFpbGVkLCBhZnRlciBhIGRlbGF5IG9mICIsIGNvZGVCbG9jay0+b3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyKCksICIuXG4iKTsKLSNlbmRpZgorCisgICAgaWYgKGxvZ09TUigpKSB7Cisg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyAiLCAqY29kZUJsb2NrLCAi
IC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksCisgICAgICAgICAgICAiIHN1Y2NlZWRl
ZCwgT1NSIGZhaWxlZCwgYWZ0ZXIgYSBkZWxheSBvZiAiLAorICAgICAgICAgICAgY29kZUJsb2Nr
LT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOworICAgIH0KIAogICAgIC8vIENv
dW50IHRoZSBPU1IgZmFpbHVyZSBhcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUuIElmIHRoaXMgaGFw
cGVucyBhIGxvdCwgdGhlbgogICAgIC8vIHJlb3B0aW1pemUuCiAgICAgb3B0aW1pemVkQ29kZUJs
b2NrLT5jb3VudE9TUkV4aXQoKTsKICAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQot
ICAgIGRhdGFMb2coIkVuY291bnRlcmVkIE9TUiBmYWlsdXJlICIsICpjb2RlQmxvY2ssICIgLT4g
IiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIi5cbiIpOwotI2VuZGlmCi0KICAgICAvLyBX
ZSBhcmUgYSBsb3QgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgdHJpZ2dlcmluZyByZW9wdGltaXph
dGlvbiBhZnRlciBPU1IgZmFpbHVyZSB0aGFuCiAgICAgLy8gYmVmb3JlIGl0LiBJZiB3ZSBlbnRl
ciB0aGUgb3B0aW1pemVfZnJvbV9sb29wIHRyaWdnZXIgd2l0aCBhIGJ1Y2tldCBmdWxsIG9mIGZh
aWwKICAgICAvLyBhbHJlYWR5LCB0aGVuIHdlIHJlYWxseSB3b3VsZCBsaWtlIHRvIHJlb3B0aW1p
emUgaW1tZWRpYXRlbHkuIEJ1dCB0aGlzIGNhc2UgY292ZXJzCkBAIC0xMDQ5LDkgKzEwNTYsMTEg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgLy8gcmlnaHQgbm93
LiBTbywgd2Ugb25seSB0cmlnZ2VyIHJlb3B0aW1pemF0aW9uIG9ubHkgdXBvbiB0aGUgbW9yZSBj
b25zZXJ2YXRpdmUgKG5vbi1sb29wKQogICAgIC8vIHJlb3B0aW1pemF0aW9uIHRyaWdnZXIuCiAg
ICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6ZU5vdygpKSB7Ci0jaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyByZW9w
dGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2Vt
ZW50KCksICIgKGFmdGVyIE9TUiBmYWlsKS5cbiIpOwotI2VuZGlmCisgICAgICAgIGlmIChsb2dP
U1IoKSkgeworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAiVHJpZ2dlcmlu
ZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsCisgICAgICAgICAgICAg
ICAgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIiAoYWZ0ZXIgT1NSIGZhaWwpLlxuIik7Cisg
ICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJC
eXRlY29kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJCeXRlY29kZXMuaAkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcg
KzI5LDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIgotI2luY2x1ZGUgPHd0
Zi9CeXRlU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQ29uY3VycmVudEpJVExvY2tfaAorI2RlZmluZSBDb25jdXJyZW50
SklUTG9ja19oCisKKyNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3Rm
L05vTG9jay5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJ
VCkKK3R5cGVkZWYgQnl0ZVNwaW5Mb2NrIENvbmN1cnJlbnRKSVRMb2NrOwordHlwZWRlZiBCeXRl
U3BpbkxvY2tlciBDb25jdXJyZW50SklUTG9ja2VyOworI2Vsc2UKK3R5cGVkZWYgTm9Mb2NrIENv
bmN1cnJlbnRKSVRMb2NrOwordHlwZWRlZiBOb0xvY2tMb2NrZXIgQ29uY3VycmVudEpJVExvY2tl
cjsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENvbmN1cnJlbnRK
SVRMb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9u
SGFybmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGlvbkhhcm5lc3MuaAkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTAg
KzEwMiwxNCBAQCBpbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgaW5zdGFsbE9wdGltaXplCiAgICAg
aWYgKG51bVBhcmFtZXRlcnMpCiAgICAgICAgICpudW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgCi0gICAgaWYgKGppdENvZGUpCi0gICAgICAgIGNvZGVCbG9j
ay0+dm0oKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpjb2RlQmxvY2spICsg
aml0Q29kZS0+c2l6ZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvZGVCbG9jay0+dm0oKS0+aGVh
cC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpjb2RlQmxvY2spKTsKKyAgICAvLyBXZSBj
b3VsZCBiZSBpbnN0YWxsaW5nIG9wdGltaXplZCBjb2RlIGR1ZSB0byB3b3JrbGlzdCBmbHVzaCBp
bnNpZGUgb2YgR0MuIFdlIGRvbid0CisgICAgLy8gdGhlbiB3YW50IHRvIHJlY3Vyc2l2ZWx5IEdD
LgorICAgIGlmICghY29kZUJsb2NrLT52bSgpLT5oZWFwLmlzQnVzeSgpKSB7CisgICAgICAgIGlm
IChqaXRDb2RlKQorICAgICAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJh
TWVtb3J5Q29zdChzaXplb2YoKmNvZGVCbG9jaykgKyBqaXRDb2RlLT5zaXplKCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVwb3J0RXh0cmFNZW1v
cnlDb3N0KHNpemVvZigqY29kZUJsb2NrKSk7CisgICAgfQogICAgIAogICAgIGlmIChzaW5rICE9
IGNvZGVCbG9jaykgewogICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgR0MgYW5kIGRl
Y2lkZSB0aGF0IHRoZSBjb2RlIGlzIGludmFsaWQuCkBAIC0xNDEsMTIgKzE0NSwxNSBAQCBpbmxp
bmUgQ29tcGlsYXRpb25SZXN1bHQgcHJlcGFyZUZ1bmN0aW9uCiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+CiBpbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZl
cnJlZE9wdGltaXplZENvZGUoCi0gICAgUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4sIFJlZlB0
cjxDb2RlQmxvY2tUeXBlPiYgc2luaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAorICAgIFBh
c3NSZWZQdHI8REZHOjpQbGFuPiBwYXNzZWRQbGFuLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNp
bmssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIq
IGppdENvZGVXaXRoQXJpdHlDaGVjaywgaW50KiBudW1QYXJhbWV0ZXJzKQogeworICAgIFJlZlB0
cjxERkc6OlBsYW4+IHBsYW4gPSBwYXNzZWRQbGFuOworICAgIENvbXBpbGF0aW9uUmVzdWx0IHJl
c3VsdCA9IERGRzo6dHJ5RmluYWxpemVQbGFuKHBsYW4sIGppdENvZGUsIGppdENvZGVXaXRoQXJp
dHlDaGVjayk7CisgICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAg
ICAgIHBsYW4tPmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygp
OwogICAgIHJldHVybiBpbnN0YWxsT3B0aW1pemVkQ29kZSgKLSAgICAgICAgREZHOjp0cnlGaW5h
bGl6ZVBsYW4ocGxhbiwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKSwKLSAgICAgICAg
c2luaywgc3RhdGljX2Nhc3Q8Q29kZUJsb2NrVHlwZSo+KHBsYW4tPmNvZGVCbG9jay5nZXQoKSks
IGppdENvZGUsCisgICAgICAgIHJlc3VsdCwgc2luaywgc3RhdGljX2Nhc3Q8Q29kZUJsb2NrVHlw
ZSo+KHBsYW4tPmNvZGVCbG9jay5nZXQoKSksIGppdENvZGUsCiAgICAgICAgIGppdENvZGVXaXRo
QXJpdHlDaGVjayA/ICpqaXRDb2RlV2l0aEFyaXR5Q2hlY2sgOiBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIoKSwKICAgICAgICAgbnVtUGFyYW1ldGVycyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg4
LDYgKzg4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihib29sLCBlbmFibGVMTFZNRmFzdElT
ZWwsIHRydWUpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZtT3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwK
ICAgICBcCisgICAgdihib29sLCBlbmFibGVDb25jdXJyZW50SklULCB0cnVlKSBcCisgICAgXAog
ICAgIHYoYm9vbCwgZW5hYmxlUHJvZmlsZXIsIGZhbHNlKSBcCiAgICAgXAogICAgIHYodW5zaWdu
ZWQsIG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxMDAwMCkg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0cnVjdHVyZV9oCiAK
ICNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgog
I2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNs
dWRlICJKU0NlbGwuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgi
CiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlIDx3
dGYvQnl0ZVNwaW5Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpA
QCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAg
IAotICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7Ci0gICAgdHlwZWRlZiBCeXRlU3Bpbkxv
Y2tlciBMb2NrZXI7CisgICAgdHlwZWRlZiBDb25jdXJyZW50SklUTG9jayBMb2NrOworICAgIHR5
cGVkZWYgQ29uY3VycmVudEpJVExvY2tlciBMb2NrZXI7CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBU
eXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSA9IE5vbkFycmF5LCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSA9IDApOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxNTAzNDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxH
cm93T3V0T2ZMCiAKIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+JiBT
dHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQogewotICAgIEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkg
fHwgIWdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNCdXN5KCkpOworICAgIEFTU0VSVCghZ2xv
YmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNDb2xsZWN0aW5nKCkp
OwogICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTUwMzQ5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBTeW1ib2xUYWJsZV9oCiAjZGVmaW5lIFN5
bWJvbFRhYmxlX2gKIAorI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5
c0lubGluZS5oPgpAQCAtMzQzLDggKzM0NCw4IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUluZGV4SGFz
aFRyYWl0cyA6IEhhc2gKIGNsYXNzIFN5bWJvbFRhYmxlIHsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBTeW1ib2xUYWJsZUVudHJ5LCBJZGVudGlmaWVy
UmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8U3RyaW5nSW1wbD4gPiwgU3ltYm9sVGFibGVJbmRl
eEhhc2hUcmFpdHM+IE1hcDsKLSAgICB0eXBlZGVmIEJ5dGVTcGluTG9jayBMb2NrOwotICAgIHR5
cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgTG9ja2VyOworICAgIHR5cGVkZWYgQ29uY3VycmVudEpJVExv
Y2sgTG9jazsKKyAgICB0eXBlZGVmIENvbmN1cnJlbnRKSVRMb2NrZXIgTG9ja2VyOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3ltYm9sVGFibGUoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
U3ltYm9sVGFibGUoKTsKQEAgLTQzNCw3ICs0MzUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IE1hcCBtX21hcDsKIHB1YmxpYzoKLSAgICBtdXRhYmxlIEJ5dGVTcGluTG9jayBtX2xvY2s7Cisg
ICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CiB9OwogCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbW1vbklk
ZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKKyNpbmNsdWRlICJE
RkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUg
IkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
QEAgLTI1MywxMiArMjU0LDE4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFw
VHlwZSkKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKLSAgICAg
ICAgbV9kZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOworICAg
ICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOwogI2Vu
ZGlmCiB9CiAKIFZNOjp+Vk0oKQogeworICAgIC8vIE1ha2Ugc3VyZSBjb25jdXJyZW50IGNvbXBp
bGF0aW9ucyBhcmUgZG9uZS4KKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAod29ya2xpc3Qp
CisgICAgICAgIHdvcmtsaXN0LT5jb21wbGV0ZUFsbEZvclZNKCp0aGlzKTsKKyNlbmRpZgorICAg
IAogICAgIC8vIENsZWFyIHRoaXMgZmlyc3QgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IHRyaWVzIHRv
IHJlbW92ZSB0aGVtc2VsdmVzIGZyb20gaXQuCiAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVyLmNs
ZWFyKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk3LDYgKzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgbmFtZXNwYWNlIERGRyB7CiAgICAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CisgICAg
Y2xhc3MgV29ya2xpc3Q7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCkBAIC0y
MDcsNyArMjA4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhlYXAgaGVhcDsKICAgICAg
ICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0
YXRlPiBtX2RmZ1N0YXRlOworICAgICAgICBPd25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gZGZn
U3RhdGU7CisgICAgICAgIFJlZlB0cjxERkc6OldvcmtsaXN0PiB3b3JrbGlzdDsKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKIAogICAgICAgICBWTVR5cGUgdm1UeXBlOwpJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE1MDM0OSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTMtMDUtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIGJlIGFibGUgdG8gcnVuIG9uIGEgc2Vw
YXJhdGUgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTI4MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgICogd3RmL0J5dGVTcGluTG9jay5oOgorICAgICAgICBNYWtlIGl0IG5vbi1j
b3B5YWJsZS4gV2UgcHJldmlvdXNseSBoYWQgYnVncyB3aGVyZSB3ZSB1c2VkIEJ5dGVTcGluTG9j
ayBhcyBhIGxvY2tlci4KKyAgICAgICAgQ2xlYXJseSB0aGF0J3MgYmFkLgorCisgICAgICAgICog
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDoKKyAgICAgICAgTWFrZSBpdCB0aHJlYWQtc2FmZSBy
ZWYtY291bnRlZCwgc2luY2Ugd2UgbWF5IG5vdyBiZSBwYXNzaW5nIHRoZW0gYmV0d2VlbiB0aGUK
KyAgICAgICAgY29uY3VycmVudCBKSVQgdGhyZWFkIGFuZCB0aGUgbWFpbiB0aHJlYWQuCisKIDIw
MTMtMDUtMDYgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBD
aGVycnktcGljayBtZXJnZWQgc29tZSBwYXRjaGVzIHRvIHRoZSBGVEwgYnJhbmNoLgpJbmRleDog
U291cmNlL1dURi93dGYvQnl0ZVNwaW5Mb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQnl0ZVNwaW5Mb2NrLmgJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9XVEYvd3RmL0J5
dGVTcGluTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTMgQEAKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8
d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBCeXRl
U3BpbkxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVTcGluTG9jayk7CiBwdWJs
aWM6CiAgICAgQnl0ZVNwaW5Mb2NrKCkKICAgICAgICAgOiBtX2xvY2soMCkKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTQgKzMxLDE0
IEBACiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9SZWRCbGFj
a1RyZWUuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKIGNsYXNzIE1ldGFBbGxvY2F0b3I7CiAKLWNsYXNzIE1ldGFBbGxvY2F0b3JIYW5k
bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJs
YWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgeworY2xhc3MgTWV0YUFs
bG9jYXRvckhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9y
SGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj46
Ok5vZGUgewogcHJpdmF0ZToKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3Iq
LCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CiAgICAg
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202238</attachid>
            <date>2013-05-19 12:04:44 -0700</date>
            <delta_ts>2013-05-19 22:28:23 -0700</delta_ts>
            <desc>fixed more buggies</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>83359</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBA
QAorMjAxMy0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYSBzZXBhcmF0ZSB0aHJl
YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgU3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLiBJdCdzIG5vdCBhbHdheXMgYSBzcGVlZC11cCBh
bmQgSSBoYXZlIHRoaW5ncyB0bworICAgICAgICBpbnZlc3RpZ2F0ZS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgdGhlIGZpbmFsIGJpdCBvZiBjb25jdXJyZW50IEpJVGluZy4gVGhlIGlkZWEg
aXMgdGhhdCB0aGVyZSBpcyBhCisgICAgICAgIHNpbmdsZSBnbG9iYWwgd29ya2xpc3QsIGFuZCBh
IHNpbmdsZSBnbG9iYWwgdGhyZWFkLCB0aGF0IGRvZXMgYWxsCisgICAgICAgIG9wdGltaXppbmcg
Y29tcGlsYXRpb24uIFRoaXMgaXMgdGhlIERGRzo6V29ya2xpc3QuIEl0IGNvbnRhaW5zIGEgcXVl
dWUgb2YKKyAgICAgICAgREZHOjpQbGFucywgYW5kIGEgbWFwIGZyb20gQ29kZUJsb2NrKiAodGhl
IGJhc2VsaW5lIGNvZGUgYmxvY2sgd2UncmUKKyAgICAgICAgdHJ5aW5nIHRvIG9wdGltaXplKSB0
byBERkc6OlBsYW4uIElmIHRoZSBERkdEcml2ZXIgdHJpZXMgdG8gY29uY3VycmVudGx5CisgICAg
ICAgIGNvbXBpbGUgc29tZXRoaW5nLCBpdCBwdXRzIHRoZSBQbGFuIG9uIHRoZSBXb3JrbGlzdC4g
VGhlIFdvcmtsaXN0J3MKKyAgICAgICAgdGhyZWFkIHdpbGwgY29tcGlsZSB0aGF0IFBsYW4gZXZl
bnR1YWxseSwgYW5kIHdoZW4gaXQncyBkb25lLCBpdCB3aWxsCisgICAgICAgIHNpZ25hbCBpdHMg
Y29tcGxldGlvbiBieSAoMSkgbm90aWZ5aW5nIGFueW9uZSB3YWl0aW5nIGZvciB0aGUgV29ya2xp
c3QgdG8KKyAgICAgICAgYmUgZG9uZSwgYW5kICgyKSBmb3JjaW5nIHRoZSBDb2RlQmxvY2s6Om1f
aml0RXhlY3V0ZUNvdW50ZXIgdG8gdGFrZSBzbG93CisgICAgICAgIHBhdGguIFRoZSBuZXh0IEJh
c2VsaW5lIEpJVCBjdGlfb3B0aW1pemUgY2FsbCB3aWxsIHRoZW4gaW5zdGFsbCB0aGUgUGxhbi4K
KyAgICAgICAgTm90ZSB0aGF0ICgxKSBpcyBvbmx5IGZvciB0aGUgR0MgYW5kIFZNIHNodXRkb3du
LCB3aGljaCB3aWxsIHdhbnQgdG8KKyAgICAgICAgZW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IGFu
eSBvdXRzdGFuZGluZyBhc3luYyBjb21waWxhdGlvbnMgYmVmb3JlCisgICAgICAgIHByb2NlZWRp
bmcuICgyKSBpcyB0aGUgYWN0dWFsIHdheSB0aGF0IGNvZGUgdHlwaWNhbGx5IGdldHMgaW5zdGFs
bGVkLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbGwgdmVyeSByYWN5IGJ5IGRlc2lnbi4g
Rm9yIGV4YW1wbGUsIGp1c3QgYXMgd2UgdHJ5IHRvIGZvcmNlIHRoZQorICAgICAgICBleGVjdXRl
IGNvdW50ZXIgdG8gdGFrZSBzbG93IHBhdGgsIHRoZSBtYWluIHRocmVhZCBtYXkgYmUgc2V0dGlu
ZyB0aGUKKyAgICAgICAgZXhlY3V0ZSBjb3VudGVyIHRvIHNvbWUgb3RoZXIgdmFsdWUuIFRoZSBt
YWluIHRocmVhZCBtdXN0IHNldCBpdCB0bworICAgICAgICBhbm90aGVyIHZhbHVlIGJlY2F1c2Ug
KGEpIEpJVCBjb2RlIGlzIGNvbnN0YW50bHkgaW5jcmVtZW50aW5nIHRoZSBjb3VudGVyCisgICAg
ICAgIGluIGEgcmFjeSB3YXksIChiKSB0aGUgY3RpX29wdGltaXplIHNsb3cgcGF0aCB3aWxsIHNl
dCBpdCB0byBzb21lCisgICAgICAgIGxhcmdlLWlzaCBuZWdhdGl2ZSB2YWx1ZSB0byBlbnN1cmUg
dGhhdCBjdGlfb3B0aW1pemUgaXNuJ3QgY2FsbGVkCisgICAgICAgIHJlcGVhdGVkbHksIGFuZCAo
YykgT1NSIGV4aXRzIGZyb20gcHJldmlvdXNseSBqZXR0aXNvbmVkIGNvZGUgYmxvY2tzIG1heQor
ICAgICAgICBzdGlsbCB3YW50IHRvIHJlc2V0IHRoZSBjb3VudGVyIHZhbHVlcy4gVGhpcyAicmFj
ZSIgaXMgbWFkZSBiZW5pZ24sIGJ5CisgICAgICAgIGVuc3VyaW5nIHRoYXQgd2hpbGUgdGhlcmUg
aXMgYW4gYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uLCB3ZSBhdCB3b3JzZSBzZXQKKyAgICAgICAg
dGhlIGNvdW50ZXIgdG8gb3B0aW1pemVBZnRlcldhcm1VcCBhbmQgbmV2ZXIgdG8gZGVmZXJJbmRl
ZmluaXRlbHkuIEhlbmNlCisgICAgICAgIGlmIHRoZSByYWNlIGhhcHBlbnMgdGhlbiB0aGUgd29y
c3QgY2FzZSBpcyB0aGF0IHdlIHdhbnQgYW5vdGhlciB+MTAwMAorICAgICAgICBjb3VudHMgYmVm
b3JlIGluc3RhbGxpbmcgdGhlIG9wdGltaXplZCBjb2RlLgorICAgICAgICB2YWx1ZSBXZSBhdm9p
ZCB0aGlzIGJ5IGVuc3VyaW5nIHRoYXQgaWYgd2UKKyAgICAgICAgd2VyZSB0byBzZXQgdGhlIGV4
ZWN1dGUgY291bnRlciB0byBzb21lIGxhcmdlIHZhbHVlLCB3ZSBkb3VibGUtY2hlY2sgdGhhdAor
ICAgICAgICBjb21waWxhdGlvbiBoYWRuJ3QgYWxyZWFkeSBjb21wbGV0ZWQuIEZvciB0aGUgbW9z
dCBwYXJ0LCB3ZSBhcmUgYWxsb3dlZAorICAgICAgICB0byBnZXQgdGhpcyB3cm9uZzsgdGhlIHdv
cnN0IGNhc2UgaXMgdGhhdCB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZQorICAgICAgICBvcHRpbWl6
ZWQgY29kZSB3aWxsIGhhcHBlbiBhIGJpdCBsYXRlci4gTGlrZWx5IG5vYm9keSB3aWxsIG5vdGlj
ZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBzb2xpZCBzcGVlZC11cCBvbiBTdW5TcGlk
ZXIgKDglKSBhbmQgVjhTcGlkZXIgKDE2JSksIG91ciB0d28KKyAgICAgICAgbWFpbiBjb21waWxl
LXRpbWUgYmVuY2htYXJrcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZG9udE9wdGltaXplQW55dGltZVNvb24pOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50
bHkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucyk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9ja0xvY2suaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogYnl0ZWNv
ZGUvRXhlY3V0aW9uQ291bnRlci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6
OmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKToKKyAgICAgICAgKiBieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmg6CisgICAgICAgIChFeGVjdXRpb25Db3VudGVyKToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyk6CisgICAgICAgICogZGZnL0RG
R0NvbW1vbi5oOgorICAgICAgICAoSlNDOjpERkc6OmVuYWJsZUNvbmN1cnJlbnRKSVQpOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OlBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZCk6
CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6a2V5KToKKyAgICAgICAgKERGRyk6CisgICAgICAg
ICogZGZnL0RGR1BsYW4uaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChQbGFuKToKKyAgICAg
ICAgKiBkZmcvREZHV29ya2xpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OldvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3Jr
bGlzdDo6fldvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0OjplbnF1ZXVlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlz
dDo6Y29tcGxldGVBbmRTY2hlZHVsZU9TUik6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6
OmNvbXBpbGF0aW9uU3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0Ojp3YWl0VW50
aWxBbGxGb3JWTUFyZUNvbXBsZXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y29t
cGxldGVBbGxGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJ1blRocmVhZCk6
CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQXN5bmNocm9ub3VzUGxhbik6
CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnRocmVhZEZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjppbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpnbG9iYWxXb3JrbGlzdCk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKFdvcmtsaXN0KToKKyAgICAgICAgKiBoZWFwL0hl
YXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKiBoZWFwL0hl
YXAuaDoKKyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjppc0NvbGxlY3Rpbmcp
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAo
SlNDOjpsb2dPU1IpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJf
RlVOQ1RJT04pOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmg6CisgICAg
ICAgICogcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmg6CisgICAgICAgIChKU0M6Omlu
c3RhbGxPcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9w
dGltaXplZENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpwcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6
CisgICAgICAgIChTeW1ib2xUYWJsZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAg
ICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChWTSk6CisKIDIwMTMtMDUtMTcg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBn
ZXRDVElTdHViIHNob3VsZCBiZSB0aHJlYWQtc2FmZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzEsNiArMzMxLDkgQEAKIAkJMEZEQjJDRTAxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q4MTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTIxNzQ2QzFGQTAwN0IzQzFCIC8qIENvbXBpbGF0
aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkRCMkNFMTE3NDZDMUY4MDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFNDE3NDZD
RTlGMDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTMxNzQ2Q0U5RDAwN0IzQzFCIC8qIENv
bXBpbGF0aW9uUmVzdWx0LmNwcCAqLzsgfTsKKwkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8q
IERGR1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07
CisJCTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTYxNzQ4MzBBMjAwN0Iz
QzFCIC8qIERGR1dvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRM
b2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRC
MkNFOTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkREQkZCNTE2NjZFRUQ4MDBD
NTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi87IH07CiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzM4LDYgKzEzNDEsOSBAQAogCQkwRkRCMkNEODE3
NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdQbGFuLmg7IHBhdGggPSBkZmcvREZHUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkRCMkNFMTE3NDZDMUY4MDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25SZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEQjJDRTMxNzQ2Q0U5RDAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uUmVzdWx0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmts
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dvcmtsaXN0
LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdC5oOyBwYXRoID0gZGZnL0RGR1dv
cmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0U5MTc0ODk2Qzcw
MDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb25jdXJyZW50SklUTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUEx
NDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NjMzLDYgKzI2MzksNyBAQAogCQkJCTBGREIyQ0UxMTc0NkMxRjgwMDdCM0MxQiAvKiBDb21waWxh
dGlvblJlc3VsdC5oICovLAogCQkJCTk2OUEwOTIyMEVEMUUwOUMwMEYxRjY4MSAvKiBDb21wbGV0
aW9uLmNwcCAqLywKIAkJCQlGNUJCMkJDNTAzMEY3NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5o
ICovLAorCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5o
ICovLAogCQkJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAq
LywKIAkJCQlCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAog
CQkJCUJDRDIwMzQ1MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuY3BwICovLApA
QCAtMzAzMCw2ICszMDM3LDggQEAKIAkJCQkwRjg1QTMxRTE2QUI3NkFFMDA3NzU3MUUgLyogREZH
VmFyaWFkaWNGdW5jdGlvbi5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywK
KwkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovLAorCQkJ
CTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzQ0NSw2ICszNDU0
LDcgQEAKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBY3Rp
dmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyog
Q29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkw
MDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVC
RTQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNTc2LDYgKzM1ODYsNyBAQAogCQkJCUJDMThDNDNGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBOb2Rl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDEwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJl
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZGNUNEMDBCMzQ0
NjAgLyogTnVtYmVyQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNF
ODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDQzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDQ0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MkQzOTM5MTAzRTQ1NjAwMDdEQ0I1MiAvKiBOdW1lcmljU3RyaW5ncy5o
IGluIEhlYWRlcnMgKi8sCkBAIC00MzY2LDYgKzQzNzcsNyBAQAogCQkJCTE0NDY5REU4MTA3RUM3
RTcwMDY1MDQ0NiAvKiBQcm9wZXJ0eVNsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJC
OTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
NEMzM0MxNkFBMkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkRCMkNFNzE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVk
dWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKICNpbmNsdWRlICJERkdSZXBhdGNoLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
ICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRl
ICJJbnRlcnByZXRlci5oIgpAQCAtMjE4MiwxMiArMjE4Myw2IEBAIHZvaWQgQ29kZUJsb2NrOjp2
aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3QKICAgICBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0
aW9uKHZpc2l0b3IpOwogfQogCi0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLXN0YXRpYyBj
b25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSB0cnVlOwotI2Vsc2UKLXN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2VVbmxpbmtpbmcgPSBmYWxzZTsKLSNlbmRpZgotCiB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogewogI2lmIEVOQUJMRShMTElOVCkKQEAgLTIyMDMs
NyArMjE5OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAg
ICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX291dF9vZl9saW5lOgogICAgICAgICAgICAgICAg
IGlmICghY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJrZWQoY3Vy
SW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nRigiQ2xlYXJpbmcgTExJbnQgcHJvcGVydHkgYWNjZXNzIHdpdGggc3RydWN0dXJlICVwLlxu
IiwgY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAg
IGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAg
Y3VySW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kID0gMDsKQEAgLTIyMTYsNyArMjIxMSw3IEBAIHZv
aWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICAg
ICAgJiYgSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmUuZ2V0KCkp
CiAgICAgICAgICAgICAgICAgICAgICYmIEhlYXA6OmlzTWFya2VkKGN1ckluc3RydWN0aW9uWzdd
LnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykgeworICAgICAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IkNsZWFyaW5nIExMSW50IHB1dCB0cmFuc2l0aW9uIHdpdGggc3RydWN0dXJlcyAlcCAtPiAlcCwg
Y2hhaW4gJXAuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9u
WzRdLnUuc3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cklu
c3RydWN0aW9uWzZdLnUuc3RydWN0dXJlLmdldCgpLApAQCAtMjIzNiw3ICsyMjMxLDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2xsaW50Q2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgaWYgKG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkgJiYgIUhlYXA6
OmlzTWFya2VkKG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLmNhbGxlZS5nZXQoKSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmlu
ZyBMTEludCBjYWxsIGZyb20gIiwgKnRoaXMsICJcbiIpOwogICAgICAgICAgICAgICAgIG1fbGxp
bnRDYWxsTGlua0luZm9zW2ldLnVubGluaygpOwogICAgICAgICAgICAgfQpAQCAtMjI0OSw3ICsy
MjQ0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBsaXZlLiBJZiB3ZSBhcmUs
IHRoZW4gamV0dGlzb24uCiAgICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVz
c0R1cmluZ1NjYW4oKSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Q
cm92ZWQpKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgZGF0YUxvZygqdGhpcywgIiBoYXMgZGVh
ZCB3ZWFrIHJlZmVyZW5jZXMsIGpldHRpc29uaW5nIGR1cmluZyBHQy5cbiIpOwogCiAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBiYXNlbGluZSBKSVQga25vd3MgdGhhdCBpdCBzaG91bGQg
cmUtd2FybS11cCBiZWZvcmUKQEAgLTIyODMsNyArMjI3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX3B1dFRv
QmFzZU9wZXJhdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBp
ZiAobV9wdXRUb0Jhc2VPcGVyYXRpb25zW2ldLm1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtl
ZChtX3B1dFRvQmFzZU9wZXJhdGlvbnNbaV0ubV9zdHJ1Y3R1cmUuZ2V0KCkpKSB7Ci0gICAgICAg
ICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgcHV0VG9CYXNlIGlu
Zm8gaW4gIiwgKnRoaXMsICJcbiIpOwogICAgICAgICAgICAgbV9wdXRUb0Jhc2VPcGVyYXRpb25z
W2ldLm1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTIyOTcsNyArMjI5Miw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRpZgogICAgICAg
ICBtX3Jlc29sdmVPcGVyYXRpb25zW2ldLmxhc3QoKS5tX3N0cnVjdHVyZS5jbGVhcigpOwogICAg
ICAgICBpZiAobV9yZXNvbHZlT3BlcmF0aW9uc1tpXS5sYXN0KCkubV9zdHJ1Y3R1cmUgJiYgIUhl
YXA6OmlzTWFya2VkKG1fcmVzb2x2ZU9wZXJhdGlvbnNbaV0ubGFzdCgpLm1fc3RydWN0dXJlLmdl
dCgpKSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAgICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkNsZWFy
aW5nIHJlc29sdmUgaW5mbyBpbiAiLCAqdGhpcywgIlxuIik7CiAgICAgICAgICAgICBtX3Jlc29s
dmVPcGVyYXRpb25zW2ldLmxhc3QoKS5tX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICB9CkBA
IC0yMzEyLDcgKzIzMDcsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoCiAgICAgICAgICAgICAgICAgaWYgKENsb3N1cmVDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBj
YWxsTGlua0luZm8oaSkuc3R1Yi5nZXQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHN0dWItPnN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
fHwgIUhlYXA6OmlzTWFya2VkKHN0dWItPmV4ZWN1dGFibGUoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNsZWFyaW5nIGNs
b3N1cmUgY2FsbCBmcm9tICIsICp0aGlzLCAiIHRvICIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0dWItPmV4ZWN1dGFibGUoKS0+aGFzaEZvcihjYWxsTGlua0luZm8oaSkuc3Bl
Y2lhbGl6YXRpb25LaW5kKCkpLApAQCAtMjMyMSw3ICsyMzE2LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvKGkpLnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFIZWFwOjppc01hcmtlZChjYWxsTGlu
a0luZm8oaSkuY2FsbGVlLmdldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZVVubGlua2luZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJDbGVhcmluZyBjYWxsIGZyb20gIiwgKnRoaXMsICIgdG8gIiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSYXdQb2ludGVyKGNhbGxMaW5rSW5mbyhpKS5jYWxsZWUu
Z2V0KCkpLCAiICgiLApAQCAtMjM2Miw3ICsyMzU3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0
U3R1YkludGVybmFsKFJlcGF0YwogewogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogICAgIAotICAgIGlmICh2
ZXJib3NlVW5saW5raW5nKQorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAg
IGRhdGFMb2coIkNsZWFyaW5nIHN0cnVjdHVyZSBjYWNoZSAoa2luZCAiLCBzdGF0aWNfY2FzdDxp
bnQ+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpLCAiKSBpbiAiLCAqdGhpcywgIi5cbiIpOwogCiAgICAg
c3dpdGNoIChnZXRKSVRUeXBlKCkpIHsKQEAgLTI0MjcsNiArMjQyMiwyNyBAQCB2b2lkIENvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAjZW5kaWYgICAgCiB9CiAKK0NvZGVCbG9j
ayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQoreworI2lmIEVOQUJMRShKSVQpCisgICAg
Ly8gV2hlbiB3ZSdyZSBpbml0aWFsaXppbmcgdGhlIG9yaWdpbmFsIGJhc2VsaW5lIGNvZGUgYmxv
Y2ssIHdlIHdvbid0IGJlIGFibGUKKyAgICAvLyB0byBnZXQgaXRzIHJlcGxhY2VtZW50LiBCdXQg
d2UnbGwga25vdyB0aGF0IGl0J3MgdGhlIG9yaWdpbmFsIGJhc2VsaW5lIGNvZGUKKyAgICAvLyBi
bG9jayBiZWNhdXNlIGl0IHdvbid0IGhhdmUgSklUIGNvZGUgeWV0IGFuZCBpdCB3b24ndCBoYXZl
IGFuIGFsdGVybmF0aXZlLgorICAgIGlmIChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSAm
JiAhYWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgCisgICAgQ29kZUJs
b2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHdo
aWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkpCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0
ZXJuYXRpdmUoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUocmVzdWx0LT5nZXRKSVRUeXBlKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCiBIYW5kbGVySW5mbyogQ29kZUJs
b2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7
CiAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKQEAg
LTI5ODMsOSArMjk5OSwxMiBAQCBkb3VibGUgQ29kZUJsb2NrOjpvcHRpbWl6YXRpb25UaHJlc2hv
bGRTCiAgICAgQVNTRVJUKGluc3RydWN0aW9uQ291bnQpOyAvLyBNYWtlIHN1cmUgdGhpcyBpcyBj
YWxsZWQgb25seSBhZnRlciB3ZSBoYXZlIGFuIGluc3RydWN0aW9uIHN0cmVhbTsgb3RoZXJ3aXNl
IGl0J2xsIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZSBvZiBkLCB3aGljaCBtYWtlcyBubyBzZW5zZS4K
ICAgICAKICAgICBkb3VibGUgcmVzdWx0ID0gZCArIGEgKiBzcXJ0KGluc3RydWN0aW9uQ291bnQg
KyBiKSArIGMgKiBpbnN0cnVjdGlvbkNvdW50OwotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
Ci0gICAgZGF0YUxvZygqdGhpcywgIjogaW5zdHJ1Y3Rpb24gY291bnQgaXMgIiwgaW5zdHJ1Y3Rp
b25Db3VudCwgIiwgc2NhbGluZyBleGVjdXRpb24gY291bnRlciBieSAiLCByZXN1bHQsICIgKiAi
LCBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSwgIlxuIik7Ci0jZW5kaWYKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAq
dGhpcywgIjogaW5zdHJ1Y3Rpb24gY291bnQgaXMgIiwgaW5zdHJ1Y3Rpb25Db3VudCwKKyAgICAg
ICAgICAgICIsIHNjYWxpbmcgZXhlY3V0aW9uIGNvdW50ZXIgYnkgIiwgcmVzdWx0LCAiICogIiwg
Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCksCisgICAgICAgICAgICAiXG4iKTsKKyAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdCAqIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpOwogfQog
CkBAIC0zMDI2LDM0ICszMDQ1LDkwIEBAIGludDMyX3QgQ29kZUJsb2NrOjpjb3VudGVyVmFsdWVG
b3JPcHRpbWkKIAogYm9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRS
ZWFjaGVkKCkKIHsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAobV92bS0+d29ya2xpc3QK
KyAgICAgICAgJiYgbV92bS0+d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUodGhpcykgPT0gREZH
OjpXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4g
bV9qaXRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsK
IH0KIAogdm9pZCBDb2RlQmxvY2s6Om9wdGltaXplTmV4dEludm9jYXRpb24oKQogeworICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGlt
aXppbmcgbmV4dCBpbnZvY2F0aW9uLlxuIik7CiAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXRO
ZXdUaHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkb250T3B0aW1pemVB
bnl0aW1lU29vbigpCiB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ZGF0YUxvZygqdGhpcywgIjogTm90IG9wdGltaXppbmcgYW55dGltZSBzb29uLlxuIik7CiAgICAg
bV9qaXRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOwogfQogCiB2b2lkIENvZGVC
bG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCgpCiB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0aW1pemluZyBhZnRlciB3YXJtLXVw
LlxuIik7CiAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoY291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLCB0aGlzKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6
Om9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKIHsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIGFmdGVyIGxvbmcgd2Fy
bS11cC5cbiIpOwogICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCksIHRoaXMpOwogfQogCiB2b2lkIENv
ZGVCbG9jazo6b3B0aW1pemVTb29uKCkKIHsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIHNvb24uXG4iKTsKICAgICBt
X2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6
ZVNvb24oKSwgdGhpcyk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNs
b3dQYXRoQ29uY3VycmVudGx5KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQor
ICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBGb3JjaW5nIHNsb3cgcGF0aCBjb25jdXJyZW50bHku
XG4iKTsKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHko
KTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25D
b21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCgocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgPT0gKHJlcGxhY2Vt
ZW50KCkgIT0gdGhpcykpOworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBDb21waWxh
dGlvblN1Y2Nlc3NmdWw6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkpKTsKKyAgICAgICAgb3B0aW1pemVO
ZXh0SW52b2NhdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFp
bGVkOgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CisgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBk
byBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQorICAgICAg
ICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRs
eSByYWN5LiBJdCB3b24ndAorICAgICAgICAvLyBuZWNlc3NhcmlseSBndWFyYW50ZWUgYW55dGhp
bmcuIFNvLCB3ZSBtYWtlIHN1cmUgdGhhdCBldmVuIGlmIHRoYXQKKyAgICAgICAgLy8gZnVuY3Rp
b24gZW5kcyB1cCBiZWluZyBhIG5vLW9wLCB3ZSBzdGlsbCBldmVudHVhbGx5IHJldHJ5IGFuZCBy
ZWFsaXplCisgICAgICAgIC8vIHRoYXQgd2UgaGF2ZSBvcHRpbWl6ZWQgY29kZSByZWFkeS4KKyAg
ICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENv
bXBpbGF0aW9uSW52YWxpZGF0ZWQ6CisgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwg
YmFja29mZi4KKyAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICBvcHRpbWl6
ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwog
I2lmIEVOQUJMRShKSVQpCiB1aW50MzJfdCBDb2RlQmxvY2s6OmFkanVzdGVkRXhpdENvdW50VGhy
ZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCiB7CkBAIC0zMTEyLDcgKzMxODcsNyBA
QCBBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JBZGRBcnJheVByCiB2b2lkIENvZGVCbG9j
azo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKAogICAgIE9wZXJhdGlvbklu
UHJvZ3Jlc3Mgb3BlcmF0aW9uLCB1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1
ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcykKIHsKLSAgICBD
b2RlQmxvY2tMb2NrIGxvY2tlcihtX2xvY2spOworICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKICAgICAKICAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMg
PSAwOwogICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlk
ZWQgYnkgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQ
cm9maWxlcygpIHRoZW4gdmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCkBAIC0zMTQ0LDcgKzMyMTks
NyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlCiAKIHZvaWQgQ29k
ZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3Bl
cmF0aW9uKQogewotICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1fbG9jayk7CisgICAgQ29kZUJs
b2NrTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1f
YXJyYXlQcm9maWxlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG1fYXJyYXlQcm9maWxlc1tpXS5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCB0aGlzLCBvcGVyYXRpb24pOwpAQCAtMzE2
Miw5ICszMjM3LDggQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZQog
CiBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogewotI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAqdGhp
cywgIi4uLlxuIik7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBvcHRpbWl6aW5nICIsICp0aGlzLCAiLi4uXG4iKTsK
IAogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVtcFZhbHVlUHJvZmls
ZXMoKTsKQEAgLTMxNzksOSArMzI1MywxNCBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1p
emVOb3coKQogICAgIHVuc2lnbmVkIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXM7CiAgICAgdXBk
YXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKE5vT3BlcmF0aW9uLCBudW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwog
Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiUHJvZmlsZSBob3Ru
ZXNzOiAlbGYgKCV1IC8gJXUpLCAlbGYgKCV1IC8gJXUpXG4iLCAoZG91YmxlKW51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLCBudW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJlck9mVmFsdWVQcm9maWxlcygp
LCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJl
ck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLCBudW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzLCBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAqIG51bWJlck9mVmFsdWVQcm9m
aWxlcygpKTsKLSNlbmRpZgorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAg
ICAgZGF0YUxvZ0YoCisgICAgICAgICAgICAiUHJvZmlsZSBob3RuZXNzOiAlbGYgKCV1IC8gJXUp
LCAlbGYgKCV1IC8gJXUpXG4iLAorICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZkxpdmVOb25B
cmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAg
ICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCksCisgICAgICAgICAgICAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMg
LyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygp
LAorICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcywgVmFsdWVQcm9maWxlOjpu
dW1iZXJPZkJ1Y2tldHMgKiBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CisgICAgfQogCiAgICAg
aWYgKCghbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25B
cmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25z
OjpkZXNpcmVkUHJvZmlsZUxpdmVuZXNzUmF0ZSgpKQogICAgICAgICAmJiAoIXRvdGFsTnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxl
cygpID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlKCkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTAzNDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSwyNSArMTMxLDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDbwogICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxpemF0aW9uRnJvbUlzQ29uc3Ry
dWN0KG1faXNDb25zdHJ1Y3Rvcik7CiAgICAgICAgIH0KICAgICAgICAgCi0jaWYgRU5BQkxFKEpJ
VCkKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoZ2V0SklUVHlwZSgpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIENvZGVCbG9jayogcmVzdWx0ID0g
cmVwbGFjZW1lbnQoKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwotICAgICAgICAgICAg
d2hpbGUgKHJlc3VsdC0+YWx0ZXJuYXRpdmUoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBy
ZXN1bHQtPmFsdGVybmF0aXZlKCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKLSAgICAg
ICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShyZXN1bHQtPmdldEpJVFR5cGUo
KSkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdGhpczsKLSAgICAgICAgfQotI2VuZGlmCisgICAgICAgIENvZGVCbG9jayogYmFzZWxp
bmVWZXJzaW9uKCk7CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OwogCkBAIC04NjUsNiArODQ3LDEwIEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ28KICAgICAgICAgLy8gdG8gdHJpZ2dlciBvcHRpbWl6YXRpb24gaWYgb25lIG9mIHRo
b3NlIGZ1bmN0aW9ucyBiZWNvbWVzIGhvdAogICAgICAgICAvLyBpbiB0aGUgYmFzZWxpbmUgY29k
ZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKTsKKyAgICAKKyAgICAgICAgdm9pZCBmb3Jj
ZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCk7CisgICAgCisgICAgICAgIHZvaWQg
c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0
aW9uUmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tMb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0xvY2suaAkocmV2aXNpb24g
MTUwMzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0xvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTggKzI2LDEyIEBACiAjaWZuZGVmIENvZGVCbG9ja0xv
Y2tfaAogI2RlZmluZSBDb2RlQmxvY2tMb2NrX2gKIAotI2luY2x1ZGUgPHd0Zi9CeXRlU3Bpbkxv
Y2suaD4KLSNpbmNsdWRlIDx3dGYvTm9Mb2NrLmg+CisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExv
Y2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCi10
eXBlZGVmIEJ5dGVTcGluTG9jayBDb2RlQmxvY2tMb2NrOwotdHlwZWRlZiBCeXRlU3BpbkxvY2tl
ciBDb2RlQmxvY2tMb2NrZXI7Ci0jZWxzZQotdHlwZWRlZiBOb0xvY2sgQ29kZUJsb2NrTG9jazsK
LXR5cGVkZWYgTm9Mb2NrTG9ja2VyIENvZGVCbG9ja0xvY2tlcjsKLSNlbmRpZgordHlwZWRlZiBD
b25jdXJyZW50SklUTG9jayBDb2RlQmxvY2tMb2NrOwordHlwZWRlZiBDb25jdXJyZW50SklUTG9j
a2VyIENvZGVCbG9ja0xvY2tlcjsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJ
KHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTEgQEAgRXhlY3V0
aW9uQ291bnRlcjo6RXhlY3V0aW9uQ291bnRlcigpCiAgICAgcmVzZXQoKTsKIH0KIAordm9pZCBF
eGVjdXRpb25Db3VudGVyOjpmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCkKK3sKKyAgICBtX2Nv
dW50ZXIgPSAwOworfQorCiBib29sIEV4ZWN1dGlvbkNvdW50ZXI6OmNoZWNrSWZUaHJlc2hvbGRD
cm9zc2VkQW5kU2V0KENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGlmIChoYXNDcm9zc2Vk
VGhyZXNob2xkKGNvZGVCbG9jaykpCkBAIC0xMjQsMTEgKzEyOSwxMSBAQCBib29sIEV4ZWN1dGlv
bkNvdW50ZXI6OnNldFRocmVzaG9sZChDb2RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgICAgIAotICAgIEFTU0VSVCghaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKTsK
KyAgICBBU1NFUlQoIW1fYWN0aXZlVGhyZXNob2xkIHx8ICFoYXNDcm9zc2VkVGhyZXNob2xkKGNv
ZGVCbG9jaykpOwogICAgICAgICAKICAgICAvLyBDb21wdXRlIHRoZSB0cnVlIHRvdGFsIGNvdW50
LgogICAgIGRvdWJsZSB0cnVlVG90YWxDb3VudCA9IGNvdW50KCk7Ci0gICAgICAgIAorICAgIAog
ICAgIC8vIENvcnJlY3QgdGhlIHRocmVzaG9sZCBmb3IgY3VycmVudCBtZW1vcnkgdXNhZ2UuCiAg
ICAgZG91YmxlIHRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKG1fYWN0aXZl
VGhyZXNob2xkLCBjb2RlQmxvY2spOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMTUwMzQ5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBF
eGVjdXRpb25Db3VudGVyIHsKIHB1YmxpYzoKICAgICBFeGVjdXRpb25Db3VudGVyKCk7CisgICAg
dm9pZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hl
Y2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAg
IGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAgICAgdm9p
ZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayopOwogICAgIHZv
aWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKQEAgLTc0LDcgKzc1LDYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlc2V0KCk7CiAKIHB1YmxpYzoKLQogICAgIC8vIE5CLiBUaGVzZSBhcmUgaW50ZW50aW9u
YWxseSBwdWJsaWMgYmVjYXVzZSBpdCB3aWxsIGJlIG1vZGlmaWVkIGZyb20gbWFjaGluZSBjb2Rl
LgogICAgIAogICAgIC8vIFRoaXMgY291bnRlciBpcyBpbmNyZW1lbnRlZCBieSB0aGUgSklUIG9y
IExMSW50LiBJdCBzdGFydHMgb3V0IG5lZ2F0aXZlIGFuZCBpcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1MDM0
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzAsNyArMjcwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9PSBtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgIENvZGVC
bG9ja0xvY2sgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2Nr
KTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5
IGtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSk7CiAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0
aW9uKGxvY2tlciwga2V5KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCkBAIC04Mzks
NyArODM5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlKEFy
cmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24pCiAgICAgewotICAgICAg
ICBDb2RlQmxvY2tMb2NrIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2sp
OwogICAgICAgICByZXR1cm4gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQobG9ja2VyLCBwcm9maWxl
LCBhY3Rpb24sIGZhbHNlKTsKICAgICB9CkBAIC04NTEsNyArODUxLDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhBcnJheVByb2ZpbGUq
IHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBOb2RlKiBiYXNlKQogICAgIHsKLSAgICAg
ICAgQ29kZUJsb2NrTG9jayBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgCiAgICAgICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jayk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDE1IEBAIGlubGluZSBib29s
IHZhbGlkYXRpb25FbmFibGVkKCkKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCBlbmFibGVDb25j
dXJyZW50SklUKCkKK3sKKyNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCisgICAgcmV0dXJuIE9w
dGlvbnM6OmVuYWJsZUNvbmN1cnJlbnRKSVQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCit9CisKIGVudW0gU3BpbGxSZWdpc3RlcnNNb2RlIHsgTmVlZFRvU3BpbGwsIERvbnRT
cGlsbCB9OwogCiBlbnVtIE5vUmVzdWx0VGFnIHsgTm9SZXN1bHQgfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTEgKzM1LDEzIEBACiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4u
aCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2lu
Y2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5o
IgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIApAQCAtNjYsMTkgKzY4LDIxIEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21w
aWxlKENvbXBpbGUKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogICAgIAogICAg
IGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKLSAgICAgICAgZGF0YUxvZygiREZHIGNvbXBp
bGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJERkcoRHJp
dmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9
ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKKyAgICAKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0
aGF0IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwog
ICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6
YXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1Yihvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKLSAgICBleGVjLT52bSgpLmdldENUSVN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKLSAgICBleGVjLT52bSgp
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRD
VElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRD
VElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICBleGVjLT52bSgpLmdl
dENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRD
VElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1
Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVu
a0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9y
KTsKKyAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CiAj
aWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKEZUTDo6b3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1YihGVEw6Om9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gRGVyaXZl
IG91ciBzZXQgb2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29tcGlsYXRpb24gbXVzdCBiZSBh
dCBsZWFzdCBjb25zZXJ2YXRpdmUKQEAgLTEwNSw3ICsxMDksMTYgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGUoQ29tcGlsZQogICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZh
bHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwogICAgIH0KICAg
ICAKLSAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQoKTsKKyAgICBpZiAoZW5hYmxlQ29uY3VycmVu
dEpJVCgpKSB7CisgICAgICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkRlZmVycmluZyBERkcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywg
IlxuIik7CisgICAgICAgIGlmICghdm0ud29ya2xpc3QpCisgICAgICAgICAgICB2bS53b3JrbGlz
dCA9IGdsb2JhbFdvcmtsaXN0KCk7CisgICAgICAgIHZtLndvcmtsaXN0LT5lbnF1ZXVlKHBsYW4p
OworICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25EZWZlcnJlZDsKKyAgICB9CisgICAgCisgICAg
cGxhbi0+Y29tcGlsZUluVGhyZWFkKCp2bS5kZmdTdGF0ZSk7CiAgICAgcmV0dXJuIHBsYW4tPmZp
bmFsaXplKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsMTIg
KzQ0LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAjdW5kZWYgU1RS
SU5HSVpFX0RGR19PUF9FTlVNCiB9OwogCi1HcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFu
KQorR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdmVkU3RhdGUmIGxvbmdM
aXZlZFN0YXRlKQogICAgIDogbV92bSh2bSkKICAgICAsIG1fcGxhbihwbGFuKQogICAgICwgbV9j
b2RlQmxvY2sobV9wbGFuLmNvZGVCbG9jay5nZXQoKSkKICAgICAsIG1fcHJvZmlsZWRCbG9jayht
X2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKLSAgICAsIG1fYWxsb2NhdG9yKHZtLm1fZGZnU3Rh
dGUtPm1fYWxsb2NhdG9yKQorICAgICwgbV9hbGxvY2F0b3IobG9uZ0xpdmVkU3RhdGUubV9hbGxv
Y2F0b3IpCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhmYWxzZSkKICAgICAsIG1fZml4cG9pbnRTdGF0
ZShCZWZvcmVGaXhwb2ludCkKICAgICAsIG1fZm9ybShMb2FkU3RvcmUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcg
QEAgZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJl
bWFpbiBpbiB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIHsKIHB1Ymxp
YzoKLSAgICBHcmFwaChWTSYsIFBsYW4mKTsKKyAgICBHcmFwaChWTSYsIFBsYW4mLCBMb25nTGl2
ZWRTdGF0ZSYpOwogICAgIH5HcmFwaCgpOwogICAgIAogICAgIHZvaWQgY2hhbmdlQ2hpbGQoRWRn
ZSYgZWRnZSwgTm9kZSogbmV3Tm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTcgKzQ1LDE4IEBA
IHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpOwogICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogCi0jaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCJPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLCAiIGZyb20gYmMjIiwgYnl0ZWNvZGVJbmRl
eCwgIlxuIik7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAg
ICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAgICIgZnJvbSBiYyMiLCBieXRl
Y29kZUluZGV4LCAiXG4iKTsKKyAgICB9CiAgICAgCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5kZmco
KS0+b3NyRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAKICAg
ICBpZiAoIWVudHJ5KSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0
YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIGVudHJ5cG9pbnQgd2FzIG9wdGltaXpl
ZCBvdXQuXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQor
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIGVudHJ5cG9p
bnQgd2FzIG9wdGltaXplZCBvdXQuXG4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAg
IApAQCAtODcsMTEgKzg4LDExIEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4
ZWMsIEMKICAgICAKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZW50
cnktPm1fZXhwZWN0ZWRWYWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewog
ICAgICAgICBpZiAoYXJndW1lbnQgPj0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSkgewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9nRigi
ICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAlenUgd2FzIG5vdCBwYXNzZWQsIGV4cGVj
dGVkICIsIGFyZ3VtZW50KTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFy
Z3VtZW50KGFyZ3VtZW50KS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBkYXRh
TG9nRigiLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBh
cmd1bWVudCAlenUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICIsIGFyZ3VtZW50KTsKKyAgICAg
ICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkuZHVt
cChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMTAyLDkgKzEwMywxMSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVj
LCBDCiAgICAgICAgICAgICB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZ3VtZW50IC0gMSk7CiAg
ICAgICAgIAogICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFy
Z3VtZW50KS52YWxpZGF0ZSh2YWx1ZSkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQot
ICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAiLCBh
cmd1bWVudCwgIiBpcyAiLCB2YWx1ZSwgIiwgZXhwZWN0ZWQgIiwgZW50cnktPm1fZXhwZWN0ZWRW
YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLCAiLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAiLCBhcmd1
bWVudCwgIiBpcyAiLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQgIiwg
ZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLCAiLlxuIik7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTEx
MiwxNyArMTE1LDIyIEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMK
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZW50cnktPm1fZXhwZWN0ZWRWYWx1
ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogICAgICAgICBpZiAoZW50cnktPm1fbG9j
YWxzRm9yY2VkRG91YmxlLmdldChsb2NhbCkpIHsKICAgICAgICAgICAgIGlmICghZXhlYy0+cmVn
aXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKS5pc051bWJlcigpKSB7Ci0jaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNh
dXNlIHZhcmlhYmxlICIsIGxvY2FsLCAiIGlzICIsIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5q
c1ZhbHVlKCksICIsIGV4cGVjdGVkIG51bWJlci5cbiIpOwotI2VuZGlmCisgICAgICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKAorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFy
aWFibGUgIiwgbG9jYWwsICIgaXMgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPnJl
Z2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCksICIsIGV4cGVjdGVkIG51bWJlci5cbiIpOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICghZW50cnktPm1f
ZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLnZhbGlkYXRlKGV4ZWMtPnJlZ2lzdGVycygpW2xv
Y2FsXS5qc1ZhbHVlKCkpKSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWwsICIg
aXMgIiwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgIiwg
ZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLCAiLlxuIik7Ci0jZW5kaWYKKyAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJp
YWJsZSAiLCBsb2NhbCwgIiBpcyAiLAorICAgICAgICAgICAgICAgICAgICBleGVjLT5yZWdpc3Rl
cnMoKVtsb2NhbF0uanNWYWx1ZSgpLCAiLCBleHBlY3RlZCAiLAorICAgICAgICAgICAgICAgICAg
ICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCksICIuXG4iKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtMTM1LDE1
ICsxNDMsMTMgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAg
IC8vICAgIHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGp1c3Qga2VwdCBydW5uaW5nIGFsYmVpdCBsZXNz
IHF1aWNrbHkuCiAgICAgCiAgICAgaWYgKCF2bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3Jvdygm
ZXhlYy0+cmVnaXN0ZXJzKClbY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSB7Ci0j
aWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFp
bGVkIGJlY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwotI2VuZGlmCisgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBm
YWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2dG
KCIgICAgT1NSIHNob3VsZCBzdWNjZWVkLlxuIik7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBzaG91bGQgc3VjY2VlZC5c
biIpOwogICAgIAogICAgIC8vIDMpIFBlcmZvcm0gZGF0YSBmb3JtYXQgY29udmVyc2lvbnMuCiAg
ICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVz
Lm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKQEAgLTE1OSw5ICsxNjUsOCBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgdm9pZCogcmVzdWx0
ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoZW50
cnktPm1fbWFjaGluZUNvZGVPZmZzZXQpOwogICAgIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgZGF0YUxvZ0YoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBhZGRyZXNz
ICVwLlxuIiwgcmVzdWx0KTsKLSNlbmRpZgorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CisgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHJldHVybmluZyBtYWNoaW5lIGNvZGUgYWRkcmVz
cyAlcC5cbiIsIHJlc3VsdCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKICNlbHNlIC8vIERG
R19FTkFCTEUoT1NSX0VOVFJZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg2LDkgKzE2ODYs
OCBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAKIGV4dGVybiAi
QyIgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2co
KmNvZGVCbG9jaywgIjogRW50ZXJlZCByZW9wdGltaXplXG4iKTsKLSNlbmRpZgorICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRW50
ZXJlZCByZW9wdGltaXplXG4iKTsKICAgICAvLyBXZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBi
YXNlbGluZSBjb2RlIGJsb2NrLgogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShj
b2RlQmxvY2stPmdldEpJVFR5cGUoKSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgUGxhbjo6UGxh
bigKICAgICAsIG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51
bVZhcnNXaXRoVmFsdWVzKQogICAgICwgY29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKGNv
ZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3Io
Y29kZUJsb2NrLmdldCgpKSwgUHJvZmlsZXI6OkRGRykpIDogMCkKICAgICAsIGlkZW50aWZpZXJz
KGNvZGVCbG9jay5nZXQoKSkKKyAgICAsIGlzQ29tcGlsZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTg1
LDEyICs4NiwxNSBAQCBQbGFuOjp+UGxhbigpCiB7CiB9CiAKLXZvaWQgUGxhbjo6Y29tcGlsZUlu
VGhyZWFkKCkKK3ZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXRlJiBsb25n
TGl2ZWRTdGF0ZSkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENv
bXBpbGF0aW9uIChQbGFuKSIpOwogICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGlsYXRpb25TY29w
ZTsKIAotICAgIEdyYXBoIGRmZyh2bSwgKnRoaXMpOworICAgIGlmIChsb2dDb21waWxhdGlvbkNo
YW5nZXMoKSkKKyAgICAgICAgZGF0YUxvZygiREZHKFBsYW4pIGNvbXBpbGluZyAiLCAqY29kZUJs
b2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkNvdW50KCksICJcbiIpOworCisgICAgR3JhcGggZGZnKHZtLCAqdGhpcywgbG9uZ0xpdmVkU3Rh
dGUpOwogICAgIAogICAgIGlmICghcGFyc2UoZGZnKSkgewogICAgICAgICBmaW5hbGl6ZXIgPSBh
ZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKCp0aGlzKSk7CkBAIC0xOTksNiArMjAzLDExIEBA
IENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplKFJlZlB0cjwKICAgICByZXR1cm4gQ29t
cGlsYXRpb25TdWNjZXNzZnVsOwogfQogCitDb2RlQmxvY2sqIFBsYW46OmtleSgpCit7CisgICAg
cmV0dXJuIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgY2xhc3Mg
Q29kZUJsb2NrOwogCiBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CisK
IGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OwogCiAj
aWYgRU5BQkxFKERGR19KSVQpCkBAIC01MywxMCArNTUsMTIgQEAgc3RydWN0IFBsYW4gOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgICAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKICAgICB+UGxhbigpOwogICAgIAot
ICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCk7CisgICAgdm9pZCBjb21waWxlSW5UaHJlYWQoTG9u
Z0xpdmVkU3RhdGUmKTsKICAgICAKICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZShSZWZQ
dHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2spOwogICAgIAorICAgIENvZGVCbG9jayoga2V5KCk7CisgICAgCiAgICAg
Y29uc3QgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGU7CiAgICAgVk0mIHZtOwogICAgIFJlZlB0cjxD
b2RlQmxvY2s+IGNvZGVCbG9jazsKQEAgLTcxLDYgKzc1LDggQEAgc3RydWN0IFBsYW4gOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIERlc2lyZWRXYXRjaHBvaW50cyB3YXRjaHBvaW50
czsKICAgICBEZXNpcmVkSWRlbnRpZmllcnMgaWRlbnRpZmllcnM7CiAgICAgRGVzaXJlZFN0cnVj
dHVyZUNoYWlucyBjaGFpbnM7CisgICAgCisgICAgYm9vbCBpc0NvbXBpbGVkOwogCiBwcml2YXRl
OgogICAgIGJvb2wgaXNTdGlsbFZhbGlkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1dvcmtsaXN0OjpXb3JrbGlz
dCgpCit7Cit9CisKK1dvcmtsaXN0Ojp+V29ya2xpc3QoKQoreworICAgIG1fcXVldWUuYXBwZW5k
KG51bGxwdHIpOyAvLyBVc2UgbnVsbCBwbGFuIHRvIGluZGljYXRlIHRoYXQgd2Ugd2FudCB0aGUg
dGhyZWFkIHRvIHRlcm1pbmF0ZS4KKyAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVh
ZCk7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmZpbmlzaENyZWF0aW9uKCkKK3sKKyAgICBtX3RocmVh
ZCA9IGNyZWF0ZVRocmVhZCh0aHJlYWRGdW5jdGlvbiwgdGhpcywgIkpTQyBDb21waWxhdGlvbiBU
aHJlYWQiKTsKK30KKworUGFzc1JlZlB0cjxXb3JrbGlzdD4gV29ya2xpc3Q6OmNyZWF0ZSgpCit7
CisgICAgUmVmUHRyPFdvcmtsaXN0PiByZXN1bHQgPSBhZG9wdFJlZihuZXcgV29ya2xpc3QoKSk7
CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbigpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgV29ya2xpc3Q6OmVucXVldWUoUGFzc1JlZlB0cjxQbGFuPiBwYXNzZWRQbGFuKQorewor
ICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gcGFzc2VkUGxhbjsKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICBBU1NFUlQobV9wbGFucy5maW5kKHBsYW4tPmtleSgpKSA9PSBtX3Bs
YW5zLmVuZCgpKTsKKyAgICBtX3BsYW5zLmFkZChwbGFuLT5rZXkoKSwgcGxhbik7CisgICAgbV9x
dWV1ZS5hcHBlbmQocGxhbik7CisgICAgbV9jb25kaXRpb24uYnJvYWRjYXN0KCk7Cit9CisKK0Nv
bXBpbGF0aW9uUmVzdWx0IFdvcmtsaXN0Ojpjb21wbGV0ZUFuZFNjaGVkdWxlT1NSKENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaykKK3sKKyAgICBSZWZQdHI8UGxhbj4gcGxhbjsKKyAgICAKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBwbGFuID0gbV9w
bGFucy50YWtlKHByb2ZpbGVkQmxvY2spOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxhbik7
CisgICAgQVNTRVJUKHBsYW4tPmlzQ29tcGlsZWQpOworICAgIAorICAgIENvbXBpbGF0aW9uUmVz
dWx0IHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRD
b2RlKHBsYW4pOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCAhPSBDb21waWxhdGlv
bkRlZmVycmVkKTsKKyAgICBwcm9maWxlZEJsb2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRC
YXNlZE9uQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitXb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgIFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmZpbmQocHJvZmlsZWRCbG9jayk7
CisgICAgaWYgKGl0ZXIgPT0gbV9wbGFucy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIE5vdEtub3du
OworICAgIHJldHVybiBpdGVyLT52YWx1ZS0+aXNDb21waWxlZCA/IENvbXBpbGVkIDogQ29tcGls
aW5nOworfQorCitWZWN0b3I8UmVmUHRyPENvZGVCbG9jaz4gPiBXb3JrbGlzdDo6d2FpdFVudGls
QWxsRm9yVk1BcmVDb21wbGV0ZShWTSYgdm0pCit7CisgICAgLy8gV2FpdCBmb3IgYWxsIG9mIHRo
ZSBwbGFucyBmb3IgdGhlIGdpdmVuIFZNIHRvIGNvbXBsZXRlLCBhbmQgY29sbGVjdCB0aGUKKyAg
ICAvLyBDb2RlQmxvY2sqJ3MgdGhhdCBhcmUgdGhlIGtleXMgdG8gdGhvc2UgcGxhbnMuIFRoZSBp
ZGVhIGhlcmUgaXMgdGhhdCB3ZQorICAgIC8vIHdhbnQgYWxsIG9mIHRoZSBjYWxsZXIgVk0ncyBw
bGFucyB0byBiZSBkb25lLiBXZSBkb24ndCBjYXJlIGFib3V0IGFueQorICAgIC8vIG90aGVyIFZN
J3MgcGxhbnMsIGFuZCB3ZSB3b24ndCBhdHRlbXB0IHRvIGNvbXBsZXRlIHRob3NlLiBBZnRlciB3
ZQorICAgIC8vIHJlbGVhc2UgdGhpcyBsb2NrLCB3ZSBrbm93IHRoYXQgYWx0aG91Z2ggb3RoZXIg
Vk1zIG1heSBzdGlsbCBiZSBhZGRpbmcKKyAgICAvLyBwbGFucywgb3VyIFZNIHdpbGwgbm90IGJl
LgorICAgIAorICAgIFZlY3RvcjxSZWZQdHI8Q29kZUJsb2NrPiA+IGtleUJsb2NrczsKKyAgICAK
KyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIGJvb2wgYWxsQXJlQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgUGxhbk1hcDo6aXRl
cmF0b3IgZW5kID0gbV9wbGFucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAg
ICAgICBpZiAoJml0ZXItPnZhbHVlLT52bSAhPSAmdm0pCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLT5pc0NvbXBpbGVkKSB7CisgICAgICAg
ICAgICAgICAgYWxsQXJlQ29tcGxldGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChhbGxBcmVD
b21wbGV0ZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIG1fY29uZGl0
aW9uLndhaXQobV9sb2NrKTsKKyAgICB9CisgICAgCisgICAgUGxhbk1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9wbGFucy5lbmQoKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Bs
YW5zLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKCZpdGVyLT52
YWx1ZS0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGtleUJsb2Nr
cy5hcHBlbmQoaXRlci0+a2V5KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGtleUJsb2NrczsK
K30KKwordm9pZCBXb3JrbGlzdDo6Y29tcGxldGVBbGxGb3JWTShWTSYgdm0pCit7CisgICAgVmVj
dG9yPFJlZlB0cjxDb2RlQmxvY2s+ID4ga2V5QmxvY2tzID0gd2FpdFVudGlsQWxsRm9yVk1BcmVD
b21wbGV0ZSh2bSk7CisgICAgCisgICAgLy8gTm93IGNvbXBsZXRlIGFsbCBvZiB0aGUgcGxhbnMg
Zm9yIHRoaXMgVk0uCisgICAgZm9yICh1bnNpZ25lZCBpID0ga2V5QmxvY2tzLnNpemUoKTsgaS0t
OykKKyAgICAgICAgY29tcGxldGVBbmRTY2hlZHVsZU9TUihrZXlCbG9ja3NbaV0uZ2V0KCkpOwor
fQorCit2b2lkIFdvcmtsaXN0OjpydW5UaHJlYWQoKQoreworICAgIExvbmdMaXZlZFN0YXRlIGxv
bmdMaXZlZFN0YXRlOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+
IHBsYW47CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgICAgICAgICAgd2hpbGUgKG1fcXVldWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgIHBsYW4gPSBtX3F1ZXVlLnRh
a2VGaXJzdCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXBsYW4pCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQo
bG9uZ0xpdmVkU3RhdGUpOworICAgICAgICBjb21wbGV0ZUFzeW5jaHJvbm91c1BsYW4ocGxhbi5n
ZXQoKSk7CisgICAgfQorfQorCit2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFzeW5jaHJvbm91c1Bs
YW4oUGxhbiogcGxhbikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBw
bGFuLT5rZXkoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpOworICAg
IHBsYW4tPmlzQ29tcGlsZWQgPSB0cnVlOworICAgIG1fY29uZGl0aW9uLmJyb2FkY2FzdCgpOwor
fQorCit2b2lkIFdvcmtsaXN0Ojp0aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCkKK3sKKyAg
ICBzdGF0aWNfY2FzdDxXb3JrbGlzdCo+KGFyZ3VtZW50KS0+cnVuVGhyZWFkKCk7Cit9CisKK3N0
YXRpYyBwdGhyZWFkX29uY2VfdCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RLZXlPbmNlID0gUFRI
UkVBRF9PTkNFX0lOSVQ7CitzdGF0aWMgV29ya2xpc3QqIHRoZUdsb2JhbFdvcmtsaXN0OworCitz
dGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKCkKK3sKKyAgICB0aGVHbG9i
YWxXb3JrbGlzdCA9IFdvcmtsaXN0OjpjcmVhdGUoKS5sZWFrUmVmKCk7Cit9CisKK1dvcmtsaXN0
KiBnbG9iYWxXb3JrbGlzdCgpCit7CisgICAgcHRocmVhZF9vbmNlKCZpbml0aWFsaXplR2xvYmFs
V29ya2xpc3RLZXlPbmNlLCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKTsKKyAgICByZXR1
cm4gdGhlR2xvYmFsV29ya2xpc3Q7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdXb3JrbGlz
dF9oCisjZGVmaW5lIERGR1dvcmtsaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdQbGFuLmgiCisjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgV29ya2xpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrbGlzdD4geworcHVibGlj
OgorICAgIH5Xb3JrbGlzdCgpOworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtsaXN0
PiBjcmVhdGUoKTsKKyAgICAKKyAgICB2b2lkIGVucXVldWUoUGFzc1JlZlB0cjxQbGFuPik7Cisg
ICAgCisgICAgLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvOgorICAgIC8vIFZlY3RvcjxSZWZQdHI8
Q29kZUJsb2NrPiA+IGJsb2NrcyA9IHdvcmtsaXN0LT53YWl0VW50aWxBbGxGb3JWTUFyZUNvbXBs
ZXRlKHZtKTsKKyAgICAvLyBmb3IgKENvZGVCbG9jayogYmxvY2sgaW4gYmxvY2tzKQorICAgIC8v
ICAgICB3b3JrbGlzdC0+Y29tcGxldGVBbmRTY2hlZHVsZU9TUihibG9jayk7CisgICAgdm9pZCBj
b21wbGV0ZUFsbEZvclZNKFZNJik7CisgICAgCisgICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+
ID4gd2FpdFVudGlsQWxsRm9yVk1BcmVDb21wbGV0ZShWTSYpOworICAgIENvbXBpbGF0aW9uUmVz
dWx0IGNvbXBsZXRlQW5kU2NoZWR1bGVPU1IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKTsKKyAg
ICAKKyAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKKyAg
ICBTdGF0ZSBjb21waWxhdGlvblN0YXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jayk7CisgICAg
Citwcml2YXRlOgorICAgIFdvcmtsaXN0KCk7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbigpOwor
ICAgIAorICAgIHZvaWQgcnVuVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgdGhyZWFkRnVuY3Rp
b24odm9pZCogYXJndW1lbnQpOworICAgIAorICAgIHZvaWQgY29tcGxldGVBc3luY2hyb25vdXNQ
bGFuKFBsYW4qKTsKKworICAgIERlcXVlPFJlZlB0cjxQbGFuPiA+IG1fcXVldWU7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxDb2RlQmxvY2s+LCBSZWZQdHI8UGxhbj4gPiBQbGFuTWFwOwor
ICAgIFBsYW5NYXAgbV9wbGFuczsKKyAgICBNdXRleCBtX2xvY2s7CisgICAgLy8gV2UgYnJvYWRj
YXN0IG9uIHRoaXMgY29uZGl0aW9uIHdoZW5ldmVyOgorICAgIC8vIC0gU29tZXRoaW5nIGlzIGVu
cXVldWVkLgorICAgIC8vIC0gU29tZXRoaW5nIGlzIGNvbXBsZXRlZC4KKyAgICBUaHJlYWRDb25k
aXRpb24gbV9jb25kaXRpb247CisgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZDsKK307CisK
Ky8vIEZvciBub3cgd2UgdXNlIGEgc2luZ2xlIGdsb2JhbCB3b3JrbGlzdC4gSXQncyBub3QgY2xl
YXIgdGhhdCB0aGlzCisvLyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBpdCBpcyB3aGF0
IHdlIGRvLCBmb3Igbm93LiBUaGlzIGZ1bmN0aW9uCisvLyB3aWxsIGxhemlseSBjcmVhdGUgb25l
IHdoZW4gaXQncyBuZWVkZWQuIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgY2FsbGVkCisvLyBmcm9t
IERGR0RyaXZlci5jcHAsIHdoZW4gaXQgYWN0dWFsbHkgd2FudHMgdG8gZW5xdWV1ZSBzb21ldGhp
bmcuCitXb3JrbGlzdCogZ2xvYmFsV29ya2xpc3QoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdXb3JrbGlz
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTAz
NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMu
aCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0
aWNzLmgiCkBAIC03MDMsOCArNzA0LDI1IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2ds
ZSBzd2VlcFRvZ2cKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpBVkFTQ1JJ
UFRDT1JFX0dDX0JFR0lOKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25JblByb2dy
ZXNzID09IE5vT3BlcmF0aW9uKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBWZWN0
b3I8UmVmUHRyPENvZGVCbG9jaz4gPiBrZXlCbG9ja3M7CisgICAgaWYgKG1fdm0tPndvcmtsaXN0
KQorICAgICAgICBrZXlCbG9ja3MgPSBtX3ZtLT53b3JrbGlzdC0+d2FpdFVudGlsQWxsRm9yVk1B
cmVDb21wbGV0ZSgqbV92bSk7CisjZW5kaWYKKyAgICAKICAgICBtX29wZXJhdGlvbkluUHJvZ3Jl
c3MgPSBDb2xsZWN0aW9uOwogCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gRG8gdGhlIGNv
bXBsZXRpb24gd2hpbGUgaW5kaWNhdGluZyB0aGF0IHdlJ3JlIGluIHRoZSBHQywgc28gdGhhdCB3
ZQorICAgIC8vIGRvbid0IHRyeSB0byByZWN1cnNpdmVseSBHQy4KKyAgICBpZiAobV92bS0+d29y
a2xpc3QpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0ga2V5QmxvY2tzLnNpemUoKTsgaS0t
OykKKyAgICAgICAgICAgIG1fdm0tPndvcmtsaXN0LT5jb21wbGV0ZUFuZFNjaGVkdWxlT1NSKGtl
eUJsb2Nrc1tpXS5nZXQoKSk7CisgICAgfQorICAgIGtleUJsb2Nrcy5yZXNpemUoMCk7CisjZW5k
aWYKKyAgICAKICAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPndpbGxDb2xsZWN0KCk7CiAKICAgICBk
b3VibGUgbGFzdEdDU3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTExMCw2ICsxMTAsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1lbnRhbFN3ZWVw
ZXIqIHN3ZWVwZXIoKTsKIAorICAgICAgICAvLyB0cnVlIGlmIGNvbGxlY3Rpb24gaXMgaW4gcHJv
Z3Jlc3MKKyAgICAgICAgaW5saW5lIGJvb2wgaXNDb2xsZWN0aW5nKCk7CiAgICAgICAgIC8vIHRy
dWUgaWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCiAgICAgICAg
IGlubGluZSBib29sIGlzQnVzeSgpOwogICAgICAgICAKQEAgLTI5Myw2ICsyOTUsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9P
cGVyYXRpb247CiAgICAgfQogCisgICAgYm9vbCBIZWFwOjppc0NvbGxlY3RpbmcoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBDb2xsZWN0aW9uOworICAg
IH0KKwogICAgIGlubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAxLDEw
ICs2MDEsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVydHlTdHViQ29tcGlsYXRpCiAKIFBh
c3NSZWZQdHI8SklUQ29kZT4gSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW5jdGlvbkVu
dHJ5QXJpdHlDaGVjaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCi0gICAgcHJpbnRmKCJDb21waWxpbmcgSklUIGNvZGUhXG4iKTsK
LSNlbmRpZgotICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBERkc6OkNhcGFi
aWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpOwogICAg
IHN3aXRjaCAobGV2ZWwpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MTUwMzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTEgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShKSVQpCiAKLS8vIFZlcmJvc2UgbG9n
Z2luZyBvZiBjb2RlIGdlbmVyYXRpb24KLSNkZWZpbmUgRU5BQkxFX0pJVF9WRVJCT1NFIDAKLS8v
IFZlcmJvc2UgbG9nZ2luZyBmb3IgT1NSLXJlbGF0ZWQgY29kZS4KLSNkZWZpbmUgRU5BQkxFX0pJ
VF9WRVJCT1NFX09TUiAwCi0KIC8vIFdlJ3ZlIHJ1biBpbnRvIHNvbWUgcHJvYmxlbXMgd2hlcmUg
Y2hhbmdpbmcgdGhlIHNpemUgb2YgdGhlIGNsYXNzIEpJVCBsZWFkcyB0bwogLy8gcGVyZm9ybWFu
Y2UgZmx1Y3R1YXRpb25zLiAgVHJ5IGZvcmNpbmcgYWxpZ25tZW50IGluIGFuIGF0dGVtcHQgdG8g
c3RhYmFsaXplIHRoaXMuCiAjaWYgQ09NUElMRVIoR0NDKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
CiAjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5o
IgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNp
bmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXIuaCIKQEAgLTkwNiwzMSArOTA3LDU1IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gc3RhY2tGcmFt
ZS5hcmdzWzBdLmludDMyKCk7CiAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRh
dGFMb2coCi0gICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgb3B0aW1pemUgd2l0aCBieXRl
Y29kZUluZGV4ID0gIiwgYnl0ZWNvZGVJbmRleCwKLSAgICAgICAgIiwgZXhlY3V0ZUNvdW50ZXIg
PSAiLCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAgICIsIG9wdGltaXph
dGlvbkRlbGF5Q291bnRlciA9ICIsIGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoKSwKLSAgICAgICAgIiwgZXhpdENvdW50ZXIgPSAiKTsKLSAgICBpZiAoY29kZUJsb2NrLT5o
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQotICAgICAgICBkYXRhTG9nKGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKS0+b3NyRXhpdENvdW50ZXIoKSk7Ci0gICAgZWxzZQotICAgICAgICBkYXRhTG9n
KCJOL0EiKTsKLSAgICBkYXRhTG9nKCJcbiIpOwotI2VuZGlmCisgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywg
IjogRW50ZXJlZCBvcHRpbWl6ZSB3aXRoIGJ5dGVjb2RlSW5kZXggPSAiLCBieXRlY29kZUluZGV4
LAorICAgICAgICAgICAgIiwgZXhlY3V0ZUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmppdEV4ZWN1
dGVDb3VudGVyKCksCisgICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAi
LCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksCisgICAgICAgICAgICAi
LCBleGl0Q291bnRlciA9ICIpOworICAgICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgZGF0YUxvZyhjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCktPm9zckV4aXRDb3VudGVyKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhTG9n
KCJOL0EiKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICB9CiAKICAgICBpZiAoIWNvZGVC
bG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBj
b2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKLSAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIG9wdGltaXplICIsICpjb2Rl
QmxvY2ssICIgeWV0LlxuIik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAq
Y29kZUJsb2NrLCAiIHlldC5cbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgaWYg
KGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIE9TUiAiLCAqY29kZUJs
b2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsKLSNlbmRpZgor
ICAgIAorICAgIERGRzo6V29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CisgICAgaWYgKHN0
YWNrRnJhbWUudm0tPndvcmtsaXN0KQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gc3RhY2tGcmFt
ZS52bS0+d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoY29kZUJsb2NrKTsKKyAgICBlbHNlCisg
ICAgICAgIHdvcmtsaXN0U3RhdGUgPSBERkc6OldvcmtsaXN0OjpOb3RLbm93bjsKKyAgICAKKyAg
ICAvLyBXZSBjYW5ub3QgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0
aW9uIGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1pemVkCisgICAgLy8gcmVwbGFjZW1lbnQuCisgICAg
UkVMRUFTRV9BU1NFUlQoCisgICAgICAgICEod29ya2xpc3RTdGF0ZSAhPSBERkc6OldvcmtsaXN0
OjpOb3RLbm93biAmJiBjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpKTsKKyAg
ICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxpbmcpIHsK
KyAgICAgICAgY29kZUJsb2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGls
YXRpb25SZXN1bHQoQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQp
IHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFM
b2coIkluc3RhbGxpbmcgZGVmZXJyZWQgY29tcGlsYXRpb24gZm9yICIsICpjb2RlQmxvY2ssICIu
XG4iKTsKKyAgICAgICAgCisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IHN0YWNr
RnJhbWUudm0tPndvcmtsaXN0LT5jb21wbGV0ZUFuZFNjaGVkdWxlT1NSKGNvZGVCbG9jayk7Cisg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJE
ZWZlcnJlZCBvcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgcmVzdWx0
OiAiLCByZXN1bHQsICJcbiIpOworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21w
aWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChj
b2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIE9TUiAi
LCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsK
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsIHRoZW4gaXQg
bXVzdCBiZSB0aGUgY2FzZSB0aGF0IHdlIGVudGVyZWQKICAgICAgICAgLy8gY3RpX29wdGltaXpl
IGZyb20gYSBsb29wLiBUaGF0J3MgYmVjYXVzZSBpcyB0aGVyZSdzIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudCwKICAgICAgICAgLy8gdGhlbiBhbGwgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aWxs
IGJlIHJlbGlua2VkIHRvIHRoZSByZXBsYWNlbWVudCBhbmQgc28KQEAgLTk0NSw2MCArOTcwLDM5
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICAvLyBzaG91
bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSB0byBhbHdheXMgcmV0dXJuIHRydWUuIEJ1dCB3ZSBt
YWtlIGl0IGRvIHNvbWUKICAgICAgICAgLy8gYWRkaXRpb25hbCBjaGVja2luZyBhbnl3YXksIHRv
IHJlZHVjZSB0aGUgYW1vdW50IG9mIHJlY29tcGlsYXRpb24gdGhyYXNoaW5nLgogICAgICAgICBp
ZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3co
KSkgewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9nKCJU
cmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIoIiwgKmNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKSwgIikgKGluIGxvb3ApLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgICAgICAgICAiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAiKCIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCksICIpIChpbiBsb29wKS5cbiIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY29kZUJs
b2NrLT5yZW9wdGltaXplKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewot
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9nKCJEZWxheWlu
ZyBvcHRpbWl6YXRpb24gZm9yICIsICpjb2RlQmxvY2ssICIgKGluIGxvb3ApIGJlY2F1c2Ugb2Yg
aW5zdWZmaWNpZW50IHByb2ZpbGluZy5cbiIpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAgICAgIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywKKyAg
ICAgICAgICAgICAgICAgICAgIiAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJv
ZmlsaW5nLlxuIik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgCi0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxv
ZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxu
Iik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2Rl
QmxvY2ssICJcbiIpOwogICAgICAgICAKICAgICAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJh
bWUtPnNjb3BlKCk7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdDsKICAgICAgICAg
SlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwg
c2NvcGUsIHJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlQ29tcGlsYXRpb24oKQotICAgICAgICAgICAgfHwgT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5
KCkKLSAgICAgICAgICAgIHx8IE9wdGlvbnM6OnNob3dERkdEaXNhc3NlbWJseSgpKQorICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJPcHRp
bWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgcmVzdWx0OiAiLCByZXN1bHQs
ICJcbiIpOwotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGlmIChlcnJvcikK
LSAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWls
ZWQgd2l0aCBhIEpTIGVycm9yLlxuIik7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oZXJy
b3IpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgZGF0
YUxvZygiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRoIGEgSlMgZXJy
b3IuXG4iKTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoKHJl
c3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpID09IChjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCkgIT0gY29kZUJsb2NrKSk7Ci0gICAgICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgICAgIGNh
c2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAgICAgIGNhc2UgQ29tcGlsYXRpb25EZWZlcnJlZDoK
LSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZygiT3B0aW1p
emluZyAiLCAqY29kZUJsb2NrLCAiIGZhaWxlZC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBB
U1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwot
ICAgICAgICAgICAgY29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6Ci0gICAg
ICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOwotICAgICAgICAgICAgLy8gUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLgot
ICAgICAgICAgICAgY29kZUJsb2NrLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7Ci0gICAgICAgICAg
ICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KHJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRp
b25TdWNjZXNzZnVsKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNl
bWVudCgpOwpAQCAtMTAxNCwzMiArMTAxOCwyOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcHRpbWl6ZSkKICAgICB9CiAgICAgCiAgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBERkc6OnBy
ZXBhcmVPU1JFbnRyeShjYWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJbmRl
eCkpIHsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnNob3dERkdEaXNhc3NlbWJseSgpKSB7CisgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coCiAg
ICAgICAgICAgICAgICAgIlBlcmZvcm1pbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKm9w
dGltaXplZENvZGVCbG9jaywgIiwgYWRkcmVzcyAiLAogICAgICAgICAgICAgICAgIFJhd1BvaW50
ZXIoKFNUVUJfUkVUVVJOX0FERFJFU1MpLnZhbHVlKCkpLCAiIC0+ICIsIFJhd1BvaW50ZXIoYWRk
cmVzcyksICIuXG4iKTsKICAgICAgICAgfQotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0g
ICAgICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBzdWNjZWVkZWQsIHBl
cmZvcm1pbmcgT1NSIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25E
ZWxheUNvdW50ZXIoKSwgIi5cbiIpOwotI2VuZGlmCiAKICAgICAgICAgY29kZUJsb2NrLT5vcHRp
bWl6ZVNvb24oKTsKICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoYWRkcmVzcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
LSAgICBkYXRhTG9nKCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgc3VjY2VlZGVkLCBPU1Ig
ZmFpbGVkLCBhZnRlciBhIGRlbGF5IG9mICIsIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyKCksICIuXG4iKTsKLSNlbmRpZgorCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIk9wdGltaXppbmcgIiwgKmNvZGVC
bG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLAorICAgICAgICAgICAgIiBz
dWNjZWVkZWQsIE9TUiBmYWlsZWQsIGFmdGVyIGEgZGVsYXkgb2YgIiwKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCksICIuXG4iKTsKKyAgICB9CiAKICAg
ICAvLyBDb3VudCB0aGUgT1NSIGZhaWx1cmUgYXMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlLiBJZiB0
aGlzIGhhcHBlbnMgYSBsb3QsIHRoZW4KICAgICAvLyByZW9wdGltaXplLgogICAgIG9wdGltaXpl
ZENvZGVCbG9jay0+Y291bnRPU1JFeGl0KCk7CiAgICAgCi0jaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKLSAgICBkYXRhTG9nKCJFbmNvdW50ZXJlZCBPU1IgZmFpbHVyZSAiLCAqY29kZUJsb2Nr
LCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsKLSNlbmRpZgotCiAg
ICAgLy8gV2UgYXJlIGEgbG90IG1vcmUgY29uc2VydmF0aXZlIGFib3V0IHRyaWdnZXJpbmcgcmVv
cHRpbWl6YXRpb24gYWZ0ZXIgT1NSIGZhaWx1cmUgdGhhbgogICAgIC8vIGJlZm9yZSBpdC4gSWYg
d2UgZW50ZXIgdGhlIG9wdGltaXplX2Zyb21fbG9vcCB0cmlnZ2VyIHdpdGggYSBidWNrZXQgZnVs
bCBvZiBmYWlsCiAgICAgLy8gYWxyZWFkeSwgdGhlbiB3ZSByZWFsbHkgd291bGQgbGlrZSB0byBy
ZW9wdGltaXplIGltbWVkaWF0ZWx5LiBCdXQgdGhpcyBjYXNlIGNvdmVycwpAQCAtMTA0OSw5ICsx
MDQ5LDExIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIC8vIHJp
Z2h0IG5vdy4gU28sIHdlIG9ubHkgdHJpZ2dlciByZW9wdGltaXphdGlvbiBvbmx5IHVwb24gdGhl
IG1vcmUgY29uc2VydmF0aXZlIChub24tbG9vcCkKICAgICAvLyByZW9wdGltaXphdGlvbiB0cmln
Z2VyLgogICAgIGlmIChvcHRpbWl6ZWRDb2RlQmxvY2stPnNob3VsZFJlb3B0aW1pemVOb3coKSkg
ewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIlRyaWdnZXJp
bmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5y
ZXBsYWNlbWVudCgpLCAiIChhZnRlciBPU1IgZmFpbCkuXG4iKTsKLSNlbmRpZgorICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAg
ICAgICAgICAgICJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIg
LT4gIiwKKyAgICAgICAgICAgICAgICAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiIChhZnRl
ciBPU1IgZmFpbCkuXG4iKTsKKyAgICAgICAgfQogICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1p
emUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTUwMzQ5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgyLDMwICsyODIsMjYgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJp
c3RpY3MoQwogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMo
KTsKICAgICAKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQo
KSkgewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2dGKCIgICAg
SklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSklUIHRo
cmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLlxuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29kZUJsb2NrLT5qaXRD
b21waWxlKGV4ZWMpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlv
bk5vdE5lZWRlZDoKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9n
RigiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQuXG4iKTsKLSNlbmRpZgorICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBDb2Rl
IHdhcyBhbHJlYWR5IGNvbXBpbGVkLlxuIik7CiAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNvbXBp
bGF0aW9uIGZhaWxlZC5cbiIpOwotI2VuZGlmCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQu
XG4iKTsKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgotI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNvbXBpbGF0aW9u
IHN1Y2Nlc3NmdWwuXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQorICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1
bC5cbiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgZGVmYXVsdDoKQEAgLTMxNywxMSArMzEzLDExIEBAIGlubGluZSBib29sIGppdENv
bXBpbGVBbmRTZXRIZXVyaXN0aWNzKEMKIGVudW0gRW50cnlLaW5kIHsgUHJvbG9ndWUsIEFyaXR5
Q2hlY2sgfTsKIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoRXhlY1N0YXRlKiBl
eGVjLCBJbnN0cnVjdGlvbiosIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1l
LCBFbnRyeUtpbmQga2luZCkKIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRh
dGFMb2coKmNvZGVCbG9jaywgIjogRW50ZXJlZCAiLCBuYW1lLCAiIHdpdGggZXhlY3V0ZUNvdW50
ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSwgIlxuIik7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShuYW1lKTsKLSNlbmRpZgorICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVu
dGVyZWQgIiwgbmFtZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKKyAgICB9CiAgICAgCiAgICAg
aWYgKCFzaG91bGRKSVQoZXhlYykpIHsKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGlt
ZVNvb24oKTsKQEAgLTM2NCwxMCArMzYwLDEyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5
X29zcl9mdW5jdGlvbl8KIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogewogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgCi0jaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEVudGVyZWQgbG9v
cF9vc3Igd2l0aCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291
bnRlcigpLCAiXG4iKTsKLSNlbmRpZgorCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkg
eworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCBs
b29wX29zciB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGNvZGVCbG9jay0+
bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKCFzaG91
bGRKSVQoZXhlYykpIHsKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsK
QEAgLTM5NCwxMCArMzkyLDEyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogTExJ
TlRfU0xPV19QQVRIX0RFQ0wocmVwbGFjZSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0g
ICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRlQ291
bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKLSNlbmRp
ZgorCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCByZXBsYWNlIHdpdGggZXhlY3V0ZUNv
dW50ZXIgPSAiLAorICAgICAgICAgICAgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCks
ICJcbiIpOworICAgIH0KICAgICAKICAgICBpZiAoc2hvdWxkSklUKGV4ZWMpKQogICAgICAgICBq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhjb2RlQmxvY2ssIGV4ZWMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmgJKHJl
dmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckJ5dGVjb2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ29k
ZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQcm9maWxl
ckJ5dGVjb2RlU2VxdWVuY2UuaCIKLSNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVu
dEpJVExvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbmN1cnJlbnRKSVRMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvbmN1
cnJlbnRKSVRMb2NrX2gKKyNkZWZpbmUgQ29uY3VycmVudEpJVExvY2tfaAorCisjaW5jbHVkZSA8
d3RmL0J5dGVTcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob0xvY2suaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKKyNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCit0eXBlZGVmIEJ5dGVTcGluTG9j
ayBDb25jdXJyZW50SklUTG9jazsKK3R5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgQ29uY3VycmVudEpJ
VExvY2tlcjsKKyNlbHNlCit0eXBlZGVmIE5vTG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5cGVk
ZWYgTm9Mb2NrTG9ja2VyIENvbmN1cnJlbnRKSVRMb2NrZXI7CisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb25jdXJyZW50SklUTG9ja19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHJldmlz
aW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhh
cm5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDEwICsxMDIsMTQgQEAgaW5saW5lIENvbXBp
bGF0aW9uUmVzdWx0IGluc3RhbGxPcHRpbWl6ZQogICAgIGlmIChudW1QYXJhbWV0ZXJzKQogICAg
ICAgICAqbnVtUGFyYW1ldGVycyA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwogICAgIAot
ICAgIGlmIChqaXRDb2RlKQotICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVwb3J0RXh0
cmFNZW1vcnlDb3N0KHNpemVvZigqY29kZUJsb2NrKSArIGppdENvZGUtPnNpemUoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0
KHNpemVvZigqY29kZUJsb2NrKSk7CisgICAgLy8gV2UgY291bGQgYmUgaW5zdGFsbGluZyBvcHRp
bWl6ZWQgY29kZSBkdWUgdG8gd29ya2xpc3QgZmx1c2ggaW5zaWRlIG9mIEdDLiBXZSBkb24ndAor
ICAgIC8vIHRoZW4gd2FudCB0byByZWN1cnNpdmVseSBHQy4KKyAgICBpZiAoIWNvZGVCbG9jay0+
dm0oKS0+aGVhcC5pc0J1c3koKSkgeworICAgICAgICBpZiAoaml0Q29kZSkKKyAgICAgICAgICAg
IGNvZGVCbG9jay0+dm0oKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpjb2Rl
QmxvY2spICsgaml0Q29kZS0+c2l6ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29k
ZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKmNvZGVCbG9j
aykpOworICAgIH0KICAgICAKICAgICBpZiAoc2luayAhPSBjb2RlQmxvY2spIHsKICAgICAgICAg
Ly8gVGhpcyBjYW4gaGFwcGVuIGlmIHdlIEdDIGFuZCBkZWNpZGUgdGhhdCB0aGUgY29kZSBpcyBp
bnZhbGlkLgpAQCAtMTQxLDEyICsxNDUsMTUgQEAgaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHBy
ZXBhcmVGdW5jdGlvbgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgogaW5saW5l
IENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAg
IFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNpbmss
IFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKKyAgICBQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGFz
c2VkUGxhbiwgUmVmUHRyPENvZGVCbG9ja1R5cGU+JiBzaW5rLCBSZWZQdHI8SklUQ29kZT4mIGpp
dENvZGUsCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IGludCogbnVtUGFyYW1ldGVycykKIHsKKyAgICBSZWZQdHI8REZHOjpQbGFuPiBwbGFuID0gcGFz
c2VkUGxhbjsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OnRyeUZpbmFsaXpl
UGxhbihwbGFuLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgIGlmIChyZXN1
bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICBwbGFuLT5jb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsKICAgICByZXR1cm4gaW5zdGFsbE9w
dGltaXplZENvZGUoCi0gICAgICAgIERGRzo6dHJ5RmluYWxpemVQbGFuKHBsYW4sIGppdENvZGUs
IGppdENvZGVXaXRoQXJpdHlDaGVjayksCi0gICAgICAgIHNpbmssIHN0YXRpY19jYXN0PENvZGVC
bG9ja1R5cGUqPihwbGFuLT5jb2RlQmxvY2suZ2V0KCkpLCBqaXRDb2RlLAorICAgICAgICByZXN1
bHQsIHNpbmssIHN0YXRpY19jYXN0PENvZGVCbG9ja1R5cGUqPihwbGFuLT5jb2RlQmxvY2suZ2V0
KCkpLCBqaXRDb2RlLAogICAgICAgICBqaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPyAqaml0Q29kZVdp
dGhBcml0eUNoZWNrIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksCiAgICAgICAgIG51bVBhcmFt
ZXRlcnMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
cmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw2ICs4MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHYoYm9vbCwgcHJpbnRFYWNoT1NSRXhpdCwgZmFsc2UpIFwKICAgICB2KGJvb2ws
IHZhbGlkYXRlR3JhcGgsIGZhbHNlKSBcCiAgICAgdihib29sLCB2YWxpZGF0ZUdyYXBoQXRFYWNo
UGhhc2UsIGZhbHNlKSBcCisgICAgdihib29sLCB2ZXJib3NlT1NSLCBmYWxzZSkgXAogICAgIFwK
ICAgICB2KGJvb2wsIHVzZUV4cGVyaW1lbnRhbEZUTCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHVz
ZUZUTFRCQUEsIHRydWUpIFwKQEAgLTg4LDYgKzg5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
dihib29sLCBlbmFibGVMTFZNRmFzdElTZWwsIHRydWUpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZt
T3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwKICAgICBcCisgICAgdihib29sLCBlbmFibGVDb25jdXJy
ZW50SklULCB0cnVlKSBcCisgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlUHJvZmlsZXIsIGZhbHNl
KSBcCiAgICAgXAogICAgIHYodW5zaWduZWQsIG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50LCAxMDAwMCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjZGVmaW5lIFN0cnVjdHVyZV9oCiAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRl
ICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTQwLDcgKzQxLDYgQEAK
ICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1
ZGUgIldlYWsuaCIKLSNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CiAjaW5jbHVkZSA8d3Rm
L0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6CiAKICAgICB0
eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIAotICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7
Ci0gICAgdHlwZWRlZiBCeXRlU3BpbkxvY2tlciBMb2NrZXI7CisgICAgdHlwZWRlZiBDb25jdXJy
ZW50SklUTG9jayBMb2NrOworICAgIHR5cGVkZWYgQ29uY3VycmVudEpJVExvY2tlciBMb2NrZXI7
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4
aW5nVHlwZSA9IE5vbkFycmF5LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDApOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
CShyZXZpc2lvbiAxNTAzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCBpbmxpbmUg
Ym9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMCiAKIEFMV0FZU19JTkxJTkUgV3JpdGVC
YXJyaWVyPFByb3BlcnR5VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQogewotICAg
IEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNC
dXN5KCkpOworICAgIEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52
bSgpLmhlYXAuaXNDb2xsZWN0aW5nKCkpOwogICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNh
ZmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAkocmV2aXNpb24gMTUwMzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBT
eW1ib2xUYWJsZV9oCiAjZGVmaW5lIFN5bWJvbFRhYmxlX2gKIAorI2luY2x1ZGUgIkNvbmN1cnJl
bnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50
LmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtMzQzLDggKzM0NCw4IEBAIHN0
cnVjdCBTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0cyA6IEhhc2gKIGNsYXNzIFN5bWJvbFRhYmxl
IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBTeW1i
b2xUYWJsZUVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8U3RyaW5n
SW1wbD4gPiwgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHM+IE1hcDsKLSAgICB0eXBlZGVmIEJ5
dGVTcGluTG9jayBMb2NrOwotICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgTG9ja2VyOworICAg
IHR5cGVkZWYgQ29uY3VycmVudEpJVExvY2sgTG9jazsKKyAgICB0eXBlZGVmIENvbmN1cnJlbnRK
SVRMb2NrZXIgTG9ja2VyOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3ltYm9sVGFibGUoKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB+U3ltYm9sVGFibGUoKTsKQEAgLTQzNCw3ICs0MzUsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE1hcCBtX21hcDsKIHB1YmxpYzoKLSAgICBtdXRhYmxl
IEJ5dGVTcGluTG9jayBtX2xvY2s7CisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xv
Y2s7CiB9OwogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVDYWNo
ZS5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xp
dmVkU3RhdGUuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRlYnVnZ2Vy
QWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKQEAgLTI1MywxMiArMjU0LDE4IEBAIFZNOjpWTShWTVR5
cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IGlmIChjYW5Vc2VKSVQoKSkKLSAgICAgICAgbV9kZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6
OkxvbmdMaXZlZFN0YXRlKCkpOworICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6
OkxvbmdMaXZlZFN0YXRlKCkpOwogI2VuZGlmCiB9CiAKIFZNOjp+Vk0oKQogeworICAgIC8vIE1h
a2Ugc3VyZSBjb25jdXJyZW50IGNvbXBpbGF0aW9ucyBhcmUgZG9uZS4KKyNpZiBFTkFCTEUoREZH
X0pJVCkKKyAgICBpZiAod29ya2xpc3QpCisgICAgICAgIHdvcmtsaXN0LT5jb21wbGV0ZUFsbEZv
clZNKCp0aGlzKTsKKyNlbmRpZgorICAgIAogICAgIC8vIENsZWFyIHRoaXMgZmlyc3QgdG8gZW5z
dXJlIHRoYXQgbm9ib2R5IHRyaWVzIHRvIHJlbW92ZSB0aGVtc2VsdmVzIGZyb20gaXQuCiAgICAg
bV9wZXJCeXRlY29kZVByb2ZpbGVyLmNsZWFyKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgbmFtZXNwYWNlIERGRyB7CiAgICAgY2xh
c3MgTG9uZ0xpdmVkU3RhdGU7CisgICAgY2xhc3MgV29ya2xpc3Q7CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogCkBAIC0yMDcsNyArMjA4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEhlYXAgaGVhcDsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAg
IE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0YXRlOworICAgICAgICBPd25QdHI8
REZHOjpMb25nTGl2ZWRTdGF0ZT4gZGZnU3RhdGU7CisgICAgICAgIFJlZlB0cjxERkc6Oldvcmts
aXN0PiB3b3JrbGlzdDsKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgICAgICBWTVR5
cGUgdm1UeXBlOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDM0OSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMDUtMTggIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBmb3VydGhUaWVyOiBERkcgc2hvdWxk
IGJlIGFibGUgdG8gcnVuIG9uIGEgc2VwYXJhdGUgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI4MzkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgICogd3RmL0J5dGVTcGluTG9jay5o
OgorICAgICAgICBNYWtlIGl0IG5vbi1jb3B5YWJsZS4gV2UgcHJldmlvdXNseSBoYWQgYnVncyB3
aGVyZSB3ZSB1c2VkIEJ5dGVTcGluTG9jayBhcyBhIGxvY2tlci4KKyAgICAgICAgQ2xlYXJseSB0
aGF0J3MgYmFkLgorCisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDoKKyAgICAg
ICAgTWFrZSBpdCB0aHJlYWQtc2FmZSByZWYtY291bnRlZCwgc2luY2Ugd2UgbWF5IG5vdyBiZSBw
YXNzaW5nIHRoZW0gYmV0d2VlbiB0aGUKKyAgICAgICAgY29uY3VycmVudCBKSVQgdGhyZWFkIGFu
ZCB0aGUgbWFpbiB0aHJlYWQuCisKIDIwMTMtMDUtMDYgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVycnktcGljayBtZXJnZWQgc29tZSBwYXRjaGVzIHRv
IHRoZSBGVEwgYnJhbmNoLgpJbmRleDogU291cmNlL1dURi93dGYvQnl0ZVNwaW5Mb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0ZVNwaW5Mb2NrLmgJKHJldmlzaW9uIDE1MDM0
OSkKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVTcGluTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMSArMjksMTMgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVz
cGFjZSBXVEYgewogCiBjbGFzcyBCeXRlU3BpbkxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEJ5dGVTcGluTG9jayk7CiBwdWJsaWM6CiAgICAgQnl0ZVNwaW5Mb2NrKCkKICAgICAgICAg
OiBtX2xvY2soMCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlz
aW9uIDE1MDM0OSkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsMTQgKzMxLDE0IEBACiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIE1ldGFBbGxvY2F0b3I7CiAK
LWNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxNZXRhQWxsb2Nh
dG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lk
Kj46Ok5vZGUgeworY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxNZXRh
QWxsb2NhdG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogcHJpdmF0ZToKICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVz
LCB2b2lkKiBvd25lclVJRCk7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202256</attachid>
            <date>2013-05-19 22:28:23 -0700</date>
            <delta_ts>2013-05-20 15:50:43 -0700</delta_ts>
            <desc>moar</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>91443</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMzU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MSBA
QAorMjAxMy0wNS0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYSBzZXBhcmF0ZSB0aHJl
YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgU3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLiBJdCdzIG5vdCBhbHdheXMgYSBzcGVlZC11cCBh
bmQgSSBoYXZlIHRoaW5ncyB0bworICAgICAgICBpbnZlc3RpZ2F0ZSwgaW4gcGFydGljdWxhciBh
IDEtMiUgVjh2NyByZWdyZXNzaW9uLiBJdCBhcHBlYXJzIHRoYXQgdGhpcworICAgICAgICBpcyBk
dWUgdG8gY29tcGlsYXRpb24gb2Ygc29tZSBjb2RlIGJsb2NrcyBiZWluZyBkZWxheWVkIGVub3Vn
aCB0aGF0IHdlCisgICAgICAgIGVuZCB1cCBpbiBhIHNsaWdodGx5IGRpZmZlcmVudCBwcm9maWxp
bmcgcmVnaW1lLiBJJ20gc3RpbGwgcG9uZGVyaW5nIHdheXMKKyAgICAgICAgdG8gYWxsZXZpYXRl
IHRoaXMsIGZvciBleGFtcGxlIGJ5IGhhdmluZyBhbiBleHRyYSBjb21waWxhdGlvbiB0aHJlYWQu
CisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHRoZSBmaW5hbCBiaXQgb2YgY29uY3VycmVudCBK
SVRpbmcuIFRoZSBpZGVhIGlzIHRoYXQgdGhlcmUgaXMgYQorICAgICAgICBzaW5nbGUgZ2xvYmFs
IHdvcmtsaXN0LCBhbmQgYSBzaW5nbGUgZ2xvYmFsIHRocmVhZCwgdGhhdCBkb2VzIGFsbAorICAg
ICAgICBvcHRpbWl6aW5nIGNvbXBpbGF0aW9uLiBUaGlzIGlzIHRoZSBERkc6OldvcmtsaXN0LiBJ
dCBjb250YWlucyBhIHF1ZXVlIG9mCisgICAgICAgIERGRzo6UGxhbnMsIGFuZCBhIG1hcCBmcm9t
IENvZGVCbG9jayogKHRoZSBiYXNlbGluZSBjb2RlIGJsb2NrIHdlJ3JlCisgICAgICAgIHRyeWlu
ZyB0byBvcHRpbWl6ZSkgdG8gREZHOjpQbGFuLiBJZiB0aGUgREZHRHJpdmVyIHRyaWVzIHRvIGNv
bmN1cnJlbnRseQorICAgICAgICBjb21waWxlIHNvbWV0aGluZywgaXQgcHV0cyB0aGUgUGxhbiBv
biB0aGUgV29ya2xpc3QuIFRoZSBXb3JrbGlzdCdzCisgICAgICAgIHRocmVhZCB3aWxsIGNvbXBp
bGUgdGhhdCBQbGFuIGV2ZW50dWFsbHksIGFuZCB3aGVuIGl0J3MgZG9uZSwgaXQgd2lsbAorICAg
ICAgICBzaWduYWwgaXRzIGNvbXBsZXRpb24gYnkgKDEpIG5vdGlmeWluZyBhbnlvbmUgd2FpdGlu
ZyBmb3IgdGhlIFdvcmtsaXN0IHRvCisgICAgICAgIGJlIGRvbmUsIGFuZCAoMikgZm9yY2luZyB0
aGUgQ29kZUJsb2NrOjptX2ppdEV4ZWN1dGVDb3VudGVyIHRvIHRha2Ugc2xvdworICAgICAgICBw
YXRoLiBUaGUgbmV4dCBCYXNlbGluZSBKSVQgY3RpX29wdGltaXplIGNhbGwgd2lsbCB0aGVuIGlu
c3RhbGwgYWxsIHJlYWR5CisgICAgICAgIChpLmUuIGNvbXBpbGVkKSBQbGFucyBmb3IgdGhhdCBW
TS4gTm90ZSB0aGF0ICgxKSBpcyBvbmx5IGZvciB0aGUgR0MgYW5kCisgICAgICAgIFZNIHNodXRk
b3duLCB3aGljaCB3aWxsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdXRz
dGFuZGluZworICAgICAgICBhc3luYyBjb21waWxhdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcuIFRo
ZXkgZG8gc28gYnkgc2ltcGx5IHdhaXRpbmcgZm9yCisgICAgICAgIGFsbCBvZiB0aGUgcGxhbnMg
Zm9yIHRoZSBjdXJyZW50IFZNIHRvIGNvbXBsZXRlLiAoMikgaXMgdGhlIGFjdHVhbCB3YXkKKyAg
ICAgICAgdGhhdCBjb2RlIHR5cGljYWxseSBnZXRzIGluc3RhbGxlZC4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgYWxsIHZlcnkgcmFjeSBieSBkZXNpZ24uIEZvciBleGFtcGxlLCBqdXN0IGFz
IHdlIHRyeSB0byBmb3JjZSB0aGUKKyAgICAgICAgZXhlY3V0ZSBjb3VudGVyIHRvIHRha2Ugc2xv
dyBwYXRoLCB0aGUgbWFpbiB0aHJlYWQgbWF5IGJlIHNldHRpbmcgdGhlCisgICAgICAgIGV4ZWN1
dGUgY291bnRlciB0byBzb21lIG90aGVyIHZhbHVlLiBUaGUgbWFpbiB0aHJlYWQgbXVzdCBzZXQg
aXQgdG8KKyAgICAgICAgYW5vdGhlciB2YWx1ZSBiZWNhdXNlIChhKSBKSVQgY29kZSBpcyBjb25z
dGFudGx5IGluY3JlbWVudGluZyB0aGUgY291bnRlcgorICAgICAgICBpbiBhIHJhY3kgd2F5LCAo
YikgdGhlIGN0aV9vcHRpbWl6ZSBzbG93IHBhdGggd2lsbCBzZXQgaXQgdG8gc29tZQorICAgICAg
ICBsYXJnZS1pc2ggbmVnYXRpdmUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgY3RpX29wdGltaXplIGlz
bid0IGNhbGxlZAorICAgICAgICByZXBlYXRlZGx5LCBhbmQgKGMpIE9TUiBleGl0cyBmcm9tIHBy
ZXZpb3VzbHkgamV0dGlzb25lZCBjb2RlIGJsb2NrcyBtYXkKKyAgICAgICAgc3RpbGwgd2FudCB0
byByZXNldCB0aGUgY291bnRlciB2YWx1ZXMuIFRoaXMgInJhY2UiIGlzIG1hZGUgYmVuaWduLCBi
eQorICAgICAgICBlbnN1cmluZyB0aGF0IHdoaWxlIHRoZXJlIGlzIGFuIGFzeW5jaHJvbm91cyBj
b21waWxhdGlvbiwgd2UgYXQgd29yc2Ugc2V0CisgICAgICAgIHRoZSBjb3VudGVyIHRvIG9wdGlt
aXplQWZ0ZXJXYXJtVXAgYW5kIG5ldmVyIHRvIGRlZmVySW5kZWZpbml0ZWx5LiBIZW5jZQorICAg
ICAgICBpZiB0aGUgcmFjZSBoYXBwZW5zIHRoZW4gdGhlIHdvcnN0IGNhc2UgaXMgdGhhdCB3ZSB3
YWl0IGFub3RoZXIgfjEwMDAKKyAgICAgICAgY291bnRzIGJlZm9yZSBpbnN0YWxsaW5nIHRoZSBv
cHRpbWl6ZWQgY29kZS4gQW5vdGhlciBkZWZlbnNlIGlzIHRoYXQgaWYKKyAgICAgICAgYW55IENv
ZGVCbG9jayBjYWxscyBpbnRvIGN0aV9vcHRpbWl6ZSwgdGhlbiBpdCB3aWxsIGNoZWNrIGZvciBh
bGwgcmVhZHkKKyAgICAgICAgcGxhbnMgZm9yIHRoZSBWTSAtIHNvIGV2ZW4gaWYgYSBjb2RlIGJs
b2NrIGhhcyB0byB3YWl0IGFub3RoZXIgfjEwMDAKKyAgICAgICAgZXhlY3V0aW9ucyBiZWZvcmUg
aXQgY2FsbHMgY3RpX29wdGltaXplIHRvIGRvIHRoZSBpbnN0YWxsYXRpb24sIGl0IG1heQorICAg
ICAgICBhY3R1YWxseSBlbmQgdXAgYmVpbmcgaW5zdGFsbGVkIHNvb25lciBiZWNhdXNlIGEgZGlm
ZmVyZW50IGNvZGUgYmxvY2sgaGFkCisgICAgICAgIGNhbGxlZCBjdGlfb3B0aW1pemUsIHBvdGVu
dGlhbGx5IGZvciBhbiB1bnJlbGF0ZWQgcmVhc29uLgorICAgICAgICAKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIGZpeGVzIGEgbnVtYmVyIG9mIHNtYWxsIGNvbmN1cnJlbmN5IGJ1Z3MgdGhhdCBJ
IGZvdW5kCisgICAgICAgIHdoZW4gdGhpbmdzIHN0YXJ0ZWQgcnVubmluZy4gVGhlcmUgYXJlIHBy
b2JhYmx5IG1vcmUgb2YgdGhvc2UgYnVncyBzdGlsbAorICAgICAgICBsZWZ0IHRvIGZpeC4gVGhp
cyBwYXRjaCBqdXN0IGZpeGVzIHRoZSBvbmVzIEkga25vdyBhYm91dC4KKyAgICAgICAgCisgICAg
ICAgIENvbmN1cnJlbnQgY29tcGlsYXRpb24gaXMgcmlnaHQgbm93IG9ubHkgZW5hYmxlZCBvbiBY
ODZfNjQgTWFjLiBXZSBuZWVkCisgICAgICAgIHBsYXRmb3JtcyB0aGF0IGFyZSBzdWZmaWNpZW50
bHkgQ0FTdGFzdGljIHNvIHRoYXQgd2UgY2FuIGRvIHRoZSB2YXJpb3VzCisgICAgICAgIG1lbW9y
eSBmZW5jZSBhbmQgQ0FTIHRyaWNrcyB0aGF0IG1ha2UgdGhpcyBzYWZlLiBXZSBhbHNvIG5lZWQg
YSBwbGF0Zm9ybQorICAgICAgICB0aGF0IHVzZXMgSlNWQUxVRTY0LiBBbmQgd2UgbmVlZCBwdGhy
ZWFkX29uY2UuIFNvLCB0aGF0IHByZXR0eSBtdWNoIG1lYW5zCisgICAgICAgIGp1c3QgWDY0XzY0
IGZvciBub3cuIEVuYWJsaW5nIExpbnV4LTY0XzY0IHNob3VsZCBiZSBhIGJyZWV6ZSwgYnV0IEkn
bGwKKyAgICAgICAgbGVhdmUgdGhhdCB1cCB0byB0aGUgUXQgYW5kIEdUSysgcG9ydHMgdG8gZG8g
YXQgdGhlaXIgZGlzY3JldGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBzb2xpZCBz
cGVlZC11cCBvbiBTdW5TcGlkZXIgKDglKSBhbmQgVjhTcGlkZXIgKDE2JSksIG91ciB0d28KKyAg
ICAgICAgbWFpbiBjb21waWxlLXRpbWUgYmVuY2htYXJrcy4gTW9zdCBwZWN1bGlhcmx5LCB0aGlz
IGFsc28gYXBwZWFycyB0bworICAgICAgICByZWR1Y2UgbWVhc3VyZW1lbnQgbm9pc2UsIHJhdGhl
ciB0aGFuIGluY3JlYXNpbmcgaXQgYXMgeW91IHdvdWxkIGhhdmUKKyAgICAgICAgZXhwZWN0ZWQu
IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGF0IHJlc3VsdCBidXQgSSBsaWtlIGl0IGFueXdheS4KKwor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpi
YXNlbGluZVZlcnNpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXphdGlvblRo
cmVzaG9sZFNjYWxpbmdGYWN0b3IpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZP
cHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkb250T3B0
aW1pemVBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRl
cldhcm1VcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJt
VXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplU29vbik6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxQcmVk
aWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0
ZUFsbEFycmF5UHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZE9w
dGltaXplTm93KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENv
ZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrTG9jay5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6Zm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVyOjpzZXRUaHJlc2hvbGQp
OgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEV4ZWN1
dGlvbkNvdW50ZXIpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmluamVjdExhenlPcGVyYW5kU3BlY3VsYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGVBbmRFbWl0Q2hl
Y2tzKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6ZW5h
YmxlQ29uY3VycmVudEpJVCk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdEcml2
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50
cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21w
aWxlSW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmtleSk6CisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAo
UGxhbik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpXb3JrbGlzdCk6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xp
c3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQW5kU2NoZWR1bGVPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3Jr
bGlzdDo6d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpERkc6
OldvcmtsaXN0OjpxdWV1ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmR1
bXApOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpydW5UaHJlYWQpOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0Ojpjb21wbGV0ZUFzeW5jaHJvbm91c1BsYW4pOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0Ojp0aHJlYWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
aW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZSk6CisgICAgICAgIChKU0M6OkRGRzo6Z2xvYmFs
V29ya2xpc3QpOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAg
KERGRyk6CisgICAgICAgIChXb3JrbGlzdCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgIChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMu
Y3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFu
ZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6ZW50cnlPU1IpOgorICAgICAg
ICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHByb2ZpbGVy
L1Byb2ZpbGVyQnl0ZWNvZGVzLmg6CisgICAgICAgICogcnVudGltZS9Db25jdXJyZW50SklUTG9j
ay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRpb25I
YXJuZXNzLmg6CisgICAgICAgIChKU0M6Omluc3RhbGxPcHRpbWl6ZWRDb2RlKToKKyAgICAgICAg
KEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KToKKyAgICAgICAgKEpTQzo6SlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJzKToKKyAgICAgICAgKiBydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpwcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6Cisg
ICAgICAgIChTeW1ib2xUYWJsZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
IChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChWTSk6CisKIDIwMTMtMDUtMTcgIE1h
cmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVja0Fy
cmF5cyBzaG91bGQgYmUgaG9pc3RlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE1MDM1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEsNiArMzMx
LDkgQEAKIAkJMEZEQjJDRTAxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q4MTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdQbGFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEQjJDRTIxNzQ2QzFGQTAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNF
MTE3NDZDMUY4MDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFNDE3NDZDRTlGMDA3QjND
MUIgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTMxNzQ2Q0U5RDAwN0IzQzFCIC8qIENvbXBpbGF0aW9u
UmVzdWx0LmNwcCAqLzsgfTsKKwkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmts
aXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
REIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CisJCTBGREIy
Q0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERG
R1dvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFOTE3NDg5
NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi87IH07CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQjE0MzZBQjIz
MDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMzM4LDYgKzEzNDEsOSBAQAogCQkwRkRCMkNEODE3NDJEODA0MDA3
QjNDMUIgLyogREZHUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQ
bGFuLmg7IHBhdGggPSBkZmcvREZHUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkRCMkNFMTE3NDZDMUY4MDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29tcGlsYXRpb25SZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEQjJDRTMxNzQ2Q0U5RDAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dvcmtsaXN0LmNwcDsgcGF0
aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
REIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdC5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAv
KiBDb25jdXJyZW50SklUTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b25jdXJyZW50SklUTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZC
MjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
LmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUExNDM2QUIyMzAw
MTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjMzLDYgKzI2
MzksNyBAQAogCQkJCTBGREIyQ0UxMTc0NkMxRjgwMDdCM0MxQiAvKiBDb21waWxhdGlvblJlc3Vs
dC5oICovLAogCQkJCTk2OUEwOTIyMEVEMUUwOUMwMEYxRjY4MSAvKiBDb21wbGV0aW9uLmNwcCAq
LywKIAkJCQlGNUJCMkJDNTAzMEY3NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovLAorCQkJ
CTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICovLAogCQkJ
CUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAqLywKIAkJCQlC
QzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAogCQkJCUJDRDIw
MzQ1MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuY3BwICovLApAQCAtMzAzMCw2
ICszMDM3LDggQEAKIAkJCQkwRjg1QTMxRTE2QUI3NkFFMDA3NzU3MUUgLyogREZHVmFyaWFkaWNG
dW5jdGlvbi5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkwOTUwMEM3
MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkRC
MkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovLAorCQkJCTBGREIyQ0U2
MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBk
Zmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzQ0NSw2ICszNDU0LDcgQEAKIAkJ
CQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBY3RpdmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVu
dEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkwMDhFN0YwMSAv
KiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTQxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
NzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTc2LDYg
KzM1ODYsNyBAQAogCQkJCUJDMThDNDNGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBOb2Rlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDEwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZGNUNEMDBCMzQ0NjAgLyogTnVt
YmVyQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNFODE3NDgzMEEy
MDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQzMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDQ0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MkQzOTM5MTAzRTQ1NjAwMDdEQ0I1MiAvKiBOdW1lcmljU3RyaW5ncy5oIGluIEhlYWRl
cnMgKi8sCkBAIC00MzY2LDYgKzQzNzcsNyBAQAogCQkJCTE0NDY5REU4MTA3RUM3RTcwMDY1MDQ0
NiAvKiBQcm9wZXJ0eVNsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOTUxNzJFMDRB
MDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3NEMzM0MxNkFB
MkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkRC
MkNFNzE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVz
cGFjZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTAzNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNp
bmNsdWRlICJERkdSZXBhdGNoLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRl
ICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJJbnRlcnBy
ZXRlci5oIgpAQCAtMjE4MiwxMiArMjE4Myw2IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtS
ZWZlcmVuY2VzKFNsb3QKICAgICBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKHZpc2l0
b3IpOwogfQogCi0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLXN0YXRpYyBjb25zdCBib29s
IHZlcmJvc2VVbmxpbmtpbmcgPSB0cnVlOwotI2Vsc2UKLXN0YXRpYyBjb25zdCBib29sIHZlcmJv
c2VVbmxpbmtpbmcgPSBmYWxzZTsKLSNlbmRpZgotCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKQogewogI2lmIEVOQUJMRShMTElOVCkKQEAgLTIyMDMsNyArMjE5OCw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX291dF9vZl9saW5lOgogICAgICAgICAgICAgICAgIGlmICghY3Vy
SW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rp
b25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xl
YXJpbmcgTExJbnQgcHJvcGVydHkgYWNjZXNzIHdpdGggc3RydWN0dXJlICVwLlxuIiwgY3VySW5z
dHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGN1ckluc3Ry
dWN0aW9uWzRdLnUuc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgY3VySW5zdHJ1
Y3Rpb25bNV0udS5vcGVyYW5kID0gMDsKQEAgLTIyMTYsNyArMjIxMSw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICAgICAgJiYgSGVh
cDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAg
ICAgICAgICAgICAgICYmIEhlYXA6OmlzTWFya2VkKGN1ckluc3RydWN0aW9uWzddLnUuc3RydWN0
dXJlQ2hhaW4uZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZVVubGlua2luZykgeworICAgICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5n
IExMSW50IHB1dCB0cmFuc2l0aW9uIHdpdGggc3RydWN0dXJlcyAlcCAtPiAlcCwgY2hhaW4gJXAu
XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzRdLnUuc3Ry
dWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9u
WzZdLnUuc3RydWN0dXJlLmdldCgpLApAQCAtMjIzNiw3ICsyMjMxLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2xsaW50Q2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
aWYgKG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkgJiYgIUhlYXA6OmlzTWFya2Vk
KG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLmNhbGxlZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBMTEludCBj
YWxsIGZyb20gIiwgKnRoaXMsICJcbiIpOwogICAgICAgICAgICAgICAgIG1fbGxpbnRDYWxsTGlu
a0luZm9zW2ldLnVubGluaygpOwogICAgICAgICAgICAgfQpAQCAtMjI0OSw3ICsyMjQ0LDcgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBsaXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0
dGlzb24uCiAgICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1Nj
YW4oKSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpKSB7
Ci0gICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQogICAgICAgICAgICAgZGF0YUxvZygqdGhpcywgIiBoYXMgZGVhZCB3ZWFrIHJl
ZmVyZW5jZXMsIGpldHRpc29uaW5nIGR1cmluZyBHQy5cbiIpOwogCiAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRoZSBiYXNlbGluZSBKSVQga25vd3MgdGhhdCBpdCBzaG91bGQgcmUtd2FybS11
cCBiZWZvcmUKQEAgLTIyODMsNyArMjI3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgKIAogICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX3B1dFRvQmFzZU9wZXJh
dGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBpZiAobV9wdXRU
b0Jhc2VPcGVyYXRpb25zW2ldLm1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3B1dFRv
QmFzZU9wZXJhdGlvbnNbaV0ubV9zdHJ1Y3R1cmUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBpZiAo
dmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgcHV0VG9CYXNlIGluZm8gaW4gIiwg
KnRoaXMsICJcbiIpOwogICAgICAgICAgICAgbV9wdXRUb0Jhc2VPcGVyYXRpb25zW2ldLm1fc3Ry
dWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTIyOTcsNyArMjI5Miw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRpZgogICAgICAgICBtX3Jlc29s
dmVPcGVyYXRpb25zW2ldLmxhc3QoKS5tX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBpZiAo
bV9yZXNvbHZlT3BlcmF0aW9uc1tpXS5sYXN0KCkubV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFy
a2VkKG1fcmVzb2x2ZU9wZXJhdGlvbnNbaV0ubGFzdCgpLm1fc3RydWN0dXJlLmdldCgpKSkgewot
ICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIHJlc29s
dmUgaW5mbyBpbiAiLCAqdGhpcywgIlxuIik7CiAgICAgICAgICAgICBtX3Jlc29sdmVPcGVyYXRp
b25zW2ldLmxhc3QoKS5tX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICB9CkBAIC0yMzEyLDcg
KzIzMDcsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAg
ICAgICAgICAgICAgaWYgKENsb3N1cmVDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0lu
Zm8oaSkuc3R1Yi5nZXQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkKHN0dWItPnN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgfHwgIUhlYXA6
OmlzTWFya2VkKHN0dWItPmV4ZWN1dGFibGUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlVW5saW5raW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNsZWFyaW5nIGNsb3N1cmUgY2Fs
bCBmcm9tICIsICp0aGlzLCAiIHRvICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0dWItPmV4ZWN1dGFibGUoKS0+aGFzaEZvcihjYWxsTGlua0luZm8oaSkuc3BlY2lhbGl6YXRp
b25LaW5kKCkpLApAQCAtMjMyMSw3ICsyMzE2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkp
LnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFIZWFwOjppc01hcmtlZChjYWxsTGlua0luZm8oaSku
Y2FsbGVlLmdldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2lu
ZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJDbGVhcmluZyBjYWxsIGZyb20gIiwgKnRoaXMsICIgdG8gIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSYXdQb2ludGVyKGNhbGxMaW5rSW5mbyhpKS5jYWxsZWUuZ2V0KCkpLCAi
ICgiLApAQCAtMjM2Miw3ICsyMzU3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVy
bmFsKFJlcGF0YwogewogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogICAgIAotICAgIGlmICh2ZXJib3NlVW5s
aW5raW5nKQorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2co
IkNsZWFyaW5nIHN0cnVjdHVyZSBjYWNoZSAoa2luZCAiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpLCAiKSBpbiAiLCAqdGhpcywgIi5cbiIpOwogCiAgICAgc3dpdGNoIChn
ZXRKSVRUeXBlKCkpIHsKQEAgLTI0MjcsNiArMjQyMiwyNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ry
b25nbHlWaXNpdFdlYWtSZWZlcmVuCiAjZW5kaWYgICAgCiB9CiAKK0NvZGVCbG9jayogQ29kZUJs
b2NrOjpiYXNlbGluZVZlcnNpb24oKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgLy8gV2hlbiB3
ZSdyZSBpbml0aWFsaXppbmcgdGhlIG9yaWdpbmFsIGJhc2VsaW5lIGNvZGUgYmxvY2ssIHdlIHdv
bid0IGJlIGFibGUKKyAgICAvLyB0byBnZXQgaXRzIHJlcGxhY2VtZW50LiBCdXQgd2UnbGwga25v
dyB0aGF0IGl0J3MgdGhlIG9yaWdpbmFsIGJhc2VsaW5lIGNvZGUKKyAgICAvLyBibG9jayBiZWNh
dXNlIGl0IHdvbid0IGhhdmUgSklUIGNvZGUgeWV0IGFuZCBpdCB3b24ndCBoYXZlIGFuIGFsdGVy
bmF0aXZlLgorICAgIGlmIChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSAmJiAhYWx0ZXJu
YXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgCisgICAgQ29kZUJsb2NrKiByZXN1
bHQgPSByZXBsYWNlbWVudCgpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHdoaWxlIChyZXN1
bHQtPmFsdGVybmF0aXZlKCkpCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUo
KTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUocmVzdWx0LT5nZXRKSVRUeXBlKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICByZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCiBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5k
bGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgQVNT
RVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKQEAgLTI5ODMsOSAr
Mjk5OSwxMiBAQCBkb3VibGUgQ29kZUJsb2NrOjpvcHRpbWl6YXRpb25UaHJlc2hvbGRTCiAgICAg
QVNTRVJUKGluc3RydWN0aW9uQ291bnQpOyAvLyBNYWtlIHN1cmUgdGhpcyBpcyBjYWxsZWQgb25s
eSBhZnRlciB3ZSBoYXZlIGFuIGluc3RydWN0aW9uIHN0cmVhbTsgb3RoZXJ3aXNlIGl0J2xsIGp1
c3QgcmV0dXJuIHRoZSB2YWx1ZSBvZiBkLCB3aGljaCBtYWtlcyBubyBzZW5zZS4KICAgICAKICAg
ICBkb3VibGUgcmVzdWx0ID0gZCArIGEgKiBzcXJ0KGluc3RydWN0aW9uQ291bnQgKyBiKSArIGMg
KiBpbnN0cnVjdGlvbkNvdW50OwotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0
YUxvZygqdGhpcywgIjogaW5zdHJ1Y3Rpb24gY291bnQgaXMgIiwgaW5zdHJ1Y3Rpb25Db3VudCwg
Iiwgc2NhbGluZyBleGVjdXRpb24gY291bnRlciBieSAiLCByZXN1bHQsICIgKiAiLCBjb2RlVHlw
ZVRocmVzaG9sZE11bHRpcGxpZXIoKSwgIlxuIik7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqdGhpcywgIjog
aW5zdHJ1Y3Rpb24gY291bnQgaXMgIiwgaW5zdHJ1Y3Rpb25Db3VudCwKKyAgICAgICAgICAgICIs
IHNjYWxpbmcgZXhlY3V0aW9uIGNvdW50ZXIgYnkgIiwgcmVzdWx0LCAiICogIiwgY29kZVR5cGVU
aHJlc2hvbGRNdWx0aXBsaWVyKCksCisgICAgICAgICAgICAiXG4iKTsKKyAgICB9CiAgICAgcmV0
dXJuIHJlc3VsdCAqIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpOwogfQogCkBAIC0zMDI2
LDM0ICszMDQ1LDkwIEBAIGludDMyX3QgQ29kZUJsb2NrOjpjb3VudGVyVmFsdWVGb3JPcHRpbWkK
IAogYm9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkK
IHsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAobV92bS0+d29ya2xpc3QKKyAgICAgICAg
JiYgbV92bS0+d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUodGhpcykgPT0gREZHOjpXb3JrbGlz
dDo6Q29tcGlsZWQpIHsKKyAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gbV9qaXRFeGVj
dXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKIH0KIAogdm9p
ZCBDb2RlQmxvY2s6Om9wdGltaXplTmV4dEludm9jYXRpb24oKQogeworICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgbmV4
dCBpbnZvY2F0aW9uLlxuIik7CiAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hv
bGQoMCwgdGhpcyk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkb250T3B0aW1pemVBbnl0aW1lU29v
bigpCiB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygq
dGhpcywgIjogTm90IG9wdGltaXppbmcgYW55dGltZSBzb29uLlxuIik7CiAgICAgbV9qaXRFeGVj
dXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOwogfQogCiB2b2lkIENvZGVCbG9jazo6b3B0
aW1pemVBZnRlcldhcm1VcCgpCiB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAg
ICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0aW1pemluZyBhZnRlciB3YXJtLXVwLlxuIik7CiAg
ICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpLCB0aGlzKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6Om9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwKCkKIHsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIGFmdGVyIGxvbmcgd2FybS11cC5cbiIp
OwogICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCksIHRoaXMpOwogfQogCiB2b2lkIENvZGVCbG9jazo6
b3B0aW1pemVTb29uKCkKIHsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAg
ICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIHNvb24uXG4iKTsKICAgICBtX2ppdEV4ZWN1
dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24oKSwg
dGhpcyk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29u
Y3VycmVudGx5KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBk
YXRhTG9nKCp0aGlzLCAiOiBGb3JjaW5nIHNsb3cgcGF0aCBjb25jdXJyZW50bHkuXG4iKTsKKyAg
ICBtX2ppdEV4ZWN1dGVDb3VudGVyLmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKK30KKwor
dm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlv
blJlc3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCgocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgPT0gKHJlcGxhY2VtZW50KCkgIT0g
dGhpcykpOworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nl
c3NmdWw6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChy
ZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkpKTsKKyAgICAgICAgb3B0aW1pemVOZXh0SW52b2Nh
dGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAg
ICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENvbXBpbGF0aW9uRGVmZXJyZWQ6CisgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0
aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQorICAgICAgICAvLyBmb3Jj
ZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJ
dCB3b24ndAorICAgICAgICAvLyBuZWNlc3NhcmlseSBndWFyYW50ZWUgYW55dGhpbmcuIFNvLCB3
ZSBtYWtlIHN1cmUgdGhhdCBldmVuIGlmIHRoYXQKKyAgICAgICAgLy8gZnVuY3Rpb24gZW5kcyB1
cCBiZWluZyBhIG5vLW9wLCB3ZSBzdGlsbCBldmVudHVhbGx5IHJldHJ5IGFuZCByZWFsaXplCisg
ICAgICAgIC8vIHRoYXQgd2UgaGF2ZSBvcHRpbWl6ZWQgY29kZSByZWFkeS4KKyAgICAgICAgb3B0
aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBpbGF0aW9u
SW52YWxpZGF0ZWQ6CisgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4K
KyAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEVOQUJM
RShKSVQpCiB1aW50MzJfdCBDb2RlQmxvY2s6OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVp
bnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCiB7CkBAIC0zMTEyLDcgKzMxODcsNyBAQCBBcnJheVBy
b2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JBZGRBcnJheVByCiB2b2lkIENvZGVCbG9jazo6dXBkYXRl
QWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKAogICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3Mg
b3BlcmF0aW9uLCB1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVz
LCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcykKIHsKLSAgICBDb2RlQmxvY2tM
b2NrIGxvY2tlcihtX2xvY2spOworICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
ICAgICAKICAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOwogICAg
IG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkgVmFs
dWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxlcygp
IHRoZW4gdmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCkBAIC0zMTQ0LDcgKzMyMTksNyBAQCB2b2lk
IENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlCiAKIHZvaWQgQ29kZUJsb2NrOjp1
cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uKQog
ewotICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fYXJyYXlQcm9m
aWxlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG1fYXJyYXlQcm9maWxlc1tpXS5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyLCB0aGlzLCBvcGVyYXRpb24pOwpAQCAtMzE2Miw5ICszMjM3
LDggQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZQogCiBib29sIENv
ZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAqdGhpcywgIi4uLlxu
Iik7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRh
TG9nKCJDb25zaWRlcmluZyBvcHRpbWl6aW5nICIsICp0aGlzLCAiLi4uXG4iKTsKIAogI2lmIEVO
QUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKQEAg
LTMxNzksOSArMzI1MywxNCBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQog
ICAgIHVuc2lnbmVkIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXM7CiAgICAgdXBkYXRlQWxsUHJl
ZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKE5vT3BlcmF0aW9uLCBudW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMsIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCi0jaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiUHJvZmlsZSBob3RuZXNzOiAlbGYg
KCV1IC8gJXUpLCAlbGYgKCV1IC8gJXUpXG4iLCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLCBudW1iZXJPZkxpdmVO
b25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJlck9mVmFsdWVQcm9maWxlcygpLCAoZG91Ymxl
KW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0
cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzLCBW
YWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAqIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsK
LSNlbmRpZgorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxv
Z0YoCisgICAgICAgICAgICAiUHJvZmlsZSBob3RuZXNzOiAlbGYgKCV1IC8gJXUpLCAlbGYgKCV1
IC8gJXUpXG4iLAorICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAgICAgIG51bWJl
ck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCks
CisgICAgICAgICAgICAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVBy
b2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLAorICAgICAg
ICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcywgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1
Y2tldHMgKiBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CisgICAgfQogCiAgICAgaWYgKCghbnVt
YmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVk
UHJvZmlsZUxpdmVuZXNzUmF0ZSgpKQogICAgICAgICAmJiAoIXRvdGFsTnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHMgLyB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpID49IE9w
dGlvbnM6OmRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTAzNTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMSwyNSArMTMxLDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZD
bwogICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxpemF0aW9uRnJvbUlzQ29uc3RydWN0KG1faXND
b25zdHJ1Y3Rvcik7CiAgICAgICAgIH0KICAgICAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoZ2V0SklUVHlwZSgpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1l
bnQoKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwotICAgICAgICAgICAgd2hpbGUgKHJl
c3VsdC0+YWx0ZXJuYXRpdmUoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFs
dGVybmF0aXZlKCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKLSAgICAgICAgICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShyZXN1bHQtPmdldEpJVFR5cGUoKSkpOwotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZVZlcnNpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgfQotI2VuZGlmCisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9u
KCk7CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCkBAIC04
NjUsNiArODQ3LDEwIEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ28K
ICAgICAgICAgLy8gdG8gdHJpZ2dlciBvcHRpbWl6YXRpb24gaWYgb25lIG9mIHRob3NlIGZ1bmN0
aW9ucyBiZWNvbWVzIGhvdAogICAgICAgICAvLyBpbiB0aGUgYmFzZWxpbmUgY29kZS4KICAgICAg
ICAgdm9pZCBvcHRpbWl6ZVNvb24oKTsKKyAgICAKKyAgICAgICAgdm9pZCBmb3JjZU9wdGltaXph
dGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCk7CisgICAgCisgICAgICAgIHZvaWQgc2V0T3B0aW1p
emF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0
KTsKICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0xvY2suaAkocmV2aXNpb24gMTUwMzU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0xvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTggKzI2LDEyIEBACiAjaWZuZGVmIENvZGVCbG9ja0xvY2tfaAogI2Rl
ZmluZSBDb2RlQmxvY2tMb2NrX2gKIAotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KLSNp
bmNsdWRlIDx3dGYvTm9Mb2NrLmg+CisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCi10eXBlZGVmIEJ5
dGVTcGluTG9jayBDb2RlQmxvY2tMb2NrOwotdHlwZWRlZiBCeXRlU3BpbkxvY2tlciBDb2RlQmxv
Y2tMb2NrZXI7Ci0jZWxzZQotdHlwZWRlZiBOb0xvY2sgQ29kZUJsb2NrTG9jazsKLXR5cGVkZWYg
Tm9Mb2NrTG9ja2VyIENvZGVCbG9ja0xvY2tlcjsKLSNlbmRpZgordHlwZWRlZiBDb25jdXJyZW50
SklUTG9jayBDb2RlQmxvY2tMb2NrOwordHlwZWRlZiBDb25jdXJyZW50SklUTG9ja2VyIENvZGVC
bG9ja0xvY2tlcjsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHJldmlzaW9u
IDE1MDM1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3Vu
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTEgQEAgRXhlY3V0aW9uQ291bnRl
cjo6RXhlY3V0aW9uQ291bnRlcigpCiAgICAgcmVzZXQoKTsKIH0KIAordm9pZCBFeGVjdXRpb25D
b3VudGVyOjpmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCkKK3sKKyAgICBtX2NvdW50ZXIgPSAw
OworfQorCiBib29sIEV4ZWN1dGlvbkNvdW50ZXI6OmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5k
U2V0KENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGlmIChoYXNDcm9zc2VkVGhyZXNob2xk
KGNvZGVCbG9jaykpCkBAIC0xMjQsMTEgKzEyOSwxMSBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI6
OnNldFRocmVzaG9sZChDb2RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgICAg
IAotICAgIEFTU0VSVCghaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKTsKKyAgICBBU1NF
UlQoIW1fYWN0aXZlVGhyZXNob2xkIHx8ICFoYXNDcm9zc2VkVGhyZXNob2xkKGNvZGVCbG9jaykp
OwogICAgICAgICAKICAgICAvLyBDb21wdXRlIHRoZSB0cnVlIHRvdGFsIGNvdW50LgogICAgIGRv
dWJsZSB0cnVlVG90YWxDb3VudCA9IGNvdW50KCk7Ci0gICAgICAgIAorICAgIAogICAgIC8vIENv
cnJlY3QgdGhlIHRocmVzaG9sZCBmb3IgY3VycmVudCBtZW1vcnkgdXNhZ2UuCiAgICAgZG91Ymxl
IHRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKG1fYWN0aXZlVGhyZXNob2xk
LCBjb2RlQmxvY2spOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMTUwMzU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBFeGVjdXRpb25D
b3VudGVyIHsKIHB1YmxpYzoKICAgICBFeGVjdXRpb25Db3VudGVyKCk7CisgICAgdm9pZCBmb3Jj
ZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hl
Y2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAgICAgdm9pZCBzZXROZXdU
aHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayopOwogICAgIHZvaWQgZGVmZXJJ
bmRlZmluaXRlbHkoKTsKQEAgLTc0LDcgKzc1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0
KCk7CiAKIHB1YmxpYzoKLQogICAgIC8vIE5CLiBUaGVzZSBhcmUgaW50ZW50aW9uYWxseSBwdWJs
aWMgYmVjYXVzZSBpdCB3aWxsIGJlIG1vZGlmaWVkIGZyb20gbWFjaGluZSBjb2RlLgogICAgIAog
ICAgIC8vIFRoaXMgY291bnRlciBpcyBpbmNyZW1lbnRlZCBieSB0aGUgSklUIG9yIExMSW50LiBJ
dCBzdGFydHMgb3V0IG5lZ2F0aXZlIGFuZCBpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1MDM1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzAsNyArMjcwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IEdldExvY2FsKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCA9PSBtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgIENvZGVCbG9ja0xvY2sg
bG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAg
ICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1
cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0aW9uKGxvY2tl
ciwga2V5KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCkBAIC04NDMsNyArODQzLDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlKEFycmF5UHJvZmls
ZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24pCiAgICAgewotICAgICAgICBDb2RlQmxv
Y2tMb2NrIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2spOwogICAgICAg
ICByZXR1cm4gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQobG9ja2VyLCBwcm9maWxlLCBhY3Rpb24s
IGZhbHNlKTsKICAgICB9CkBAIC04NTUsNyArODU1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBB
cnJheU1vZGUgZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhBcnJheVByb2ZpbGUqIHByb2ZpbGUs
IEFycmF5OjpBY3Rpb24gYWN0aW9uLCBOb2RlKiBiYXNlKQogICAgIHsKLSAgICAgICAgQ29kZUJs
b2NrTG9jayBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2sp
OworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgCiAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ayk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShy
ZXZpc2lvbiAxNTAzNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDE1IEBAIGlubGluZSBib29sIHZhbGlkYXRp
b25FbmFibGVkKCkKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCBlbmFibGVDb25jdXJyZW50SklU
KCkKK3sKKyNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCisgICAgcmV0dXJuIE9wdGlvbnM6OmVu
YWJsZUNvbmN1cnJlbnRKSVQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKIGVudW0gU3BpbGxSZWdpc3RlcnNNb2RlIHsgTmVlZFRvU3BpbGwsIERvbnRTcGlsbCB9Owog
CiBlbnVtIE5vUmVzdWx0VGFnIHsgTm9SZXN1bHQgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE1MDM1OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDEz
IEBACiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNs
dWRlICJERkdUaHVua3MuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkZU
TFRodW5rcy5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApA
QCAtNjYsMTkgKzY4LDIxIEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKENvbXBp
bGUKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogICAgIAogICAgIGlmIChsb2dD
b21waWxhdGlvbkNoYW5nZXMoKSkKLSAgICAgICAgZGF0YUxvZygiREZHIGNvbXBpbGluZyAiLCAq
Y29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkNvdW50KCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJERkcoRHJpdmVyKSBjb21w
aWxpbmcgIiwgKmNvZGVCbG9jaywgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKKyAgICAKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0IHRoZSBE
RkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwogICAgIC8vIG1h
a2Ugc3VyZSB0aGF0IGFsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRpb24gb24g
dGhlIG1haW4gdGhyZWFkLgotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKTsKLSAgICBleGVjLT52bSgpLmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKLSAgICBleGVjLT52bSgpLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKGxp
bmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKGxp
bmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICBleGVjLT52bSgpLmdldENUSVN0dWIo
dmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKHZp
cnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dl
bmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
cik7CisgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB2
bS5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CiAjaWYgRU5BQkxF
KEZUTF9KSVQpCi0gICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKEZUTDo6b3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1YihGVEw6Om9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gRGVyaXZlIG91ciBzZXQg
b2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29tcGlsYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBj
b25zZXJ2YXRpdmUKQEAgLTEwNSw3ICsxMDksMTYgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0
IGNvbXBpbGUoQ29tcGlsZQogICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9
IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwogICAgIH0KICAgICAKLSAgICBw
bGFuLT5jb21waWxlSW5UaHJlYWQoKTsKKyAgICBpZiAoZW5hYmxlQ29uY3VycmVudEpJVCgpKSB7
CisgICAgICAgIGlmICghdm0ud29ya2xpc3QpCisgICAgICAgICAgICB2bS53b3JrbGlzdCA9IGds
b2JhbFdvcmtsaXN0KCk7CisgICAgICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBERkcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVC
bG9jaywgIiB3aXRoIHF1ZXVlIGxlbmd0aCAiLCB2bS53b3JrbGlzdC0+cXVldWVMZW5ndGgoKSwg
Ii5cbiIpOworICAgICAgICB2bS53b3JrbGlzdC0+ZW5xdWV1ZShwbGFuKTsKKyAgICAgICAgcmV0
dXJuIENvbXBpbGF0aW9uRGVmZXJyZWQ7CisgICAgfQorICAgIAorICAgIHBsYW4tPmNvbXBpbGVJ
blRocmVhZCgqdm0uZGZnU3RhdGUpOwogICAgIHJldHVybiBwbGFuLT5maW5hbGl6ZShqaXRDb2Rl
LCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTUwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDEyICs0NCwxMiBAQCBzdGF0
aWMgY29uc3QgY2hhciogZGZnT3BOYW1lc1tdID0gewogI3VuZGVmIFNUUklOR0laRV9ERkdfT1Bf
RU5VTQogfTsKIAotR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbikKK0dyYXBoOjpHcmFw
aChWTSYgdm0sIFBsYW4mIHBsYW4sIExvbmdMaXZlZFN0YXRlJiBsb25nTGl2ZWRTdGF0ZSkKICAg
ICA6IG1fdm0odm0pCiAgICAgLCBtX3BsYW4ocGxhbikKICAgICAsIG1fY29kZUJsb2NrKG1fcGxh
bi5jb2RlQmxvY2suZ2V0KCkpCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2sobV9jb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpCi0gICAgLCBtX2FsbG9jYXRvcih2bS5tX2RmZ1N0YXRlLT5tX2FsbG9jYXRv
cikKKyAgICAsIG1fYWxsb2NhdG9yKGxvbmdMaXZlZFN0YXRlLm1fYWxsb2NhdG9yKQogICAgICwg
bV9oYXNBcmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9p
bnQpCiAgICAgLCBtX2Zvcm0oTG9hZFN0b3JlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkocmV2aXNpb24gMTUwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIGVudW0gQWRkU3Bl
Y3VsYXRpb25Nb2RlIHsKIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZl
Y3RvciB3aXRoIHJlZkNvdW50IDAuCiBjbGFzcyBHcmFwaCB7CiBwdWJsaWM6Ci0gICAgR3JhcGgo
Vk0mLCBQbGFuJik7CisgICAgR3JhcGgoVk0mLCBQbGFuJiwgTG9uZ0xpdmVkU3RhdGUmKTsKICAg
ICB+R3JhcGgoKTsKICAgICAKICAgICB2b2lkIGNoYW5nZUNoaWxkKEVkZ2UmIGVkZ2UsIE5vZGUq
IG5ld05vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAkocmV2aXNpb24gMTUwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE3ICs0NSwxOCBAQCB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICBBU1NF
UlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgZGF0YUxvZygiT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIg
LT4gIiwgKmNvZGVCbG9jaywgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJcbiIpOwotI2Vu
ZGlmCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgIk9TUiBpbiAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIC0+ICIs
ICpjb2RlQmxvY2ssCisgICAgICAgICAgICAiIGZyb20gYmMjIiwgYnl0ZWNvZGVJbmRleCwgIlxu
Iik7CisgICAgfQogICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE9TUkVudHJ5
RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZGZnKCktPm9zckVudHJ5RGF0
YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgaWYgKCFlbnRyeSkg
ewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgT1NS
IGZhaWxlZCBiZWNhdXNlIHRoZSBlbnRyeXBvaW50IHdhcyBvcHRpbWl6ZWQgb3V0LlxuIik7Ci0j
ZW5kaWYKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHRoZSBlbnRyeXBvaW50IHdhcyBvcHRpbWl6
ZWQgb3V0LlxuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKQEAgLTg3LDExICs4
OCwxMSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAg
ICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGVudHJ5LT5tX2V4cGVjdGVk
VmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgaWYgKGFy
Z3VtZW50ID49IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpIHsKLSNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVk
IGJlY2F1c2UgYXJndW1lbnQgJXp1IHdhcyBub3QgcGFzc2VkLCBleHBlY3RlZCAiLCBhcmd1bWVu
dCk7Ci0gICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVu
dCkuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwot
I2VuZGlmCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXp1IHdh
cyBub3QgcGFzc2VkLCBleHBlY3RlZCAiLCBhcmd1bWVudCk7CisgICAgICAgICAgICAgICAgZW50
cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLmR1bXAoV1RGOjpkYXRhRmls
ZSgpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEwMiw5ICsxMDMs
MTEgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgICAgICAg
ICAgdmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmd1bWVudCAtIDEpOwogICAgICAgICAKICAgICAg
ICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkudmFsaWRh
dGUodmFsdWUpKSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIGRh
dGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgIiwgYXJndW1lbnQsICIgaXMg
IiwgdmFsdWUsICIsIGV4cGVjdGVkICIsIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50
KGFyZ3VtZW50KSwgIi5cbiIpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAg
ICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgIiwgYXJndW1lbnQsICIgaXMgIiwg
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICIsIGV4cGVjdGVkICIsIGVudHJ5LT5tX2V4cGVj
dGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgIi5cbiIpOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTIsMTcgKzExNSwyMiBA
QCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgZm9yIChzaXpl
X3QgbG9jYWwgPSAwOyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mTG9j
YWxzKCk7ICsrbG9jYWwpIHsKICAgICAgICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZERvdWJs
ZS5nZXQobG9jYWwpKSB7CiAgICAgICAgICAgICBpZiAoIWV4ZWMtPnJlZ2lzdGVycygpW2xvY2Fs
XS5qc1ZhbHVlKCkuaXNOdW1iZXIoKSkgewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAi
LCBsb2NhbCwgIiBpcyAiLCBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLCAiLCBl
eHBlY3RlZCBudW1iZXIuXG4iKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICIsIGxvY2Fs
LCAiIGlzICIsCisgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5yZWdpc3RlcnMoKVtsb2Nh
bF0uanNWYWx1ZSgpLCAiLCBleHBlY3RlZCBudW1iZXIuXG4iKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVz
LmxvY2FsKGxvY2FsKS52YWxpZGF0ZShleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgp
KSkgewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9nKCIg
ICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICIsIGxvY2FsLCAiIGlzICIsIGV4ZWMtPnJl
Z2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCksICIsIGV4cGVjdGVkICIsIGVudHJ5LT5tX2V4cGVj
dGVkVmFsdWVzLmxvY2FsKGxvY2FsKSwgIi5cbiIpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAg
ICAgICAgICAgICAgICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWws
ICIgaXMgIiwKKyAgICAgICAgICAgICAgICAgICAgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpz
VmFsdWUoKSwgIiwgZXhwZWN0ZWQgIiwKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fZXhw
ZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLCAiLlxuIik7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNSwxNSArMTQzLDEzIEBAIHZv
aWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyAgICB3b3VsZCBo
YXZlIG90aGVyd2lzZSBqdXN0IGtlcHQgcnVubmluZyBhbGJlaXQgbGVzcyBxdWlja2x5LgogICAg
IAogICAgIGlmICghdm0tPmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVy
cygpW2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgewotI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHN0
YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ug
c3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiICAgIE9TUiBzaG91
bGQgc3VjY2VlZC5cbiIpOwotI2VuZGlmCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkK
KyAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1Igc2hvdWxkIHN1Y2NlZWQuXG4iKTsKICAgICAKICAg
ICAvLyAzKSBQZXJmb3JtIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zLgogICAgIGZvciAoc2l6ZV90
IGxvY2FsID0gMDsgbG9jYWwgPCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkxvY2Fs
cygpOyArK2xvY2FsKSB7CkBAIC0xNTksOSArMTY1LDggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIHZvaWQqIHJlc3VsdCA9IGNvZGVCbG9jay0+
Z2V0SklUQ29kZSgpLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KGVudHJ5LT5tX21hY2hpbmVD
b2RlT2Zmc2V0KTsKICAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFM
b2dGKCIgICAgT1NSIHJldHVybmluZyBtYWNoaW5lIGNvZGUgYWRkcmVzcyAlcC5cbiIsIHJlc3Vs
dCk7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRh
TG9nRigiICAgIE9TUiByZXR1cm5pbmcgbWFjaGluZSBjb2RlIGFkZHJlc3MgJXAuXG4iLCByZXN1
bHQpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiAjZWxzZSAvLyBERkdfRU5BQkxFKE9TUl9F
TlRSWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTUwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4Niw5ICsxNjg2LDggQEAgdm9pZCBERkdf
T1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogCiBleHRlcm4gIkMiIHZvaWQgREZHX09Q
RVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6
IEVudGVyZWQgcmVvcHRpbWl6ZVxuIik7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEVudGVyZWQgcmVvcHRpbWl6
ZVxuIik7CiAgICAgLy8gV2UgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29kZSBi
bG9jay4KICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrLT5nZXRK
SVRUeXBlKCkpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShy
ZXZpc2lvbiAxNTAzNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIFBsYW46OlBsYW4oCiAgICAgLCBtdXN0
SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVl
cykKICAgICAsIGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCkt
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jay5nZXQo
KSksIFByb2ZpbGVyOjpERkcpKSA6IDApCiAgICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2suZ2V0
KCkpCisgICAgLCBpc0NvbXBpbGVkKGZhbHNlKQogewogfQogCkBAIC04NSwxMiArODYsMTUgQEAg
UGxhbjo6flBsYW4oKQogewogfQogCi12b2lkIFBsYW46OmNvbXBpbGVJblRocmVhZCgpCit2b2lk
IFBsYW46OmNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0ZSYgbG9uZ0xpdmVkU3RhdGUpCiB7
CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb21waWxhdGlvbiAoUGxh
bikiKTsKICAgICBDb21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9uU2NvcGU7CiAKLSAgICBHcmFw
aCBkZmcodm0sICp0aGlzKTsKKyAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCisgICAg
ICAgIGRhdGFMb2coIkRGRyhQbGFuKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiwgbnVtYmVy
IG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4i
KTsKKworICAgIEdyYXBoIGRmZyh2bSwgKnRoaXMsIGxvbmdMaXZlZFN0YXRlKTsKICAgICAKICAg
ICBpZiAoIXBhcnNlKGRmZykpIHsKICAgICAgICAgZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZh
aWxlZEZpbmFsaXplcigqdGhpcykpOwpAQCAtMTk5LDYgKzIwMywxMSBAQCBDb21waWxhdGlvblJl
c3VsdCBQbGFuOjpmaW5hbGl6ZShSZWZQdHI8CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bDsKIH0KIAorQ29kZUJsb2NrKiBQbGFuOjprZXkoKQoreworICAgIHJldHVybiBjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgJKHJldmlzaW9uIDE1MDM1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIGNsYXNzIENvZGVCbG9jazsKIAog
bmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIExvbmdMaXZlZFN0YXRlOworCiBlbnVtIENvbXBpbGVN
b2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21waWxlT3RoZXIgfTsKIAogI2lmIEVOQUJMRShERkdf
SklUKQpAQCAtNTMsMTAgKzU1LDEyIEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGUKICAgICAgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCB1bnNpZ25l
ZCBudW1WYXJzV2l0aFZhbHVlcyk7CiAgICAgflBsYW4oKTsKICAgICAKLSAgICB2b2lkIGNvbXBp
bGVJblRocmVhZCgpOworICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXRlJik7
CiAgICAgCiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29k
ZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNr
KTsKICAgICAKKyAgICBDb2RlQmxvY2sqIGtleSgpOworICAgIAogICAgIGNvbnN0IENvbXBpbGVN
b2RlIGNvbXBpbGVNb2RlOwogICAgIFZNJiB2bTsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2Rl
QmxvY2s7CkBAIC03MSw2ICs3NSw4IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGUKICAgICBEZXNpcmVkV2F0Y2hwb2ludHMgd2F0Y2hwb2ludHM7CiAgICAgRGVzaXJl
ZElkZW50aWZpZXJzIGlkZW50aWZpZXJzOwogICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMgY2hh
aW5zOworICAgIAorICAgIGJvb2wgaXNDb21waWxlZDsKIAogcHJpdmF0ZToKICAgICBib29sIGlz
U3RpbGxWYWxpZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmts
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHV29ya2xpc3QuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitXb3JrbGlzdDo6V29ya2xpc3QoKQoreworfQorCitX
b3JrbGlzdDo6fldvcmtsaXN0KCkKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZChudWxscHRyKTsgLy8g
VXNlIG51bGwgcGxhbiB0byBpbmRpY2F0ZSB0aGF0IHdlIHdhbnQgdGhlIHRocmVhZCB0byB0ZXJt
aW5hdGUuCisgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWQpOworfQorCit2b2lk
IFdvcmtsaXN0OjpmaW5pc2hDcmVhdGlvbigpCit7CisgICAgbV90aHJlYWQgPSBjcmVhdGVUaHJl
YWQodGhyZWFkRnVuY3Rpb24sIHRoaXMsICJKU0MgQ29tcGlsYXRpb24gVGhyZWFkIik7Cit9CisK
K1Bhc3NSZWZQdHI8V29ya2xpc3Q+IFdvcmtsaXN0OjpjcmVhdGUoKQoreworICAgIFJlZlB0cjxX
b3JrbGlzdD4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFdvcmtsaXN0KCkpOworICAgIHJlc3VsdC0+
ZmluaXNoQ3JlYXRpb24oKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdvcmtsaXN0
OjplbnF1ZXVlKFBhc3NSZWZQdHI8UGxhbj4gcGFzc2VkUGxhbikKK3sKKyAgICBSZWZQdHI8UGxh
bj4gcGxhbiA9IHBhc3NlZFBsYW47CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAgICAgICAgZHVt
cChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIjogRW5xdWV1ZWlu
ZyBwbGFuIHRvIG9wdGltaXplICIsICpwbGFuLT5rZXkoKSwgIlxuIik7CisgICAgfQorICAgIEFT
U0VSVChtX3BsYW5zLmZpbmQocGxhbi0+a2V5KCkpID09IG1fcGxhbnMuZW5kKCkpOworICAgIG1f
cGxhbnMuYWRkKHBsYW4tPmtleSgpLCBwbGFuKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsK
KyAgICBtX2NvbmRpdGlvbi5icm9hZGNhc3QoKTsKK30KKworQ29tcGlsYXRpb25SZXN1bHQgV29y
a2xpc3Q6OmNvbXBsZXRlQW5kU2NoZWR1bGVPU1IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKQor
eworICAgIFJlZlB0cjxQbGFuPiBwbGFuOworICAgIAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRp
b25RdWV1ZSgpKSB7CisgICAgICAgICAgICBkdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsK
KyAgICAgICAgICAgIGRhdGFMb2coIjogQ29tcGxldGluZyAiLCAqcHJvZmlsZWRCbG9jaywgIlxu
Iik7CisgICAgICAgIH0KKyAgICAgICAgcGxhbiA9IG1fcGxhbnMudGFrZShwcm9maWxlZEJsb2Nr
KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHBsYW4pOworICAgIEFTU0VSVChwbGFuLT5pc0Nv
bXBpbGVkKTsKKyAgICAKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBwcm9maWxlZEJs
b2NrLT5yZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShwbGFuKTsKKyAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgcHJvZmls
ZWRCbG9jay0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0
KHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV29ya2xpc3Q6OlN0YXRl
IFdvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaykKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBQbGFuTWFwOjppdGVyYXRvciBp
dGVyID0gbV9wbGFucy5maW5kKHByb2ZpbGVkQmxvY2spOworICAgIGlmIChpdGVyID09IG1fcGxh
bnMuZW5kKCkpCisgICAgICAgIHJldHVybiBOb3RLbm93bjsKKyAgICByZXR1cm4gaXRlci0+dmFs
dWUtPmlzQ29tcGlsZWQgPyBDb21waWxlZCA6IENvbXBpbGluZzsKK30KKwordm9pZCBXb3JrbGlz
dDo6d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJiB2bSkKK3sKKyAgICAvLyBXYWl0
IGZvciBhbGwgb2YgdGhlIHBsYW5zIGZvciB0aGUgZ2l2ZW4gVk0gdG8gY29tcGxldGUuIFRoZSBp
ZGVhIGhlcmUKKyAgICAvLyBpcyB0aGF0IHdlIHdhbnQgYWxsIG9mIHRoZSBjYWxsZXIgVk0ncyBw
bGFucyB0byBiZSBkb25lLiBXZSBkb24ndCBjYXJlCisgICAgLy8gYWJvdXQgYW55IG90aGVyIFZN
J3MgcGxhbnMsIGFuZCB3ZSB3b24ndCBhdHRlbXB0IHRvIHdhaXQgb24gdGhvc2UuCisgICAgLy8g
QWZ0ZXIgd2UgcmVsZWFzZSB0aGlzIGxvY2ssIHdlIGtub3cgdGhhdCBhbHRob3VnaCBvdGhlciBW
TXMgbWF5IHN0aWxsCisgICAgLy8gYmUgYWRkaW5nIHBsYW5zLCBvdXIgVk0gd2lsbCBub3QgYmUu
CisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAgICAgICAgZHVtcChsb2NrZXIs
IFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIjogV2FpdGluZyBmb3IgYWxsIGlu
IFZNIHRvIGNvbXBsZXRlLlxuIik7CisgICAgfQorICAgIAorICAgIGZvciAoOzspIHsKKyAgICAg
ICAgYm9vbCBhbGxBcmVDb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBQbGFuTWFwOjppdGVyYXRv
ciBlbmQgPSBtX3BsYW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAg
IGlmICgmaXRlci0+dmFsdWUtPnZtICE9ICZ2bSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUtPmlzQ29tcGlsZWQpIHsKKyAgICAgICAgICAg
ICAgICBhbGxBcmVDb21wbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGFsbEFyZUNvbXBs
ZXRlZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgbV9jb25kaXRpb24u
d2FpdChtX2xvY2spOworICAgIH0KK30KKworV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywg
Q29tcGlsYXRpb25SZXN1bHQqIHJlc3VsdEZvckJsb2NrKQoreworICAgIFZlY3RvcjxSZWZQdHI8
Q29kZUJsb2NrPiA+IGtleUJsb2NrczsKKyAgICAKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgICAgICBQbGFuTWFwOjppdGVyYXRvciBlbmQgPSBtX3BsYW5z
LmVuZCgpOworICAgICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICgmaXRlci0+dmFs
dWUtPnZtICE9ICZ2bSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
ICghaXRlci0+dmFsdWUtPmlzQ29tcGlsZWQpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBrZXlCbG9ja3MuYXBwZW5kKGl0ZXItPmtleSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgU3RhdGUgcmVzdWx0aW5nU3RhdGUgPSBOb3RLbm93bjsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IGtleUJsb2Nrcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsYXRpb25SZXN1bHQgPSBjb21wbGV0ZUFuZFNjaGVkdWxlT1NSKGtleUJs
b2Nrc1tpXS5nZXQoKSk7CisgICAgICAgIGlmIChrZXlCbG9ja3NbaV0uZ2V0KCkgPT0gcHJvZmls
ZWRCbG9jaykgeworICAgICAgICAgICAgaWYgKHJlc3VsdEZvckJsb2NrKQorICAgICAgICAgICAg
ICAgICpyZXN1bHRGb3JCbG9jayA9IGNvbXBpbGF0aW9uUmVzdWx0OworICAgICAgICAgICAgcmVz
dWx0aW5nU3RhdGUgPSBDb21waWxlZDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAo
cHJvZmlsZWRCbG9jayAmJiByZXN1bHRpbmdTdGF0ZSA9PSBOb3RLbm93biAmJiBtX3BsYW5zLmNv
bnRhaW5zKHByb2ZpbGVkQmxvY2spKQorICAgICAgICByZXN1bHRpbmdTdGF0ZSA9IENvbXBpbGlu
ZzsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0aW5nU3RhdGU7Cit9CisKK3ZvaWQgV29ya2xpc3Q6
OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYgdm0pCit7CisgICAgd2FpdFVudGlsQWxsUGxhbnNG
b3JWTUFyZVJlYWR5KHZtKTsKKyAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7Cit9
CisKK3NpemVfdCBXb3JrbGlzdDo6cXVldWVMZW5ndGgoKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIHJldHVybiBtX3F1ZXVlLnNpemUoKTsKK30KKwordm9pZCBXb3Jr
bGlzdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIGR1bXAobG9ja2VyLCBvdXQpOworfQorCit2b2lkIFdvcmtsaXN0OjpkdW1w
KGNvbnN0IE11dGV4TG9ja2VyJiwgUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBvdXQucHJpbnQo
CisgICAgICAgICJXb3JrbGlzdCgiLCBSYXdQb2ludGVyKHRoaXMpLCAiKVtRdWV1ZSBMZW5ndGgg
PSAiLCBtX3F1ZXVlLnNpemUoKSwKKyAgICAgICAgIiwgTWFwIFNpemUgPSAiLCBtX3BsYW5zLnNp
emUoKSwgIl0iKTsKK30KKwordm9pZCBXb3JrbGlzdDo6cnVuVGhyZWFkKCkKK3sKKyAgICBMb25n
TGl2ZWRTdGF0ZSBsb25nTGl2ZWRTdGF0ZTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAg
IFJlZlB0cjxQbGFuPiBwbGFuOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChtX3F1ZXVlLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CisgICAgICAgICAgICBwbGFu
ID0gbV9xdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KCFwbGFuKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgcGxhbi0+Y29t
cGlsZUluVGhyZWFkKGxvbmdMaXZlZFN0YXRlKTsKKyAgICAgICAgY29tcGxldGVBc3luY2hyb25v
dXNQbGFuKHBsYW4uZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBXb3JrbGlzdDo6Y29tcGxldGVB
c3luY2hyb25vdXNQbGFuKFBsYW4qIHBsYW4pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgcGxhbi0+a2V5KCktPmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJy
ZW50bHkoKTsKKyAgICBwbGFuLT5pc0NvbXBpbGVkID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICBkdW1wKGxvY2tlciwg
V1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygiOiBDb21waWxlZCAiLCAqcGxhbi0+
a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOworICAgIH0KKyAgICAKKyAgICBtX2NvbmRpdGlv
bi5icm9hZGNhc3QoKTsKK30KKwordm9pZCBXb3JrbGlzdDo6dGhyZWFkRnVuY3Rpb24odm9pZCog
YXJndW1lbnQpCit7CisgICAgc3RhdGljX2Nhc3Q8V29ya2xpc3QqPihhcmd1bWVudCktPnJ1blRo
cmVhZCgpOworfQorCitzdGF0aWMgcHRocmVhZF9vbmNlX3QgaW5pdGlhbGl6ZUdsb2JhbFdvcmts
aXN0S2V5T25jZSA9IFBUSFJFQURfT05DRV9JTklUOworc3RhdGljIFdvcmtsaXN0KiB0aGVHbG9i
YWxXb3JrbGlzdDsKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZSgp
Cit7CisgICAgdGhlR2xvYmFsV29ya2xpc3QgPSBXb3JrbGlzdDo6Y3JlYXRlKCkubGVha1JlZigp
OworfQorCitXb3JrbGlzdCogZ2xvYmFsV29ya2xpc3QoKQoreworICAgIHB0aHJlYWRfb25jZSgm
aW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5T25jZSwgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0
T25jZSk7CisgICAgcmV0dXJuIHRoZUdsb2JhbFdvcmtsaXN0OworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR1dvcmtsaXN0X2gKKyNkZWZpbmUgREZHV29ya2xpc3RfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR1Bs
YW4uaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBXb3JrbGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdv
cmtsaXN0PiB7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7IE5vdEtub3duLCBDb21waWxpbmcs
IENvbXBpbGVkIH07CisKKyAgICB+V29ya2xpc3QoKTsKKyAgICAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXb3JrbGlzdD4gY3JlYXRlKCk7CisgICAgCisgICAgdm9pZCBlbnF1ZXVlKFBhc3NSZWZQ
dHI8UGxhbj4pOworICAgIAorICAgIC8vIFRoaXMgaXMgZXF1aXZhbGVudCB0bzoKKyAgICAvLyB3
b3JrbGlzdC0+d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KHZtKTsKKyAgICAvLyB3b3Jr
bGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOworICAgIHZvaWQgY29tcGxldGVB
bGxQbGFuc0ZvclZNKFZNJik7CisgICAgCisgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZN
QXJlUmVhZHkoVk0mKTsKKyAgICBTdGF0ZSBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAg
ICAgICAgVk0mLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSAwLCBDb21waWxhdGlvblJlc3Vs
dCogcmVzdWx0Rm9yQmxvY2sgPSAwKTsKKyAgICAKKyAgICBDb21waWxhdGlvblJlc3VsdCBjb21w
bGV0ZUFuZFNjaGVkdWxlT1NSKENvZGVCbG9jayogcHJvZmlsZWRCbG9jayk7CisgICAgCisgICAg
U3RhdGUgY29tcGlsYXRpb25TdGF0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2spOworICAgIAor
ICAgIHNpemVfdCBxdWV1ZUxlbmd0aCgpOworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpOwor
ICAgIAorcHJpdmF0ZToKKyAgICBXb3JrbGlzdCgpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
KTsKKyAgICAKKyAgICB2b2lkIHJ1blRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHRocmVhZEZ1
bmN0aW9uKHZvaWQqIGFyZ3VtZW50KTsKKyAgICAKKyAgICB2b2lkIGNvbXBsZXRlQXN5bmNocm9u
b3VzUGxhbihQbGFuKik7CisgICAgCisgICAgdm9pZCBkdW1wKGNvbnN0IE11dGV4TG9ja2VyJiwg
UHJpbnRTdHJlYW0mKTsKKworICAgIERlcXVlPFJlZlB0cjxQbGFuPiA+IG1fcXVldWU7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxDb2RlQmxvY2s+LCBSZWZQdHI8UGxhbj4gPiBQbGFuTWFw
OworICAgIFBsYW5NYXAgbV9wbGFuczsKKyAgICBNdXRleCBtX2xvY2s7CisgICAgLy8gV2UgYnJv
YWRjYXN0IG9uIHRoaXMgY29uZGl0aW9uIHdoZW5ldmVyOgorICAgIC8vIC0gU29tZXRoaW5nIGlz
IGVucXVldWVkLgorICAgIC8vIC0gU29tZXRoaW5nIGlzIGNvbXBsZXRlZC4KKyAgICBUaHJlYWRD
b25kaXRpb24gbV9jb25kaXRpb247CisgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZDsKK307
CisKKy8vIEZvciBub3cgd2UgdXNlIGEgc2luZ2xlIGdsb2JhbCB3b3JrbGlzdC4gSXQncyBub3Qg
Y2xlYXIgdGhhdCB0aGlzCisvLyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBpdCBpcyB3
aGF0IHdlIGRvLCBmb3Igbm93LiBUaGlzIGZ1bmN0aW9uCisvLyB3aWxsIGxhemlseSBjcmVhdGUg
b25lIHdoZW4gaXQncyBuZWVkZWQuIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgY2FsbGVkCisvLyBm
cm9tIERGR0RyaXZlci5jcHAsIHdoZW4gaXQgYWN0dWFsbHkgd2FudHMgdG8gZW5xdWV1ZSBzb21l
dGhpbmcuCitXb3JrbGlzdCogZ2xvYmFsV29ya2xpc3QoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdXb3Jr
bGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAx
NTAzNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNp
bmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvcklubGlu
ZXMuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxs
YmFjay5oIgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0
aXN0aWNzLmgiCkBAIC03MDMsOCArNzA0LDIxIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRv
Z2dsZSBzd2VlcFRvZ2cKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpBVkFT
Q1JJUFRDT1JFX0dDX0JFR0lOKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25JblBy
b2dyZXNzID09IE5vT3BlcmF0aW9uKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBp
ZiAobV92bS0+d29ya2xpc3QpCisgICAgICAgIG1fdm0tPndvcmtsaXN0LT53YWl0VW50aWxBbGxQ
bGFuc0ZvclZNQXJlUmVhZHkoKm1fdm0pOworI2VuZGlmCisgICAgCiAgICAgbV9vcGVyYXRpb25J
blByb2dyZXNzID0gQ29sbGVjdGlvbjsKIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIERv
IHRoZSBjb21wbGV0aW9uIHdoaWxlIGluZGljYXRpbmcgdGhhdCB3ZSdyZSBpbiB0aGUgR0MsIHNv
IHRoYXQgd2UKKyAgICAvLyBkb24ndCB0cnkgdG8gcmVjdXJzaXZlbHkgR0MuCisgICAgaWYgKG1f
dm0tPndvcmtsaXN0KQorICAgICAgICBtX3ZtLT53b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBs
YW5zRm9yVk0oKm1fdm0pOworI2VuZGlmCisgICAgCiAgICAgbV9hY3Rpdml0eUNhbGxiYWNrLT53
aWxsQ29sbGVjdCgpOwogCiAgICAgZG91YmxlIGxhc3RHQ1N0YXJ0VGltZSA9IFdURjo6Y3VycmVu
dFRpbWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MDM1
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0xMTAsNiArMTEwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSW5jcmVtZW50YWxTd2VlcGVyKiBzd2VlcGVyKCk7CiAKKyAgICAgICAgLy8gdHJ1ZSBp
ZiBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCisgICAgICAgIGlubGluZSBib29sIGlzQ29sbGVj
dGluZygpOwogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24gb3IgY29sbGVjdGlvbiBp
cyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1c3koKTsKICAgICAgICAgCkBA
IC0yOTMsNiArMjk1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9vcGVy
YXRpb25JblByb2dyZXNzICE9IE5vT3BlcmF0aW9uOwogICAgIH0KIAorICAgIGJvb2wgSGVhcDo6
aXNDb2xsZWN0aW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jl
c3MgPT0gQ29sbGVjdGlvbjsKKyAgICB9CisKICAgICBpbmxpbmUgSGVhcCogSGVhcDo6aGVhcChj
b25zdCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJs
b2NrRm9yKGNlbGwpLT5oZWFwKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxNTAzNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYwMSwxMCArNjAxLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIFByb3Bl
cnR5U3R1YkNvbXBpbGF0aQogCiBQYXNzUmVmUHRyPEpJVENvZGU+IEpJVDo6cHJpdmF0ZUNvbXBp
bGUoQ29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIHByaW50ZigiQ29t
cGlsaW5nIEpJVCBjb2RlIVxuIik7Ci0jZW5kaWYKLSAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJP
RklMRVIpCiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2Fu
Q29tcGlsZVdpdGhERkcoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHJldmlzaW9uIDE1MDM1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCw2IEBACiAKICNpZiBFTkFCTEUo
SklUKQogCi0vLyBWZXJib3NlIGxvZ2dpbmcgb2YgY29kZSBnZW5lcmF0aW9uCi0jZGVmaW5lIEVO
QUJMRV9KSVRfVkVSQk9TRSAwCi0vLyBWZXJib3NlIGxvZ2dpbmcgZm9yIE9TUi1yZWxhdGVkIGNv
ZGUuCi0jZGVmaW5lIEVOQUJMRV9KSVRfVkVSQk9TRV9PU1IgMAotCiAvLyBXZSd2ZSBydW4gaW50
byBzb21lIHByb2JsZW1zIHdoZXJlIGNoYW5naW5nIHRoZSBzaXplIG9mIHRoZSBjbGFzcyBKSVQg
bGVhZHMgdG8KIC8vIHBlcmZvcm1hbmNlIGZsdWN0dWF0aW9ucy4gIFRyeSBmb3JjaW5nIGFsaWdu
bWVudCBpbiBhbiBhdHRlbXB0IHRvIHN0YWJhbGl6ZSB0aGlzLgogI2lmIENPTVBJTEVSKEdDQykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTAz
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNs
dWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgorI2luY2x1
ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCkBAIC05MDYsMzEgKzkw
Nyw3NCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwogCi0jaWYgRU5BQkxFKEpJ
VF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKAotICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRl
cmVkIG9wdGltaXplIHdpdGggYnl0ZWNvZGVJbmRleCA9ICIsIGJ5dGVjb2RlSW5kZXgsCi0gICAg
ICAgICIsIGV4ZWN1dGVDb3VudGVyID0gIiwgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigp
LAotICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPnJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksCi0gICAgICAgICIsIGV4aXRDb3VudGVyID0gIik7
Ci0gICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKLSAgICAgICAg
ZGF0YUxvZyhjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPm9zckV4aXRDb3VudGVyKCkpOwotICAg
IGVsc2UKLSAgICAgICAgZGF0YUxvZygiTi9BIik7Ci0gICAgZGF0YUxvZygiXG4iKTsKLSNlbmRp
ZgorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgb3B0aW1pemUgd2l0aCBieXRlY29kZUlu
ZGV4ID0gIiwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgICIsIGV4ZWN1dGVDb3VudGVyID0g
IiwgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpLAorICAgICAgICAgICAgIiwgb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyID0gIiwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcigpLAorICAgICAgICAgICAgIiwgZXhpdENvdW50ZXIgPSAiKTsKKyAgICAgICAgaWYgKGNv
ZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIGRhdGFMb2co
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5vc3JFeGl0Q291bnRlcigpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZGF0YUxvZygiTi9BIik7CisgICAgICAgIGRhdGFMb2coIlxuIik7Cisg
ICAgfQogCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRS
ZWFjaGVkKCkpIHsKICAgICAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwot
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5v
dCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOwotI2VuZGlmCisgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2lu
ZyBub3QgdG8gb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQuXG4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLQotICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50
KCkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nKCJDb25z
aWRlcmluZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpLCAiLlxuIik7Ci0jZW5kaWYKKyAgICAKKyAgICAvLyBXZSBjYW5ub3QgYmUgaW4gdGhlIHBy
b2Nlc3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uIGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1p
emVkCisgICAgLy8gcmVwbGFjZW1lbnQuCisgICAgQVNTRVJUKAorICAgICAgICAhc3RhY2tGcmFt
ZS52bS0+d29ya2xpc3QKKyAgICAgICAgfHwgIShzdGFja0ZyYW1lLnZtLT53b3JrbGlzdC0+Y29t
cGlsYXRpb25TdGF0ZShjb2RlQmxvY2spICE9IERGRzo6V29ya2xpc3Q6Ok5vdEtub3duCisgICAg
ICAgICAgICAgJiYgY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSk7CisgICAg
CisgICAgREZHOjpXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKKyAgICBDb21waWxhdGlv
blJlc3VsdCBjb25jdXJyZW50UmVzdWx0OworICAgIGlmIChzdGFja0ZyYW1lLnZtLT53b3JrbGlz
dCkgeworICAgICAgICAvLyBUaGUgY2FsbCB0byBERkc6OldvcmtsaXN0Ojpjb21wbGV0ZUFsbFJl
YWR5UGxhbnNGb3JWTSgpIHdpbGwgY29tcGxldGUgYWxsIHJlYWR5CisgICAgICAgIC8vIChpLmUu
IGNvbXBpbGVkKSBjb2RlIGJsb2Nrcy4gQnV0IGlmIGl0IGNvbXBsZXRlcyBvdXJzLCB3ZSBhbHNv
IG5lZWQgdG8ga25vdworICAgICAgICAvLyB3aGF0IHRoZSByZXN1bHQgd2FzIHNvIHRoYXQgd2Ug
ZG9uJ3QgcGxvdyBhaGVhZCBhbmQgYXR0ZW1wdCBPU1Igb3IgaW1tZWRpYXRlCisgICAgICAgIC8v
IHJlb3B0aW1pemF0aW9uLiBUaGlzIHdpbGwgaGF2ZSBhbHJlYWR5IGFsc28gc2V0IHRoZSBhcHBy
b3ByaWF0ZSBKSVQgZXhlY3V0aW9uCisgICAgICAgIC8vIGNvdW50IHRocmVzaG9sZCBkZXBlbmRp
bmcgb24gd2hhdCBoYXBwZW5lZCwgc28gaWYgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbnl0aGluZwor
ICAgICAgICAvLyBidXQgc3VjY2Vzc2Z1bCB3ZSBqdXN0IHdhbnQgdG8gcmV0dXJuIGVhcmx5LiBT
ZWUgdGhlIGNhc2UgZm9yIHdvcmtsaXN0U3RhdGUgPT0KKyAgICAgICAgLy8gREZHOjpXb3JrbGlz
dDo6Q29tcGlsZWQsIGJlbG93LgorICAgICAgICAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGNv
dWxkIGhhdmUgYWx0ZXJuYXRpdmVseSBqdXN0IGNhbGxlZCBXb3JrbGlzdDo6Y29tcGlsYXRpb25T
dGF0ZSgpCisgICAgICAgIC8vIGhlcmUsIGFuZCBpZiBpdCByZXR1cm5lZCBDb21waWxlZCwgd2Ug
Y291bGQgaGF2ZSB0aGVuIGNhbGxlZAorICAgICAgICAvLyBjb21wbGV0ZUFuZFNjaGVkdWxlT1NS
KCkgYmVsb3cuIEJ1dCB0aGF0IHdvdWxkIGhhdmUgbWVhbnQgdGhhdCBpdCBjb3VsZCB0YWtlCisg
ICAgICAgIC8vIGxvbmdlciBmb3IgY29kZSBibG9ja3MgdG8gYmUgY29tcGxldGVkOiB0aGV5IHdv
dWxkIG9ubHkgY29tcGxldGUgd2hlbiAqdGhlaXIqCisgICAgICAgIC8vIGV4ZWN1dGlvbiBjb3Vu
dCB0cmlnZ2VyIGZpcmVkOyBidXQgdGhhdCBjb3VsZCB0YWtlIGEgd2hpbGUgc2luY2UgdGhlIGZp
cmluZyBpcworICAgICAgICAvLyByYWN5LiBJdCBjb3VsZCBhbHNvIG1lYW4gdGhhdCBjb2RlIGJs
b2NrcyB0aGF0IG5ldmVyIHJ1biBhZ2FpbiBhZnRlciBiZWluZworICAgICAgICAvLyBjb21waWxl
ZCB3b3VsZCBzaXQgb24gdGhlIHdvcmtsaXN0IHVudGlsIG5leHQgR0MuIFRoYXQncyBmaW5lLCBi
dXQgaXQncworICAgICAgICAvLyBwcm9iYWJseSBhIHdhc3RlIG9mIG1lbW9yeS4gT3VyIGdvYWwg
aGVyZSBpcyB0byBjb21wbGV0ZSBjb2RlIGJsb2NrcyBhcyBzb29uIGFzCisgICAgICAgIC8vIHBv
c3NpYmxlIGluIG9yZGVyIHRvIG1pbmltaXplIHRoZSBjaGFuY2VzIG9mIHVzIGV4ZWN1dGluZyBi
YXNlbGluZSBjb2RlIGFmdGVyCisgICAgICAgIC8vIG9wdGltaXplZCBjb2RlIGlzIGFscmVhZHkg
YXZhaWxhYmxlLgorICAgICAgICAKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHN0YWNrRnJhbWUu
dm0tPndvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgICAgICpz
dGFja0ZyYW1lLnZtLCBjb2RlQmxvY2ssICZjb25jdXJyZW50UmVzdWx0KTsKKyAgICB9IGVsc2UK
KyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IERGRzo6V29ya2xpc3Q6Ok5vdEtub3duOworICAgIAor
ICAgIGlmICh3b3JrbGlzdFN0YXRlID09IERGRzo6V29ya2xpc3Q6OkNvbXBpbGluZykgeworICAg
ICAgICAvLyBXZSBjYW5ub3QgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBp
bGF0aW9uIGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1pemVkCisgICAgICAgIC8vIHJlcGxhY2VtZW50
LgorICAgICAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gREZHOjpXb3JrbGlzdDo6
Q29tcGlsZWQpIHsKKyAgICAgICAgaWYgKGNvbmN1cnJlbnRSZXN1bHQgIT0gQ29tcGlsYXRpb25T
dWNjZXNzZnVsKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoY29kZUJsb2Nr
LT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBPU1IgIiwgKmNvZGVC
bG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7CiAgICAgICAg
IC8vIElmIHdlIGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0aGVuIGl0IG11c3QgYmUg
dGhlIGNhc2UgdGhhdCB3ZSBlbnRlcmVkCiAgICAgICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEg
bG9vcC4gVGhhdCdzIGJlY2F1c2UgaXMgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQs
CiAgICAgICAgIC8vIHRoZW4gYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZWxp
bmtlZCB0byB0aGUgcmVwbGFjZW1lbnQgYW5kIHNvCkBAIC05NDUsNjAgKzk4OSwzOSBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgLy8gc2hvdWxkUmVvcHRp
bWl6ZUZyb21Mb29wTm93KCkgdG8gYWx3YXlzIHJldHVybiB0cnVlLiBCdXQgd2UgbWFrZSBpdCBk
byBzb21lCiAgICAgICAgIC8vIGFkZGl0aW9uYWwgY2hlY2tpbmcgYW55d2F5LCB0byByZWR1Y2Ug
dGhlIGFtb3VudCBvZiByZWNvbXBpbGF0aW9uIHRocmFzaGluZy4KICAgICAgICAgaWYgKGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkpIHsKLSNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmlu
ZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiKCIsICpjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCksICIpIChpbiBsb29wKS5cbiIpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAgICAgIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywK
KyAgICAgICAgICAgICAgICAgICAgIigiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiKSAo
aW4gbG9vcCkuXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvZGVCbG9jay0+cmVv
cHRpbWl6ZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKLSNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZygiRGVsYXlpbmcgb3B0aW1p
emF0aW9uIGZvciAiLCAqY29kZUJsb2NrLCAiIChpbiBsb29wKSBiZWNhdXNlIG9mIGluc3VmZmlj
aWVudCBwcm9maWxpbmcuXG4iKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAg
ICAgICJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICIsICpjb2RlQmxvY2ssCisgICAgICAgICAg
ICAgICAgICAgICIgKGluIGxvb3ApIGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHByb2ZpbGluZy5c
biIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIlRyaWdn
ZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwotI2Vu
ZGlmCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRh
TG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAi
XG4iKTsKICAgICAgICAgCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29w
ZSgpOwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQ7CiAgICAgICAgIEpTT2JqZWN0
KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlLCBy
ZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBp
bGF0aW9uKCkKLSAgICAgICAgICAgIHx8IE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpCi0gICAg
ICAgICAgICB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiT3B0aW1pemluZyBj
b21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsK
LSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAg
ICAgICBkYXRhTG9nKCJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZmFpbGVkIHdpdGgg
YSBKUyBlcnJvci5cbiIpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSNl
bmRpZgorICAgICAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIldB
Uk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQgd2l0aCBhIEpTIGVycm9yLlxuIik7
CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKChyZXN1bHQgPT0g
Q29tcGlsYXRpb25TdWNjZXNzZnVsKSA9PSAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpICE9IGNv
ZGVCbG9jaykpOwotICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgICBjYXNlIENvbXBp
bGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBp
bGF0aW9uRmFpbGVkOgotICAgICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6Ci0jaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwg
KmNvZGVCbG9jaywgIiBmYWlsZWQuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICAgICAg
ICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgY29kZUJs
b2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQocmVz
dWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKLSAg
ICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7Ci0gICAgICAgICAgICAvLyBSZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYu
Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKLSAgICAgICAg
ICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgIH0KICAgICAKICAgICBD
b2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsK
QEAgLTEwMTQsMzIgKzEwMzcsMjggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1p
emUpCiAgICAgfQogICAgIAogICAgIGlmICh2b2lkKiBhZGRyZXNzID0gREZHOjpwcmVwYXJlT1NS
RW50cnkoY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7Ci0g
ICAgICAgIGlmIChPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKSkgeworICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAg
ICAgICAgICJQZXJmb3JtaW5nIE9TUiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpvcHRpbWl6ZWRD
b2RlQmxvY2ssICIsIGFkZHJlc3MgIiwKICAgICAgICAgICAgICAgICBSYXdQb2ludGVyKChTVFVC
X1JFVFVSTl9BRERSRVNTKS52YWx1ZSgpKSwgIiAtPiAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAi
LlxuIik7CiAgICAgICAgIH0KLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBk
YXRhTG9nKCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgc3VjY2VlZGVkLCBwZXJmb3JtaW5n
IE9TUiBhZnRlciBhIGRlbGF5IG9mICIsIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3Vu
dGVyKCksICIuXG4iKTsKLSNlbmRpZgogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29u
KCk7CiAgICAgICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNTKGFkZHJlc3MpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0
YUxvZygiT3B0aW1pemluZyAiLCAqY29kZUJsb2NrLCAiIHN1Y2NlZWRlZCwgT1NSIGZhaWxlZCwg
YWZ0ZXIgYSBkZWxheSBvZiAiLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigp
LCAiLlxuIik7Ci0jZW5kaWYKKworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIg
LT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwKKyAgICAgICAgICAgICIgc3VjY2VlZGVk
LCBPU1IgZmFpbGVkLCBhZnRlciBhIGRlbGF5IG9mICIsCisgICAgICAgICAgICBjb2RlQmxvY2st
Pm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpLCAiLlxuIik7CisgICAgfQogCiAgICAgLy8gQ291
bnQgdGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3VsYXRpb24gZmFpbHVyZS4gSWYgdGhpcyBoYXBw
ZW5zIGEgbG90LCB0aGVuCiAgICAgLy8gcmVvcHRpbWl6ZS4KICAgICBvcHRpbWl6ZWRDb2RlQmxv
Y2stPmNvdW50T1NSRXhpdCgpOwogICAgIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0g
ICAgZGF0YUxvZygiRW5jb3VudGVyZWQgT1NSIGZhaWx1cmUgIiwgKmNvZGVCbG9jaywgIiAtPiAi
LCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7Ci0jZW5kaWYKLQogICAgIC8vIFdl
IGFyZSBhIGxvdCBtb3JlIGNvbnNlcnZhdGl2ZSBhYm91dCB0cmlnZ2VyaW5nIHJlb3B0aW1pemF0
aW9uIGFmdGVyIE9TUiBmYWlsdXJlIHRoYW4KICAgICAvLyBiZWZvcmUgaXQuIElmIHdlIGVudGVy
IHRoZSBvcHRpbWl6ZV9mcm9tX2xvb3AgdHJpZ2dlciB3aXRoIGEgYnVja2V0IGZ1bGwgb2YgZmFp
bAogICAgIC8vIGFscmVhZHksIHRoZW4gd2UgcmVhbGx5IHdvdWxkIGxpa2UgdG8gcmVvcHRpbWl6
ZSBpbW1lZGlhdGVseS4gQnV0IHRoaXMgY2FzZSBjb3ZlcnMKQEAgLTEwNDksOSArMTA2OCwxMSBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAvLyByaWdodCBub3cu
IFNvLCB3ZSBvbmx5IHRyaWdnZXIgcmVvcHRpbWl6YXRpb24gb25seSB1cG9uIHRoZSBtb3JlIGNv
bnNlcnZhdGl2ZSAobm9uLWxvb3ApCiAgICAgLy8gcmVvcHRpbWl6YXRpb24gdHJpZ2dlci4KICAg
ICBpZiAob3B0aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93KCkpIHsKLSNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIHJlb3B0
aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSwgIiAoYWZ0ZXIgT1NSIGZhaWwpLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAg
ICAiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsCisg
ICAgICAgICAgICAgICAgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIiAoYWZ0ZXIgT1NSIGZh
aWwpLlxuIik7CisgICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1MDM1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
MiwzMCArMjgyLDI2IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKEMK
ICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAgICAg
CiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKLSNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nRigiICAgIEpJVCB0aHJl
c2hvbGQgc2hvdWxkIGJlIGxpZnRlZC5cbiIpOwotI2VuZGlmCisgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nRigiICAgIEpJVCB0aHJlc2hvbGQg
c2hvdWxkIGJlIGxpZnRlZC5cbiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAogICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+aml0Q29tcGlsZShl
eGVjKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25Ob3ROZWVk
ZWQ6Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0YoIiAgICBD
b2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgQ29kZSB3YXMgYWxy
ZWFkeSBjb21waWxlZC5cbiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBm
YWlsZWQuXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQor
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLlxuIik7CiAg
ICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNz
ZnVsLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwuXG4iKTsK
ICAgICAgICAgY29kZUJsb2NrLT5qaXRTb29uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IGRlZmF1bHQ6CkBAIC0zMTcsMTEgKzMxMywxMSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5k
U2V0SGV1cmlzdGljcyhDCiBlbnVtIEVudHJ5S2luZCB7IFByb2xvZ3VlLCBBcml0eUNoZWNrIH07
CiBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKEV4ZWNTdGF0ZSogZXhlYywgSW5z
dHJ1Y3Rpb24qLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlL
aW5kIGtpbmQpCiB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCpj
b2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwg
Y29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCksICJcbiIpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0obmFtZSk7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7
CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIs
IG5hbWUsICIgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBjb2RlQmxvY2st
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKSwgIlxuIik7CisgICAgfQogICAgIAogICAgIGlmICghc2hv
dWxkSklUKGV4ZWMpKSB7CiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7
CkBAIC0zNjQsMTAgKzM2MCwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVu
Y3Rpb25fCiBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKIHsKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIAotI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCi0gICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBFbnRlcmVkIGxvb3Bfb3NyIHdp
dGggZXhlY3V0ZUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSwg
IlxuIik7Ci0jZW5kaWYKKworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgbG9vcF9vc3Ig
d2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50RXhl
Y3V0ZUNvdW50ZXIoKSwgIlxuIik7CisgICAgfQogICAgIAogICAgIGlmICghc2hvdWxkSklUKGV4
ZWMpKSB7CiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CkBAIC0zOTQs
MTAgKzM5MiwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHJlcGxhY2UpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKLSAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFM
b2coKmNvZGVCbG9jaywgIjogRW50ZXJlZCByZXBsYWNlIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAi
LCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSwgIlxuIik7Ci0jZW5kaWYKKworICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgcmVwbGFjZSB3aXRoIGV4ZWN1dGVDb3VudGVyID0g
IiwKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsK
KyAgICB9CiAgICAgCiAgICAgaWYgKHNob3VsZEpJVChleGVjKSkKICAgICAgICAgaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3MoY29kZUJsb2NrLCBleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5oCShyZXZpc2lvbiAx
NTAzNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29k
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja0hh
c2guaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJCeXRlY29k
ZVNlcXVlbmNlLmgiCi0jaW5jbHVkZSA8d3RmL0J5dGVTcGluTG9jay5oPgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2Nr
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJy
ZW50SklUTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb25jdXJyZW50SklU
TG9ja19oCisjZGVmaW5lIENvbmN1cnJlbnRKSVRMb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9CeXRl
U3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9Mb2NrLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CisjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQordHlwZWRlZiBCeXRlU3BpbkxvY2sgQ29uY3Vy
cmVudEpJVExvY2s7Cit0eXBlZGVmIEJ5dGVTcGluTG9ja2VyIENvbmN1cnJlbnRKSVRMb2NrZXI7
CisjZWxzZQordHlwZWRlZiBOb0xvY2sgQ29uY3VycmVudEpJVExvY2s7Cit0eXBlZGVmIE5vTG9j
a0xvY2tlciBDb25jdXJyZW50SklUTG9ja2VyOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gQ29uY3VycmVudEpJVExvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCShyZXZpc2lvbiAxNTAz
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDE0IEBAIGlubGluZSBDb21waWxhdGlvblJl
c3VsdCBpbnN0YWxsT3B0aW1pemUKICAgICBpZiAobnVtUGFyYW1ldGVycykKICAgICAgICAgKm51
bVBhcmFtZXRlcnMgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICAgICAKLSAgICBpZiAo
aml0Q29kZSkKLSAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5
Q29zdChzaXplb2YoKmNvZGVCbG9jaykgKyBqaXRDb2RlLT5zaXplKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2Yo
KmNvZGVCbG9jaykpOworICAgIC8vIFdlIGNvdWxkIGJlIGluc3RhbGxpbmcgb3B0aW1pemVkIGNv
ZGUgZHVlIHRvIHdvcmtsaXN0IGZsdXNoIGluc2lkZSBvZiBHQy4gV2UgZG9uJ3QKKyAgICAvLyB0
aGVuIHdhbnQgdG8gcmVjdXJzaXZlbHkgR0MuCisgICAgaWYgKCFjb2RlQmxvY2stPnZtKCktPmhl
YXAuaXNCdXN5KCkpIHsKKyAgICAgICAgaWYgKGppdENvZGUpCisgICAgICAgICAgICBjb2RlQmxv
Y2stPnZtKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqY29kZUJsb2NrKSAr
IGppdENvZGUtPnNpemUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGVCbG9jay0+
dm0oKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpjb2RlQmxvY2spKTsKKyAg
ICB9CiAgICAgCiAgICAgaWYgKHNpbmsgIT0gY29kZUJsb2NrKSB7CiAgICAgICAgIC8vIFRoaXMg
Y2FuIGhhcHBlbiBpZiB3ZSBHQyBhbmQgZGVjaWRlIHRoYXQgdGhlIGNvZGUgaXMgaW52YWxpZC4K
QEAgLTE0MSwxMiArMTQ1LDIwIEBAIGlubGluZSBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRnVu
Y3Rpb24KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KIGlubGluZSBDb21waWxh
dGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKLSAgICBQYXNzUmVm
UHRyPERGRzo6UGxhbj4gcGxhbiwgUmVmUHRyPENvZGVCbG9ja1R5cGU+JiBzaW5rLCBSZWZQdHI8
SklUQ29kZT4mIGppdENvZGUsCisgICAgUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBhc3NlZFBsYW4s
IFJlZlB0cjxDb2RlQmxvY2tUeXBlPiYgc2luaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrLCBpbnQqIG51
bVBhcmFtZXRlcnMpCiB7CisgICAgUmVmUHRyPERGRzo6UGxhbj4gcGxhbiA9IHBhc3NlZFBsYW47
CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjp0cnlGaW5hbGl6ZVBsYW4ocGxh
biwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRGVmZXJyZWQgb3B0
aW1pemluZyBjb21waWxhdGlvbiAiLCAqcGxhbi0+a2V5KCksICIgLT4gIiwgKnBsYW4tPmNvZGVC
bG9jaywKKyAgICAgICAgICAgICIgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOworICAgIH0KKyAg
ICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAgICAgICAgcGxhbi0+Y29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAgICAgcmV0dXJu
IGluc3RhbGxPcHRpbWl6ZWRDb2RlKAotICAgICAgICBERkc6OnRyeUZpbmFsaXplUGxhbihwbGFu
LCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spLAotICAgICAgICBzaW5rLCBzdGF0aWNf
Y2FzdDxDb2RlQmxvY2tUeXBlKj4ocGxhbi0+Y29kZUJsb2NrLmdldCgpKSwgaml0Q29kZSwKKyAg
ICAgICAgcmVzdWx0LCBzaW5rLCBzdGF0aWNfY2FzdDxDb2RlQmxvY2tUeXBlKj4ocGxhbi0+Y29k
ZUJsb2NrLmdldCgpKSwgaml0Q29kZSwKICAgICAgICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID8g
KmppdENvZGVXaXRoQXJpdHlDaGVjayA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAogICAgICAg
ICBudW1QYXJhbWV0ZXJzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lv
biAxNTAzNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4
KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKIHsKKyAgICBMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgCiAgICAgZm9yIChpbnQgaSA9IG1fcmVnaXN0ZXJzLnNpemUoKTsgaS0tOykgewogICAgICAg
ICBpZiAoJm1fcmVnaXN0ZXJzW2ldICE9IHJlZ2lzdGVyQWRkcmVzcykKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtNDYsNiArNDgsOCBAQCBpbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6
ZmluZFJlZ2lzCiAKIGludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnMo
aW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCiB7CisgICAgTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgIAogICAgIEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49IDApOwogICAgIAog
ICAgIHNpemVfdCBvbGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaAkocmV2aXNpb24gMTUwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWZuZGVmIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RfaAogI2RlZmluZSBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0X2gKIAorI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1N5bWJvbFRhYmxlT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVnaXN0ZXIuaCIKQEAgLTkxLDggKzkyLDEyIEBAIHByb3RlY3RlZDoKICAgICB7
CiAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICB9CisgICAgCisgICAgdHlw
ZWRlZiBDb25jdXJyZW50SklUTG9jayBMb2NrOworICAgIHR5cGVkZWYgQ29uY3VycmVudEpJVExv
Y2tlciBMb2NrZXI7CiAKICAgICBTZWdtZW50ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+
LCAxNj4gbV9yZWdpc3RlcnM7CisgICAgTG9jayBtX2xvY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlz
aW9uIDE1MDM1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsNiArODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB2KGJvb2wsIHByaW50RWFjaE9TUkV4aXQsIGZhbHNlKSBcCiAgICAgdihib29sLCB2YWxp
ZGF0ZUdyYXBoLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNl
LCBmYWxzZSkgXAorICAgIHYoYm9vbCwgdmVyYm9zZU9TUiwgZmFsc2UpIFwKKyAgICB2KGJvb2ws
IHZlcmJvc2VDb21waWxhdGlvblF1ZXVlLCBmYWxzZSkgXAogICAgIFwKICAgICB2KGJvb2wsIHVz
ZUV4cGVyaW1lbnRhbEZUTCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHVzZUZUTFRCQUEsIHRydWUp
IFwKQEAgLTg4LDYgKzkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihib29sLCBlbmFibGVM
TFZNRmFzdElTZWwsIHRydWUpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZtT3B0aW1pemF0aW9uTGV2
ZWwsIDIpIFwKICAgICBcCisgICAgdihib29sLCBlbmFibGVDb25jdXJyZW50SklULCB0cnVlKSBc
CisgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlUHJvZmlsZXIsIGZhbHNlKSBcCiAgICAgXAogICAg
IHYodW5zaWduZWQsIG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50
LCAxMDAwMCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDE1MDM1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0cnVj
dHVyZV9oCiAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJDb25jdXJyZW50SklU
TG9jay5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNpbmNsdWRlICJKU1R5
cGVJbmZvLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIldlYWsuaCIKLSNp
bmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhy
ZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIEpTQ2VsbCBC
YXNlOwogICAgIAotICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7Ci0gICAgdHlwZWRlZiBC
eXRlU3BpbkxvY2tlciBMb2NrZXI7CisgICAgdHlwZWRlZiBDb25jdXJyZW50SklUTG9jayBMb2Nr
OworICAgIHR5cGVkZWYgQ29uY3VycmVudEpJVExvY2tlciBMb2NrZXI7CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
LCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSA9IE5vbkFy
cmF5LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDApOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxNTAz
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6
OnB1dFdpbGxHcm93T3V0T2ZMCiAKIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFByb3BlcnR5
VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQogewotICAgIEFTU0VSVCghZ2xvYmFs
T2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNCdXN5KCkpOworICAgIEFT
U0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNDb2xs
ZWN0aW5nKCkpOwogICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24g
MTUwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBTeW1ib2xUYWJsZV9oCiAj
ZGVmaW5lIFN5bWJvbFRhYmxlX2gKIAorI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8
d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtMzQzLDggKzM0NCw4IEBAIHN0cnVjdCBTeW1ib2xUYWJs
ZUluZGV4SGFzaFRyYWl0cyA6IEhhc2gKIGNsYXNzIFN5bWJvbFRhYmxlIHsKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBTeW1ib2xUYWJsZUVudHJ5LCBJ
ZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8U3RyaW5nSW1wbD4gPiwgU3ltYm9s
VGFibGVJbmRleEhhc2hUcmFpdHM+IE1hcDsKLSAgICB0eXBlZGVmIEJ5dGVTcGluTG9jayBMb2Nr
OwotICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgTG9ja2VyOworICAgIHR5cGVkZWYgQ29uY3Vy
cmVudEpJVExvY2sgTG9jazsKKyAgICB0eXBlZGVmIENvbmN1cnJlbnRKSVRMb2NrZXIgTG9ja2Vy
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3ltYm9sVGFibGUoKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB+U3ltYm9sVGFibGUoKTsKQEAgLTQzNCw3ICs0MzUsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIE1hcCBtX21hcDsKIHB1YmxpYzoKLSAgICBtdXRhYmxlIEJ5dGVTcGluTG9jayBt
X2xvY2s7CisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CiB9OwogCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1MDM1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUg
IkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKKyNp
bmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKQEAgLTI1MywxMiArMjU0LDE4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChjYW5Vc2VKSVQo
KSkKLSAgICAgICAgbV9kZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRl
KCkpOworICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRl
KCkpOwogI2VuZGlmCiB9CiAKIFZNOjp+Vk0oKQogeworICAgIC8vIE1ha2Ugc3VyZSBjb25jdXJy
ZW50IGNvbXBpbGF0aW9ucyBhcmUgZG9uZS4KKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAo
d29ya2xpc3QpCisgICAgICAgIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFBsYW5zRm9yVk0oKnRoaXMp
OworI2VuZGlmCisgICAgCiAgICAgLy8gQ2xlYXIgdGhpcyBmaXJzdCB0byBlbnN1cmUgdGhhdCBu
b2JvZHkgdHJpZXMgdG8gcmVtb3ZlIHRoZW1zZWx2ZXMgZnJvbSBpdC4KICAgICBtX3BlckJ5dGVj
b2RlUHJvZmlsZXIuY2xlYXIoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkocmV2aXNpb24gMTUwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICBuYW1lc3BhY2UgREZHIHsKICAgICBjbGFzcyBMb25nTGl2
ZWRTdGF0ZTsKKyAgICBjbGFzcyBXb3JrbGlzdDsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiAKQEAgLTIwNyw3ICsyMDgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGVh
cCBoZWFwOwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgT3duUHRyPERG
Rzo6TG9uZ0xpdmVkU3RhdGU+IG1fZGZnU3RhdGU7CisgICAgICAgIE93blB0cjxERkc6OkxvbmdM
aXZlZFN0YXRlPiBkZmdTdGF0ZTsKKyAgICAgICAgUmVmUHRyPERGRzo6V29ya2xpc3Q+IHdvcmts
aXN0OwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgICAgIFZNVHlwZSB2bVR5cGU7
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMTUwMzU5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgYmUgYWJsZSB0
byBydW4gb24gYSBzZXBhcmF0ZSB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMjgzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgKiB3dGYvQnl0ZVNwaW5Mb2NrLmg6CisgICAgICAg
IE1ha2UgaXQgbm9uLWNvcHlhYmxlLiBXZSBwcmV2aW91c2x5IGhhZCBidWdzIHdoZXJlIHdlIHVz
ZWQgQnl0ZVNwaW5Mb2NrIGFzIGEgbG9ja2VyLgorICAgICAgICBDbGVhcmx5IHRoYXQncyBiYWQu
CisKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOgorICAgICAgICBNYWtlIGl0
IHRocmVhZC1zYWZlIHJlZi1jb3VudGVkLCBzaW5jZSB3ZSBtYXkgbm93IGJlIHBhc3NpbmcgdGhl
bSBiZXR3ZWVuIHRoZQorICAgICAgICBjb25jdXJyZW50IEpJVCB0aHJlYWQgYW5kIHRoZSBtYWlu
IHRocmVhZC4KKwogMjAxMy0wNS0wNiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29t
PgogCiAgICAgICAgIENoZXJyeS1waWNrIG1lcmdlZCBzb21lIHBhdGNoZXMgdG8gdGhlIEZUTCBi
cmFuY2guCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAkocmV2aXNpb24gMTUwMzU5KQorKysgU291
cmNlL1dURi93dGYvQnl0ZVNwaW5Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwx
MyBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3Mu
aD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAogbmFtZXNwYWNlIFdURiB7
CiAKIGNsYXNzIEJ5dGVTcGluTG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZVNw
aW5Mb2NrKTsKIHB1YmxpYzoKICAgICBCeXRlU3BpbkxvY2soKQogICAgICAgICA6IG1fbG9jaygw
KQpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMTUwMzU5
KQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMSwxNCArMzEsMTQgQEAKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgTWV0YUFsbG9jYXRvcjsKIAotY2xhc3MgTWV0
YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+
LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7
CitjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JI
YW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiBwcml2YXRlOgogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUo
TWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93
bmVyVUlEKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202329</attachid>
            <date>2013-05-20 15:50:43 -0700</date>
            <delta_ts>2013-05-20 23:40:51 -0700</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>102006</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MSBA
QAorMjAxMy0wNS0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYSBzZXBhcmF0ZSB0aHJl
YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgU3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLiBJdCdzIG5vdCBhbHdheXMgYSBzcGVlZC11cCBh
bmQgSSBoYXZlIHRoaW5ncyB0bworICAgICAgICBpbnZlc3RpZ2F0ZSwgaW4gcGFydGljdWxhciBh
IDEtMiUgVjh2NyByZWdyZXNzaW9uLiBJdCBhcHBlYXJzIHRoYXQgdGhpcworICAgICAgICBpcyBk
dWUgdG8gY29tcGlsYXRpb24gb2Ygc29tZSBjb2RlIGJsb2NrcyBiZWluZyBkZWxheWVkIGVub3Vn
aCB0aGF0IHdlCisgICAgICAgIGVuZCB1cCBpbiBhIHNsaWdodGx5IGRpZmZlcmVudCBwcm9maWxp
bmcgcmVnaW1lLiBJJ20gc3RpbGwgcG9uZGVyaW5nIHdheXMKKyAgICAgICAgdG8gYWxsZXZpYXRl
IHRoaXMsIGZvciBleGFtcGxlIGJ5IGhhdmluZyBhbiBleHRyYSBjb21waWxhdGlvbiB0aHJlYWQu
CisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHRoZSBmaW5hbCBiaXQgb2YgY29uY3VycmVudCBK
SVRpbmcuIFRoZSBpZGVhIGlzIHRoYXQgdGhlcmUgaXMgYQorICAgICAgICBzaW5nbGUgZ2xvYmFs
IHdvcmtsaXN0LCBhbmQgYSBzaW5nbGUgZ2xvYmFsIHRocmVhZCwgdGhhdCBkb2VzIGFsbAorICAg
ICAgICBvcHRpbWl6aW5nIGNvbXBpbGF0aW9uLiBUaGlzIGlzIHRoZSBERkc6OldvcmtsaXN0LiBJ
dCBjb250YWlucyBhIHF1ZXVlIG9mCisgICAgICAgIERGRzo6UGxhbnMsIGFuZCBhIG1hcCBmcm9t
IENvZGVCbG9jayogKHRoZSBiYXNlbGluZSBjb2RlIGJsb2NrIHdlJ3JlCisgICAgICAgIHRyeWlu
ZyB0byBvcHRpbWl6ZSkgdG8gREZHOjpQbGFuLiBJZiB0aGUgREZHRHJpdmVyIHRyaWVzIHRvIGNv
bmN1cnJlbnRseQorICAgICAgICBjb21waWxlIHNvbWV0aGluZywgaXQgcHV0cyB0aGUgUGxhbiBv
biB0aGUgV29ya2xpc3QuIFRoZSBXb3JrbGlzdCdzCisgICAgICAgIHRocmVhZCB3aWxsIGNvbXBp
bGUgdGhhdCBQbGFuIGV2ZW50dWFsbHksIGFuZCB3aGVuIGl0J3MgZG9uZSwgaXQgd2lsbAorICAg
ICAgICBzaWduYWwgaXRzIGNvbXBsZXRpb24gYnkgKDEpIG5vdGlmeWluZyBhbnlvbmUgd2FpdGlu
ZyBmb3IgdGhlIFdvcmtsaXN0IHRvCisgICAgICAgIGJlIGRvbmUsIGFuZCAoMikgZm9yY2luZyB0
aGUgQ29kZUJsb2NrOjptX2ppdEV4ZWN1dGVDb3VudGVyIHRvIHRha2Ugc2xvdworICAgICAgICBw
YXRoLiBUaGUgbmV4dCBCYXNlbGluZSBKSVQgY3RpX29wdGltaXplIGNhbGwgd2lsbCB0aGVuIGlu
c3RhbGwgYWxsIHJlYWR5CisgICAgICAgIChpLmUuIGNvbXBpbGVkKSBQbGFucyBmb3IgdGhhdCBW
TS4gTm90ZSB0aGF0ICgxKSBpcyBvbmx5IGZvciB0aGUgR0MgYW5kCisgICAgICAgIFZNIHNodXRk
b3duLCB3aGljaCB3aWxsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdXRz
dGFuZGluZworICAgICAgICBhc3luYyBjb21waWxhdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcuIFRo
ZXkgZG8gc28gYnkgc2ltcGx5IHdhaXRpbmcgZm9yCisgICAgICAgIGFsbCBvZiB0aGUgcGxhbnMg
Zm9yIHRoZSBjdXJyZW50IFZNIHRvIGNvbXBsZXRlLiAoMikgaXMgdGhlIGFjdHVhbCB3YXkKKyAg
ICAgICAgdGhhdCBjb2RlIHR5cGljYWxseSBnZXRzIGluc3RhbGxlZC4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgYWxsIHZlcnkgcmFjeSBieSBkZXNpZ24uIEZvciBleGFtcGxlLCBqdXN0IGFz
IHdlIHRyeSB0byBmb3JjZSB0aGUKKyAgICAgICAgZXhlY3V0ZSBjb3VudGVyIHRvIHRha2Ugc2xv
dyBwYXRoLCB0aGUgbWFpbiB0aHJlYWQgbWF5IGJlIHNldHRpbmcgdGhlCisgICAgICAgIGV4ZWN1
dGUgY291bnRlciB0byBzb21lIG90aGVyIHZhbHVlLiBUaGUgbWFpbiB0aHJlYWQgbXVzdCBzZXQg
aXQgdG8KKyAgICAgICAgYW5vdGhlciB2YWx1ZSBiZWNhdXNlIChhKSBKSVQgY29kZSBpcyBjb25z
dGFudGx5IGluY3JlbWVudGluZyB0aGUgY291bnRlcgorICAgICAgICBpbiBhIHJhY3kgd2F5LCAo
YikgdGhlIGN0aV9vcHRpbWl6ZSBzbG93IHBhdGggd2lsbCBzZXQgaXQgdG8gc29tZQorICAgICAg
ICBsYXJnZS1pc2ggbmVnYXRpdmUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgY3RpX29wdGltaXplIGlz
bid0IGNhbGxlZAorICAgICAgICByZXBlYXRlZGx5LCBhbmQgKGMpIE9TUiBleGl0cyBmcm9tIHBy
ZXZpb3VzbHkgamV0dGlzb25lZCBjb2RlIGJsb2NrcyBtYXkKKyAgICAgICAgc3RpbGwgd2FudCB0
byByZXNldCB0aGUgY291bnRlciB2YWx1ZXMuIFRoaXMgInJhY2UiIGlzIG1hZGUgYmVuaWduLCBi
eQorICAgICAgICBlbnN1cmluZyB0aGF0IHdoaWxlIHRoZXJlIGlzIGFuIGFzeW5jaHJvbm91cyBj
b21waWxhdGlvbiwgd2UgYXQgd29yc2Ugc2V0CisgICAgICAgIHRoZSBjb3VudGVyIHRvIG9wdGlt
aXplQWZ0ZXJXYXJtVXAgYW5kIG5ldmVyIHRvIGRlZmVySW5kZWZpbml0ZWx5LiBIZW5jZQorICAg
ICAgICBpZiB0aGUgcmFjZSBoYXBwZW5zIHRoZW4gdGhlIHdvcnN0IGNhc2UgaXMgdGhhdCB3ZSB3
YWl0IGFub3RoZXIgfjEwMDAKKyAgICAgICAgY291bnRzIGJlZm9yZSBpbnN0YWxsaW5nIHRoZSBv
cHRpbWl6ZWQgY29kZS4gQW5vdGhlciBkZWZlbnNlIGlzIHRoYXQgaWYKKyAgICAgICAgYW55IENv
ZGVCbG9jayBjYWxscyBpbnRvIGN0aV9vcHRpbWl6ZSwgdGhlbiBpdCB3aWxsIGNoZWNrIGZvciBh
bGwgcmVhZHkKKyAgICAgICAgcGxhbnMgZm9yIHRoZSBWTSAtIHNvIGV2ZW4gaWYgYSBjb2RlIGJs
b2NrIGhhcyB0byB3YWl0IGFub3RoZXIgfjEwMDAKKyAgICAgICAgZXhlY3V0aW9ucyBiZWZvcmUg
aXQgY2FsbHMgY3RpX29wdGltaXplIHRvIGRvIHRoZSBpbnN0YWxsYXRpb24sIGl0IG1heQorICAg
ICAgICBhY3R1YWxseSBlbmQgdXAgYmVpbmcgaW5zdGFsbGVkIHNvb25lciBiZWNhdXNlIGEgZGlm
ZmVyZW50IGNvZGUgYmxvY2sgaGFkCisgICAgICAgIGNhbGxlZCBjdGlfb3B0aW1pemUsIHBvdGVu
dGlhbGx5IGZvciBhbiB1bnJlbGF0ZWQgcmVhc29uLgorICAgICAgICAKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIGZpeGVzIGEgbnVtYmVyIG9mIHNtYWxsIGNvbmN1cnJlbmN5IGJ1Z3MgdGhhdCBJ
IGZvdW5kCisgICAgICAgIHdoZW4gdGhpbmdzIHN0YXJ0ZWQgcnVubmluZy4gVGhlcmUgYXJlIHBy
b2JhYmx5IG1vcmUgb2YgdGhvc2UgYnVncyBzdGlsbAorICAgICAgICBsZWZ0IHRvIGZpeC4gVGhp
cyBwYXRjaCBqdXN0IGZpeGVzIHRoZSBvbmVzIEkga25vdyBhYm91dC4KKyAgICAgICAgCisgICAg
ICAgIENvbmN1cnJlbnQgY29tcGlsYXRpb24gaXMgcmlnaHQgbm93IG9ubHkgZW5hYmxlZCBvbiBY
ODZfNjQgTWFjLiBXZSBuZWVkCisgICAgICAgIHBsYXRmb3JtcyB0aGF0IGFyZSBzdWZmaWNpZW50
bHkgQ0FTdGFzdGljIHNvIHRoYXQgd2UgY2FuIGRvIHRoZSB2YXJpb3VzCisgICAgICAgIG1lbW9y
eSBmZW5jZSBhbmQgQ0FTIHRyaWNrcyB0aGF0IG1ha2UgdGhpcyBzYWZlLiBXZSBhbHNvIG5lZWQg
YSBwbGF0Zm9ybQorICAgICAgICB0aGF0IHVzZXMgSlNWQUxVRTY0LiBBbmQgd2UgbmVlZCBwdGhy
ZWFkX29uY2UuIFNvLCB0aGF0IHByZXR0eSBtdWNoIG1lYW5zCisgICAgICAgIGp1c3QgWDY0XzY0
IGZvciBub3cuIEVuYWJsaW5nIExpbnV4LTY0XzY0IHNob3VsZCBiZSBhIGJyZWV6ZSwgYnV0IEkn
bGwKKyAgICAgICAgbGVhdmUgdGhhdCB1cCB0byB0aGUgUXQgYW5kIEdUSysgcG9ydHMgdG8gZG8g
YXQgdGhlaXIgZGlzY3JldGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBzb2xpZCBz
cGVlZC11cCBvbiBTdW5TcGlkZXIgKDglKSBhbmQgVjhTcGlkZXIgKDE2JSksIG91ciB0d28KKyAg
ICAgICAgbWFpbiBjb21waWxlLXRpbWUgYmVuY2htYXJrcy4gTW9zdCBwZWN1bGlhcmx5LCB0aGlz
IGFsc28gYXBwZWFycyB0bworICAgICAgICByZWR1Y2UgbWVhc3VyZW1lbnQgbm9pc2UsIHJhdGhl
ciB0aGFuIGluY3JlYXNpbmcgaXQgYXMgeW91IHdvdWxkIGhhdmUKKyAgICAgICAgZXhwZWN0ZWQu
IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGF0IHJlc3VsdCBidXQgSSBsaWtlIGl0IGFueXdheS4KKwor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpi
YXNlbGluZVZlcnNpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXphdGlvblRo
cmVzaG9sZFNjYWxpbmdGYWN0b3IpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZP
cHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkb250T3B0
aW1pemVBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRl
cldhcm1VcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJt
VXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplU29vbik6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxQcmVk
aWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0
ZUFsbEFycmF5UHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZE9w
dGltaXplTm93KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENv
ZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrTG9jay5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6Zm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVyOjpzZXRUaHJlc2hvbGQp
OgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEV4ZWN1
dGlvbkNvdW50ZXIpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmluamVjdExhenlPcGVyYW5kU3BlY3VsYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGVBbmRFbWl0Q2hl
Y2tzKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6ZW5h
YmxlQ29uY3VycmVudEpJVCk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdEcml2
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50
cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21w
aWxlSW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmtleSk6CisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAo
UGxhbik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpXb3JrbGlzdCk6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xp
c3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQW5kU2NoZWR1bGVPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3Jr
bGlzdDo6d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpERkc6
OldvcmtsaXN0OjpxdWV1ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmR1
bXApOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpydW5UaHJlYWQpOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0Ojpjb21wbGV0ZUFzeW5jaHJvbm91c1BsYW4pOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0Ojp0aHJlYWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
aW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZSk6CisgICAgICAgIChKU0M6OkRGRzo6Z2xvYmFs
V29ya2xpc3QpOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAg
KERGRyk6CisgICAgICAgIChXb3JrbGlzdCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgIChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMu
Y3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFu
ZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6ZW50cnlPU1IpOgorICAgICAg
ICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHByb2ZpbGVy
L1Byb2ZpbGVyQnl0ZWNvZGVzLmg6CisgICAgICAgICogcnVudGltZS9Db25jdXJyZW50SklUTG9j
ay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRpb25I
YXJuZXNzLmg6CisgICAgICAgIChKU0M6Omluc3RhbGxPcHRpbWl6ZWRDb2RlKToKKyAgICAgICAg
KEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KToKKyAgICAgICAgKEpTQzo6SlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJzKToKKyAgICAgICAgKiBydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpwcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6Cisg
ICAgICAgIChTeW1ib2xUYWJsZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
IChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChWTSk6CisKIDIwMTMtMDUtMTcgIE1h
cmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVja0Fy
cmF5cyBzaG91bGQgYmUgaG9pc3RlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE1MDM4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw3
IEBACiAJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMz
MTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLzsgfTsKIAkJMEYw
RDg1QjIxNzIzNDU1NDAwMzM4MjEwIC8qIENvZGVCbG9ja0xvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIxMTcyMzQ1NTEwMDMzODIxMCAv
KiBDb2RlQmxvY2tMb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQzQ1
ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIz
NTQgLyogRGVmZXJHQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzOTEyOTE2NzcxQzMzMDA5
Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5MTI0MTY3NzFDMzAwMDlDQ0IwNyAvKiBQ
cm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwICovOyB9OwogCQkwRjEzOTEyQTE2NzcxQzM2MDA5
Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOTEyNTE2NzcxQzMwMDA5Q0NCMDcgLyogUHJv
ZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJv
ZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxMzkxMjYxNjc3MUMzMDAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRl
Y29kZXMuY3BwICovOyB9OwpAQCAtMzMxLDYgKzMzMiw5IEBACiAJCTBGREIyQ0UwMTc0MkQ4MDQw
MDdCM0MxQiAvKiBERkdQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkRCMkNEODE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0UyMTc0NkMx
RkEwMDdCM0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTExNzQ2QzFGODAwN0IzQzFCIC8qIENvbXBp
bGF0aW9uUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEQjJDRTQxNzQ2Q0U5RjAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Uz
MTc0NkNFOUQwMDdCM0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgKi87IH07CisJCTBGREIy
Q0U3MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyog
REZHV29ya2xpc3QuY3BwICovOyB9OworCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZH
V29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGREIyQ0VBMTc0ODk2QzcwMDdC
M0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRK
SVRMb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJG
QjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9
OwogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJG
QjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkUyMjhFRDE0MzZB
QjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTA2OCw2ICsx
MDcyLDcgQEAKIAkJMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEQ4NUIxMTcyMzQ1
NTEwMDMzODIxMCAvKiBDb2RlQmxvY2tMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja0xv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgx
MTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlZmVyR0MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
MzkxMjQxNjc3MUMzMDAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMzkxMjUxNjc3MUMzMDAwOUNDQjA3IC8qIFBy
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyQnl0
ZWNvZGVTZXF1ZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzOTEyNjE2
NzcxQzMwMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNw
cDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzOCw2ICsxMzQzLDkgQEAKIAkJMEZEQjJDRDgxNzQy
RDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUGxhbi5oOyBwYXRoID0gZGZnL0RGR1BsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEQjJDRTExNzQ2QzFGODAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbXBpbGF0aW9uUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGREIyQ0UzMTc0NkNFOUQwMDdCM0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxhdGlvblJlc3VsdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXb3JrbGlzdC5j
cHA7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3QuaDsgcGF0aCA9IGRmZy9ERkdXb3Jr
bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRCMkNFOTE3NDg5NkM3MDA3
QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29uY3VycmVudEpJVExvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVBMTQz
NkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM0
NCw2ICsyMzUyLDcgQEAKIAkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0
b3IuaCAqLywKIAkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxp
bmVzLmggKi8sCiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5o
ICovLAorCQkJCTBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCiAJCQkJ
MEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovLAogCQkJCTBG
MkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8sCiAJCQkJQkNCRTJD
QUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLApAQCAtMjYzMyw2ICsyNjQy
LDcgQEAKIAkJCQkwRkRCMkNFMTE3NDZDMUY4MDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQu
aCAqLywKIAkJCQk5NjlBMDkyMjBFRDFFMDlDMDBGMUY2ODEgLyogQ29tcGxldGlvbi5jcHAgKi8s
CiAJCQkJRjVCQjJCQzUwMzBGNzcyMTAxRkNGRTFEIC8qIENvbXBsZXRpb24uaCAqLywKKwkJCQkw
RkRCMkNFOTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCAqLywKIAkJCQlC
Q0E2MkRGRjBFMjgyNjMxMDAwNEYzMEQgLyogQ29uc3RydWN0RGF0YS5jcHAgKi8sCiAJCQkJQkM4
RjNDQ0YwREFGMTdCQTAwNTc3QTgwIC8qIENvbnN0cnVjdERhdGEuaCAqLywKIAkJCQlCQ0QyMDM0
NTBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZUNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTMwMzAsNiAr
MzA0MCw4IEBACiAJCQkJMEY4NUEzMUUxNkFCNzZBRTAwNzc1NzFFIC8qIERGR1ZhcmlhZGljRnVu
Y3Rpb24uaCAqLywKIAkJCQkwRkZGQzk1MzE0RUY5MDk1MDBDNzI1MzIgLyogREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1NDE0RUY5MDk1MDBDNzI1
MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggKi8sCisJCQkJMEZEQjJD
RTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLywKKwkJCQkwRkRCMkNFNjE3
NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gZGZn
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM0NDUsNiArMzQ1Nyw3IEBACiAJCQkJ
MEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MTYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQWN0aXZhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRK
SVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyog
SlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkU0MTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTcw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzU3Niw2ICsz
NTg5LDcgQEAKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9kZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDQxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDIwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJl
ckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQjJDRTgxNzQ4MzBBMjAw
N0IzQzFCIC8qIERGR1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MzBFMTZG
NUNEMDBCMzQ0NjAgLyogTnVtYmVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0
NDBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDJEMzkzOTEwM0U0NTYwMDA3RENCNTIgLyogTnVtZXJpY1N0cmluZ3MuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzc0Nyw2ICszNzYxLDcgQEAKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIg
LyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDQ0FFNDUxNkQwQ0Y3
NDAwRDBDNjVCIC8qIFBhcnNlckVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcxNENBNTE2
RUE5MkYyMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtNDM2Niw2ICs0MzgxLDcgQEAKIAkJCQkxNDQ2OURFODEwN0VDN0U3MDA2NTA0
NDYgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk1MTcyRTA0
QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzRDMzNDMTZB
QTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZE
QjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRl
c3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAj
aW5jbHVkZSAiREZHUmVwYXRjaC5oIgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVk
ZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSW50ZXJw
cmV0ZXIuaCIKQEAgLTIxODIsMTIgKzIxODMsNiBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFr
UmVmZXJlbmNlcyhTbG90CiAgICAgcGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlvbih2aXNp
dG9yKTsKIH0KIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi1zdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlVW5saW5raW5nID0gdHJ1ZTsKLSNlbHNlCi1zdGF0aWMgY29uc3QgYm9vbCB2ZXJi
b3NlVW5saW5raW5nID0gZmFsc2U7Ci0jZW5kaWYKLQogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KCkKIHsKICNpZiBFTkFCTEUoTExJTlQpCkBAIC0yMjAzLDcgKzIxOTgs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAg
ICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKICAgICAgICAgICAgICAgICBpZiAoIWN1
ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKGN1ckluc3RydWN0
aW9uWzRdLnUuc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAgICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNs
ZWFyaW5nIExMSW50IHByb3BlcnR5IGFjY2VzcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIGN1cklu
c3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICBjdXJJbnN0
cnVjdGlvbls0XS51LnN0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAgICAgICAgIGN1ckluc3Ry
dWN0aW9uWzVdLnUub3BlcmFuZCA9IDA7CkBAIC0yMjE2LDcgKzIyMTEsNyBAQCB2b2lkIENvZGVC
bG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgICAgICYmIEhl
YXA6OmlzTWFya2VkKGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlLmdldCgpKQogICAgICAg
ICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChjdXJJbnN0cnVjdGlvbls3XS51LnN0cnVj
dHVyZUNoYWluLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmlu
ZyBMTEludCBwdXQgdHJhbnNpdGlvbiB3aXRoIHN0cnVjdHVyZXMgJXAgLT4gJXAsIGNoYWluICVw
LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls0XS51LnN0
cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlv
bls2XS51LnN0cnVjdHVyZS5nZXQoKSwKQEAgLTIyMzYsNyArMjIzMSw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9sbGludENhbGxMaW5rSW5mb3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IGlmIChtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5pc0xpbmtlZCgpICYmICFIZWFwOjppc01hcmtl
ZChtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5jYWxsZWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgTExJbnQg
Y2FsbCBmcm9tICIsICp0aGlzLCAiXG4iKTsKICAgICAgICAgICAgICAgICBtX2xsaW50Q2FsbExp
bmtJbmZvc1tpXS51bmxpbmsoKTsKICAgICAgICAgICAgIH0KQEAgLTIyNDksNyArMjI0NCw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICAvLyBDaGVjayBpZiB3ZSdyZSBub3QgbGl2ZS4gSWYgd2UgYXJlLCB0aGVuIGpl
dHRpc29uLgogICAgIGlmICghKHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdT
Y2FuKCkgfHwgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKSkg
ewotICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICIgaGFzIGRlYWQgd2VhayBy
ZWZlcmVuY2VzLCBqZXR0aXNvbmluZyBkdXJpbmcgR0MuXG4iKTsKIAogICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgYmFzZWxpbmUgSklUIGtub3dzIHRoYXQgaXQgc2hvdWxkIHJlLXdhcm0t
dXAgYmVmb3JlCkBAIC0yMjgzLDcgKzIyNzgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAKICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9wdXRUb0Jhc2VPcGVy
YXRpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKG1fcHV0
VG9CYXNlT3BlcmF0aW9uc1tpXS5tX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9wdXRU
b0Jhc2VPcGVyYXRpb25zW2ldLm1fc3RydWN0dXJlLmdldCgpKSkgewotICAgICAgICAgICAgaWYg
KHZlcmJvc2VVbmxpbmtpbmcpCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIHB1dFRvQmFzZSBpbmZvIGluICIs
ICp0aGlzLCAiXG4iKTsKICAgICAgICAgICAgIG1fcHV0VG9CYXNlT3BlcmF0aW9uc1tpXS5tX3N0
cnVjdHVyZS5jbGVhcigpOwogICAgICAgICB9CkBAIC0yMjk3LDcgKzIyOTIsNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAjZW5kaWYKICAgICAgICAgbV9yZXNv
bHZlT3BlcmF0aW9uc1tpXS5sYXN0KCkubV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgaWYg
KG1fcmVzb2x2ZU9wZXJhdGlvbnNbaV0ubGFzdCgpLm1fc3RydWN0dXJlICYmICFIZWFwOjppc01h
cmtlZChtX3Jlc29sdmVPcGVyYXRpb25zW2ldLmxhc3QoKS5tX3N0cnVjdHVyZS5nZXQoKSkpIHsK
LSAgICAgICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyByZXNv
bHZlIGluZm8gaW4gIiwgKnRoaXMsICJcbiIpOwogICAgICAgICAgICAgbV9yZXNvbHZlT3BlcmF0
aW9uc1tpXS5sYXN0KCkubV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgfQpAQCAtMjMxMiw3
ICsyMzA3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAg
ICAgICAgICAgICAgIGlmIChDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKiBzdHViID0gY2FsbExpbmtJ
bmZvKGkpLnN0dWIuZ2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFIZWFwOjppc01h
cmtlZChzdHViLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFIZWFw
Ojppc01hcmtlZChzdHViLT5leGVjdXRhYmxlKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZVVubGlua2luZykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDbGVhcmluZyBjbG9zdXJlIGNh
bGwgZnJvbSAiLCAqdGhpcywgIiB0byAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHViLT5leGVjdXRhYmxlKCktPmhhc2hGb3IoY2FsbExpbmtJbmZvKGkpLnNwZWNpYWxpemF0
aW9uS2luZCgpKSwKQEAgLTIzMjEsNyArMjMxNiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhp
KS51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghSGVhcDo6aXNNYXJrZWQoY2FsbExpbmtJbmZvKGkp
LmNhbGxlZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtp
bmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiQ2xlYXJpbmcgY2FsbCBmcm9tICIsICp0aGlzLCAiIHRvICIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmF3UG9pbnRlcihjYWxsTGlua0luZm8oaSkuY2FsbGVlLmdldCgpKSwg
IiAoIiwKQEAgLTIzNjIsNyArMjM1Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldFN0dWJJbnRl
cm5hbChSZXBhdGMKIHsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKICAgICAKLSAgICBpZiAodmVyYm9zZVVu
bGlua2luZykKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9n
KCJDbGVhcmluZyBzdHJ1Y3R1cmUgY2FjaGUgKGtpbmQgIiwgc3RhdGljX2Nhc3Q8aW50PihzdHVi
SW5mby5hY2Nlc3NUeXBlKSwgIikgaW4gIiwgKnRoaXMsICIuXG4iKTsKIAogICAgIHN3aXRjaCAo
Z2V0SklUVHlwZSgpKSB7CkBAIC0yNDI3LDYgKzI0MjIsMjcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0
cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgogI2VuZGlmICAgIAogfQogCitDb2RlQmxvY2sqIENvZGVC
bG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIC8vIFdoZW4g
d2UncmUgaW5pdGlhbGl6aW5nIHRoZSBvcmlnaW5hbCBiYXNlbGluZSBjb2RlIGJsb2NrLCB3ZSB3
b24ndCBiZSBhYmxlCisgICAgLy8gdG8gZ2V0IGl0cyByZXBsYWNlbWVudC4gQnV0IHdlJ2xsIGtu
b3cgdGhhdCBpdCdzIHRoZSBvcmlnaW5hbCBiYXNlbGluZSBjb2RlCisgICAgLy8gYmxvY2sgYmVj
YXVzZSBpdCB3b24ndCBoYXZlIEpJVCBjb2RlIHlldCBhbmQgaXQgd29uJ3QgaGF2ZSBhbiBhbHRl
cm5hdGl2ZS4KKyAgICBpZiAoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6Ok5vbmUgJiYgIWFsdGVy
bmF0aXZlKCkpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIAorICAgIENvZGVCbG9jayogcmVz
dWx0ID0gcmVwbGFjZW1lbnQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICB3aGlsZSAocmVz
dWx0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZl
KCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKHJlc3VsdC0+Z2V0SklUVHlwZSgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisg
ICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKK30KKwogSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFu
ZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIEFT
U0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CkBAIC0yOTgzLDkg
KzI5OTksMTIgQEAgZG91YmxlIENvZGVCbG9jazo6b3B0aW1pemF0aW9uVGhyZXNob2xkUwogICAg
IEFTU0VSVChpbnN0cnVjdGlvbkNvdW50KTsgLy8gTWFrZSBzdXJlIHRoaXMgaXMgY2FsbGVkIG9u
bHkgYWZ0ZXIgd2UgaGF2ZSBhbiBpbnN0cnVjdGlvbiBzdHJlYW07IG90aGVyd2lzZSBpdCdsbCBq
dXN0IHJldHVybiB0aGUgdmFsdWUgb2YgZCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UuCiAgICAgCiAg
ICAgZG91YmxlIHJlc3VsdCA9IGQgKyBhICogc3FydChpbnN0cnVjdGlvbkNvdW50ICsgYikgKyBj
ICogaW5zdHJ1Y3Rpb25Db3VudDsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRh
dGFMb2coKnRoaXMsICI6IGluc3RydWN0aW9uIGNvdW50IGlzICIsIGluc3RydWN0aW9uQ291bnQs
ICIsIHNjYWxpbmcgZXhlY3V0aW9uIGNvdW50ZXIgYnkgIiwgcmVzdWx0LCAiICogIiwgY29kZVR5
cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCksICJcbiIpOwotI2VuZGlmCisgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKnRoaXMsICI6
IGluc3RydWN0aW9uIGNvdW50IGlzICIsIGluc3RydWN0aW9uQ291bnQsCisgICAgICAgICAgICAi
LCBzY2FsaW5nIGV4ZWN1dGlvbiBjb3VudGVyIGJ5ICIsIHJlc3VsdCwgIiAqICIsIGNvZGVUeXBl
VGhyZXNob2xkTXVsdGlwbGllcigpLAorICAgICAgICAgICAgIlxuIik7CisgICAgfQogICAgIHJl
dHVybiByZXN1bHQgKiBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKTsKIH0KIApAQCAtMzAy
NiwzNCArMzA0NSw5MCBAQCBpbnQzMl90IENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1p
CiAKIGJvb2wgQ29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgp
CiB7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKG1fdm0tPndvcmtsaXN0CisgICAgICAg
ICYmIG1fdm0tPndvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKHRoaXMpID09IERGRzo6V29ya2xp
c3Q6OkNvbXBpbGVkKSB7CisgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisgICAgCiAgICAgcmV0dXJuIG1faml0RXhl
Y3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CiB9CiAKIHZv
aWQgQ29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKIHsKKyAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIG5l
eHQgaW52b2NhdGlvbi5cbiIpOwogICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNo
b2xkKDAsIHRoaXMpOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZG9udE9wdGltaXplQW55dGltZVNv
b24oKQogeworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2co
KnRoaXMsICI6IE5vdCBvcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOwogICAgIG1faml0RXhl
Y3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6Om9w
dGltaXplQWZ0ZXJXYXJtVXAoKQogeworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisg
ICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC5cbiIpOwog
ICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplQWZ0ZXJXYXJtVXAoKSwgdGhpcyk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6
ZUFmdGVyTG9uZ1dhcm1VcCgpCiB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAg
ICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0aW1pemluZyBhZnRlciBsb25nIHdhcm0tdXAuXG4i
KTsKICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpLCB0aGlzKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6
Om9wdGltaXplU29vbigpCiB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgZGF0YUxvZygqdGhpcywgIjogT3B0aW1pemluZyBzb29uLlxuIik7CiAgICAgbV9qaXRFeGVj
dXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoY291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uKCks
IHRoaXMpOwogfQogCit2b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseSgpCit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ZGF0YUxvZygqdGhpcywgIjogRm9yY2luZyBzbG93IHBhdGggY29uY3VycmVudGx5LlxuIik7Cisg
ICAgbV9qaXRFeGVjdXRlQ291bnRlci5mb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7Cit9CisK
K3ZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRp
b25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgUkVMRUFTRV9BU1NF
UlQoKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpID09IChyZXBsYWNlbWVudCgpICE9
IHRoaXMpKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgQ29tcGlsYXRpb25TdWNj
ZXNzZnVsOgorICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
cmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpKSk7CisgICAgICAgIG9wdGltaXplTmV4dEludm9j
YXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKKyAg
ICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb21waWxhdGlvbkRlZmVycmVkOgorICAgICAgICAvLyBXZSdkIGxpa2UgdG8gZG8gZG9udE9w
dGltaXplQW55dGltZVNvb24oKSBidXQgd2UgY2Fubm90IGJlY2F1c2UKKyAgICAgICAgLy8gZm9y
Y2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpIGlzIGluaGVyZW50bHkgcmFjeS4g
SXQgd29uJ3QKKyAgICAgICAgLy8gbmVjZXNzYXJpbHkgZ3VhcmFudGVlIGFueXRoaW5nLiBTbywg
d2UgbWFrZSBzdXJlIHRoYXQgZXZlbiBpZiB0aGF0CisgICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMg
dXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQor
ICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCisgICAgICAgIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21waWxhdGlv
bkludmFsaWRhdGVkOgorICAgICAgICAvLyBSZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYu
CisgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAgb3B0aW1pemVBZnRlcldh
cm1VcCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBFTkFC
TEUoSklUKQogdWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1
aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQogewpAQCAtMzExMiw3ICszMTg3LDcgQEAgQXJyYXlQ
cm9maWxlKiBDb2RlQmxvY2s6OmdldE9yQWRkQXJyYXlQcgogdm9pZCBDb2RlQmxvY2s6OnVwZGF0
ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcygKICAgICBPcGVyYXRpb25JblByb2dyZXNz
IG9wZXJhdGlvbiwgdW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpCiB7Ci0gICAgQ29kZUJsb2Nr
TG9jayBsb2NrZXIobV9sb2NrKTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CiAgICAgCiAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKICAg
ICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzID0gMDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZh
bHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIGVxdWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMo
KSB0aGVuIHZhbHVlIHByb2ZpbGVzIGFyZSBmdWxsLgpAQCAtMzE0NCw3ICszMjE5LDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZQogCiB2b2lkIENvZGVCbG9jazo6
dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucyhPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbikK
IHsKLSAgICBDb2RlQmxvY2tMb2NrIGxvY2tlcihtX2xvY2spOworICAgIENvZGVCbG9ja0xvY2tl
ciBsb2NrZXIobV9sb2NrKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2FycmF5UHJv
ZmlsZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBtX2FycmF5UHJvZmlsZXNbaV0uY29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgdGhpcywgb3BlcmF0aW9uKTsKQEAgLTMxNjIsOSArMzIz
Nyw4IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9ucyhPcGUKIAogYm9vbCBD
b2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQotICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgIiwgKnRoaXMsICIuLi5c
biIpOwotI2VuZGlmCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0
YUxvZygiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAqdGhpcywgIi4uLlxuIik7CiAKICNpZiBF
TkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQogICAgIGR1bXBWYWx1ZVByb2ZpbGVzKCk7CkBA
IC0zMTc5LDkgKzMyNTMsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkK
ICAgICB1bnNpZ25lZCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzOwogICAgIHVwZGF0ZUFsbFBy
ZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyhOb09wZXJhdGlvbiwgbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAotI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZ0YoIlByb2ZpbGUgaG90bmVzczogJWxm
ICgldSAvICV1KSwgJWxmICgldSAvICV1KVxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwgbnVtYmVyT2ZMaXZl
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwgKGRvdWJs
ZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tl
dHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcywg
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgKiBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7
Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFM
b2dGKAorICAgICAgICAgICAgIlByb2ZpbGUgaG90bmVzczogJWxmICgldSAvICV1KSwgJWxmICgl
dSAvICV1KVxuIiwKKyAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCksCisgICAgICAgICAgICBudW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJlck9mVmFsdWVQcm9maWxlcygp
LAorICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQ
cm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKKyAgICAg
ICAgICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMsIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZC
dWNrZXRzICogbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpOworICAgIH0KIAogICAgIGlmICgoIW51
bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJl
ZFByb2ZpbGVMaXZlbmVzc1JhdGUoKSkKICAgICAgICAgJiYgKCF0b3RhbE51bWJlck9mVmFsdWVQ
cm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJv
ZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBP
cHRpb25zOjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTUwMzgwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsMjUgKzEzMSw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q28KICAgICAgICAgICAgIHJldHVybiBzcGVjaWFsaXphdGlvbkZyb21Jc0NvbnN0cnVjdChtX2lz
Q29uc3RydWN0b3IpOwogICAgICAgICB9CiAgICAgICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGdldEpJVFR5cGUoKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2Vt
ZW50KCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKLSAgICAgICAgICAgIHdoaWxlIChy
ZXN1bHQtPmFsdGVybmF0aXZlKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5h
bHRlcm5hdGl2ZSgpOwotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICBB
U1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUocmVzdWx0LT5nZXRKSVRUeXBlKCkpKTsKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIENvZGVC
bG9jayogYmFzZWxpbmVWZXJzaW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIH0KLSNlbmRpZgorICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lv
bigpOwogCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKIApAQCAt
ODY1LDYgKzg0NywxMCBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
CiAgICAgICAgIC8vIHRvIHRyaWdnZXIgb3B0aW1pemF0aW9uIGlmIG9uZSBvZiB0aG9zZSBmdW5j
dGlvbnMgYmVjb21lcyBob3QKICAgICAgICAgLy8gaW4gdGhlIGJhc2VsaW5lIGNvZGUuCiAgICAg
ICAgIHZvaWQgb3B0aW1pemVTb29uKCk7CisgICAgCisgICAgICAgIHZvaWQgZm9yY2VPcHRpbWl6
YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpOworICAgIAorICAgICAgICB2b2lkIHNldE9wdGlt
aXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3Vs
dCk7CiAgICAgICAgIAogICAgICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tMb2NrLmgJKHJldmlzaW9uIDE1MDM4MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tMb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDE4ICsyNiwxMiBAQAogI2lmbmRlZiBDb2RlQmxvY2tMb2NrX2gKICNk
ZWZpbmUgQ29kZUJsb2NrTG9ja19oCiAKLSNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+Ci0j
aW5jbHVkZSA8d3RmL05vTG9jay5oPgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCi0jaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQotdHlwZWRlZiBC
eXRlU3BpbkxvY2sgQ29kZUJsb2NrTG9jazsKLXR5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgQ29kZUJs
b2NrTG9ja2VyOwotI2Vsc2UKLXR5cGVkZWYgTm9Mb2NrIENvZGVCbG9ja0xvY2s7Ci10eXBlZGVm
IE5vTG9ja0xvY2tlciBDb2RlQmxvY2tMb2NrZXI7Ci0jZW5kaWYKK3R5cGVkZWYgQ29uY3VycmVu
dEpJVExvY2sgQ29kZUJsb2NrTG9jazsKK3R5cGVkZWYgQ29uY3VycmVudEpJVExvY2tlciBDb2Rl
QmxvY2tMb2NrZXI7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lv
biAxNTAzODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDExIEBAIEV4ZWN1dGlvbkNvdW50
ZXI6OkV4ZWN1dGlvbkNvdW50ZXIoKQogICAgIHJlc2V0KCk7CiB9CiAKK3ZvaWQgRXhlY3V0aW9u
Q291bnRlcjo6Zm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpCit7CisgICAgbV9jb3VudGVyID0g
MDsKK30KKwogYm9vbCBFeGVjdXRpb25Db3VudGVyOjpjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFu
ZFNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoaGFzQ3Jvc3NlZFRocmVzaG9s
ZChjb2RlQmxvY2spKQpAQCAtMTI0LDExICsxMjksMTEgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVy
OjpzZXRUaHJlc2hvbGQoQ29kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgICAg
ICAKLSAgICBBU1NFUlQoIWhhc0Nyb3NzZWRUaHJlc2hvbGQoY29kZUJsb2NrKSk7CisgICAgQVNT
RVJUKCFtX2FjdGl2ZVRocmVzaG9sZCB8fCAhaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2sp
KTsKICAgICAgICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgdHJ1ZSB0b3RhbCBjb3VudC4KICAgICBk
b3VibGUgdHJ1ZVRvdGFsQ291bnQgPSBjb3VudCgpOwotICAgICAgICAKKyAgICAKICAgICAvLyBD
b3JyZWN0IHRoZSB0aHJlc2hvbGQgZm9yIGN1cnJlbnQgbWVtb3J5IHVzYWdlLgogICAgIGRvdWJs
ZSB0aHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9s
ZCwgY29kZUJsb2NrKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDE1MDM4MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgRXhlY3V0aW9u
Q291bnRlciB7CiBwdWJsaWM6CiAgICAgRXhlY3V0aW9uQ291bnRlcigpOworICAgIHZvaWQgZm9y
Y2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJl
c2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIHZvaWQgc2V0TmV3
VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqKTsKICAgICB2b2lkIGRlZmVy
SW5kZWZpbml0ZWx5KCk7CkBAIC03NCw3ICs3NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNl
dCgpOwogCiBwdWJsaWM6Ci0KICAgICAvLyBOQi4gVGhlc2UgYXJlIGludGVudGlvbmFsbHkgcHVi
bGljIGJlY2F1c2UgaXQgd2lsbCBiZSBtb2RpZmllZCBmcm9tIG1hY2hpbmUgY29kZS4KICAgICAK
ICAgICAvLyBUaGlzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYnkgdGhlIEpJVCBvciBMTEludC4g
SXQgc3RhcnRzIG91dCBuZWdhdGl2ZSBhbmQgaXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4
LDYgKzExOCw4IEBAIHZvaWQgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFYKICAg
ICBBU1NFUlQoIXZtLT5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBpZiAodm0tPmR5bmFtaWNH
bG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB2bS0+cHJlcGFyZVRvRGlz
Y2FyZENvZGUoKTsKIAogICAgIFJlY29tcGlsZXIgcmVjb21waWxlcih0aGlzKTsKICAgICB2bS0+
aGVhcC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChyZWNvbXBpbGVyKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNTAzODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDcgKzI3MCw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CiAgICAgICAgIEFTU0VS
VChub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXggPT0gbV9jdXJyZW50SW5kZXgpOwotICAg
ICAgICBDb2RlQmxvY2tMb2NrIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2FsKCkpOwogICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9sYXp5T3BlcmFu
ZHMucHJlZGljdGlvbihsb2NrZXIsIGtleSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQpAQCAtODQzLDcgKzg0Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFy
cmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uKQogICAg
IHsKLSAgICAgICAgQ29kZUJsb2NrTG9jayBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgcHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrKTsKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGxvY2tl
ciwgcHJvZmlsZSwgYWN0aW9uLCBmYWxzZSk7CiAgICAgfQpAQCAtODU1LDcgKzg1NSw3IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoQXJy
YXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbiwgTm9kZSogYmFzZSkKICAg
ICB7Ci0gICAgICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgICAgIAogICAgICAg
ICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCwxNSBAQCBp
bmxpbmUgYm9vbCB2YWxpZGF0aW9uRW5hYmxlZCgpCiAjZW5kaWYKIH0KIAoraW5saW5lIGJvb2wg
ZW5hYmxlQ29uY3VycmVudEpJVCgpCit7CisjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQorICAg
IHJldHVybiBPcHRpb25zOjplbmFibGVDb25jdXJyZW50SklUKCk7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCiBlbnVtIFNwaWxsUmVnaXN0ZXJzTW9kZSB7IE5lZWRUb1Nw
aWxsLCBEb250U3BpbGwgfTsKIAogZW51bSBOb1Jlc3VsdFRhZyB7IE5vUmVzdWx0IH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTAzODAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDExICszNSwxMyBAQAogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVGh1bmtzLmgiCisjaW5jbHVkZSAiREZHV29ya2xp
c3QuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTYW1w
bGluZ1Rvb2wuaCIKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKQEAgLTY2LDE5ICs2OCwyMSBAQCBzdGF0aWMgQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZShDb21waWxlCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsK
ICAgICAKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCi0gICAgICAgIGRhdGFMb2co
IkRGRyBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9
ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygiREZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0
cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CisgICAg
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBh
bnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdl
IHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRv
ZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBleGVjLT52bSgpLmdldENU
SVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7Ci0gICAgZXhlYy0+dm0oKS5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7Ci0gICAg
ZXhlYy0+dm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMt
PnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMt
PnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgZXhl
Yy0+dm0oKS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMt
PnZtKCkuZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOworICAgIHZt
LmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOworICAgIHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1Yihs
aW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1
cmVDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaHVu
a0dlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5l
cmF0b3IpOwogI2lmIEVOQUJMRShGVExfSklUKQotICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihG
VEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIo
RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICNlbmRpZgogICAgIAogICAg
IC8vIERlcml2ZSBvdXIgc2V0IG9mIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9u
IG11c3QgYmUgYXQgbGVhc3QgY29uc2VydmF0aXZlCkBAIC0xMDUsNyArMTA5LDE2IEBAIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKENvbXBpbGUKICAgICAgICAgICAgIHBsYW4tPm11
c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsK
ICAgICB9CiAgICAgCi0gICAgcGxhbi0+Y29tcGlsZUluVGhyZWFkKCk7CisgICAgaWYgKGVuYWJs
ZUNvbmN1cnJlbnRKSVQoKSkgeworICAgICAgICBpZiAoIXZtLndvcmtsaXN0KQorICAgICAgICAg
ICAgdm0ud29ya2xpc3QgPSBnbG9iYWxXb3JrbGlzdCgpOworICAgICAgICBpZiAobG9nQ29tcGls
YXRpb25DaGFuZ2VzKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJpbmcgREZHIGNvbXBp
bGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgd2l0aCBxdWV1ZSBsZW5ndGggIiwgdm0ud29ya2xp
c3QtPnF1ZXVlTGVuZ3RoKCksICIuXG4iKTsKKyAgICAgICAgdm0ud29ya2xpc3QtPmVucXVldWUo
cGxhbik7CisgICAgICAgIHJldHVybiBDb21waWxhdGlvbkRlZmVycmVkOworICAgIH0KKyAgICAK
KyAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQoKnZtLmRmZ1N0YXRlKTsKICAgICByZXR1cm4gcGxh
bi0+ZmluYWxpemUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1MDM4MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NCwxMiArNDQsMTIgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGRmZ09wTmFtZXNbXSA9IHsKICN1bmRl
ZiBTVFJJTkdJWkVfREZHX09QX0VOVU0KIH07CiAKLUdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4m
IHBsYW4pCitHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2ZWRTdGF0ZSYg
bG9uZ0xpdmVkU3RhdGUpCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9wbGFuKHBsYW4pCiAgICAg
LCBtX2NvZGVCbG9jayhtX3BsYW4uY29kZUJsb2NrLmdldCgpKQogICAgICwgbV9wcm9maWxlZEJs
b2NrKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQotICAgICwgbV9hbGxvY2F0b3Iodm0ubV9k
ZmdTdGF0ZS0+bV9hbGxvY2F0b3IpCisgICAgLCBtX2FsbG9jYXRvcihsb25nTGl2ZWRTdGF0ZS5t
X2FsbG9jYXRvcikKICAgICAsIG1faGFzQXJndW1lbnRzKGZhbHNlKQogICAgICwgbV9maXhwb2lu
dFN0YXRlKEJlZm9yZUZpeHBvaW50KQogICAgICwgbV9mb3JtKExvYWRTdG9yZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1MDM4MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyAr
OTAsNyBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVh
ZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgogY2xhc3MgR3JhcGggewog
cHVibGljOgotICAgIEdyYXBoKFZNJiwgUGxhbiYpOworICAgIEdyYXBoKFZNJiwgUGxhbiYsIExv
bmdMaXZlZFN0YXRlJik7CiAgICAgfkdyYXBoKCk7CiAgICAgCiAgICAgdm9pZCBjaGFuZ2VDaGls
ZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE1MDM4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNyArNDUs
MTggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CiAgICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAKLSNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2coIk9TUiBpbiAiLCAqY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLCAiIC0+ICIsICpjb2RlQmxvY2ssICIgZnJvbSBiYyMiLCBieXRlY29k
ZUluZGV4LCAiXG4iKTsKLSNlbmRpZgorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsK
KyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLAorICAgICAgICAgICAgIiBmcm9tIGJjIyIs
IGJ5dGVjb2RlSW5kZXgsICJcbiIpOworICAgIH0KICAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkt
PmRmZygpLT5vc3JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAg
IAogICAgIGlmICghZW50cnkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAg
ICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB0aGUgZW50cnlwb2ludCB3YXMgb3B0
aW1pemVkIG91dC5cbiIpOwotI2VuZGlmCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCisgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB0aGUgZW50
cnlwb2ludCB3YXMgb3B0aW1pemVkIG91dC5cbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAgICAgCkBAIC04NywxMSArODgsMTEgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0
ZSogZXhlYywgQwogICAgIAogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50
KSB7CiAgICAgICAgIGlmIChhcmd1bWVudCA+PSBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpKSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV6dSB3YXMgbm90IHBhc3NlZCwg
ZXhwZWN0ZWQgIiwgYXJndW1lbnQpOwotICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1
ZXMuYXJndW1lbnQoYXJndW1lbnQpLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAg
IGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIGZhaWxlZCBiZWNh
dXNlIGFyZ3VtZW50ICV6dSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQgIiwgYXJndW1lbnQpOwor
ICAgICAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50
KS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC0xMDIsOSArMTAzLDExIEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUq
IGV4ZWMsIEMKICAgICAgICAgICAgIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoYXJndW1lbnQgLSAx
KTsKICAgICAgICAgCiAgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1l
bnQoYXJndW1lbnQpLnZhbGlkYXRlKHZhbHVlKSkgewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50
ICIsIGFyZ3VtZW50LCAiIGlzICIsIHZhbHVlLCAiLCBleHBlY3RlZCAiLCBlbnRyeS0+bV9leHBl
Y3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCksICIuXG4iKTsKLSNlbmRpZgorICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICIs
IGFyZ3VtZW50LCAiIGlzICIsIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAiLCBleHBlY3Rl
ZCAiLCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCksICIuXG4iKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpA
QCAtMTEyLDE3ICsxMTUsMjIgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhl
YywgQwogICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBlbnRyeS0+bV9leHBlY3Rl
ZFZhbHVlcy5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAgICAgICAgIGlmIChlbnRyeS0+
bV9sb2NhbHNGb3JjZWREb3VibGUuZ2V0KGxvY2FsKSkgewogICAgICAgICAgICAgaWYgKCFleGVj
LT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLmlzTnVtYmVyKCkpIHsKLSNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVk
IGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWwsICIgaXMgIiwgZXhlYy0+cmVnaXN0ZXJzKClbbG9j
YWxdLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgbnVtYmVyLlxuIik7Ci0jZW5kaWYKKyAgICAgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSB2YXJpYWJsZSAiLCBsb2NhbCwgIiBpcyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhl
Yy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgbnVtYmVyLlxuIik7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFlbnRy
eS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJz
KClbbG9jYWxdLmpzVmFsdWUoKSkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAg
ICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAiLCBsb2Nh
bCwgIiBpcyAiLCBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLCAiLCBleHBlY3Rl
ZCAiLCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCksICIuXG4iKTsKLSNlbmRp
ZgorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICAgICAg
ICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICIgICAgT1NSIGZhaWxlZCBiZWNhdXNl
IHZhcmlhYmxlICIsIGxvY2FsLCAiIGlzICIsCisgICAgICAgICAgICAgICAgICAgIGV4ZWMtPnJl
Z2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCksICIsIGV4cGVjdGVkICIsCisgICAgICAgICAgICAg
ICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKSwgIi5cbiIpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC0x
MzUsMTUgKzE0MywxMyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBD
CiAgICAgLy8gICAgd291bGQgaGF2ZSBvdGhlcndpc2UganVzdCBrZXB0IHJ1bm5pbmcgYWxiZWl0
IGxlc3MgcXVpY2tseS4KICAgICAKICAgICBpZiAoIXZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5n
cm93KCZleGVjLT5yZWdpc3RlcnMoKVtjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkp
IHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nRigiICAgIE9T
UiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7Ci0jZW5kaWYKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogICAgIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0
YUxvZ0YoIiAgICBPU1Igc2hvdWxkIHN1Y2NlZWQuXG4iKTsKLSNlbmRpZgorICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHNob3VsZCBzdWNj
ZWVkLlxuIik7CiAgICAgCiAgICAgLy8gMykgUGVyZm9ybSBkYXRhIGZvcm1hdCBjb252ZXJzaW9u
cy4KICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZW50cnktPm1fZXhwZWN0ZWRW
YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewpAQCAtMTU5LDkgKzE2NSw4IEBAIHZv
aWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAKICAgICB2b2lkKiBy
ZXN1bHQgPSBjb2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNl
dChlbnRyeS0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCi0jaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKLSAgICBkYXRhTG9nRigiICAgIE9TUiByZXR1cm5pbmcgbWFjaGluZSBjb2RlIGFk
ZHJlc3MgJXAuXG4iLCByZXN1bHQpOwotI2VuZGlmCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKKyAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBh
ZGRyZXNzICVwLlxuIiwgcmVzdWx0KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogI2Vsc2Ug
Ly8gREZHX0VOQUJMRShPU1JfRU5UUlkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1MDM4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODYsOSAr
MTY4Niw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3AKIAogZXh0
ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVC
bG9jayogY29kZUJsb2NrKQogewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0
YUxvZygqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHJlb3B0aW1pemVcbiIpOwotI2VuZGlmCisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAi
OiBFbnRlcmVkIHJlb3B0aW1pemVcbiIpOwogICAgIC8vIFdlIG11c3QgYmUgY2FsbGVkIHdpdGgg
dGhlIGJhc2VsaW5lIGNvZGUgYmxvY2suCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBQbGFu
OjpQbGFuKAogICAgICwgbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbnVtVmFyc1dpdGhWYWx1ZXMpCiAgICAgLCBjb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCkt
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRp
b24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rl
c0Zvcihjb2RlQmxvY2suZ2V0KCkpLCBQcm9maWxlcjo6REZHKSkgOiAwKQogICAgICwgaWRlbnRp
ZmllcnMoY29kZUJsb2NrLmdldCgpKQorICAgICwgaXNDb21waWxlZChmYWxzZSkKIHsKIH0KIApA
QCAtODUsMTIgKzg2LDE1IEBAIFBsYW46On5QbGFuKCkKIHsKIH0KIAotdm9pZCBQbGFuOjpjb21w
aWxlSW5UaHJlYWQoKQordm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUm
IGxvbmdMaXZlZFN0YXRlKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgQ29tcGlsYXRpb24gKFBsYW4pIik7CiAgICAgQ29tcGlsYXRpb25TY29wZSBjb21waWxhdGlv
blNjb3BlOwogCi0gICAgR3JhcGggZGZnKHZtLCAqdGhpcyk7CisgICAgaWYgKGxvZ0NvbXBpbGF0
aW9uQ2hhbmdlcygpKQorICAgICAgICBkYXRhTG9nKCJERkcoUGxhbikgY29tcGlsaW5nICIsICpj
b2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uQ291bnQoKSwgIlxuIik7CisKKyAgICBHcmFwaCBkZmcodm0sICp0aGlzLCBsb25nTGl2
ZWRTdGF0ZSk7CiAgICAgCiAgICAgaWYgKCFwYXJzZShkZmcpKSB7CiAgICAgICAgIGZpbmFsaXpl
ciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMpKTsKQEAgLTE5OSw2ICsyMDMs
MTEgQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemUoUmVmUHRyPAogICAgIHJldHVy
biBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKK0NvZGVCbG9jayogUGxhbjo6a2V5KCkKK3sK
KyAgICByZXR1cm4gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAxNTAzODApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBj
bGFzcyBDb2RlQmxvY2s7CiAKIG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBMb25nTGl2ZWRTdGF0
ZTsKKwogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29tcGlsZU90aGVyIH07
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTUzLDEwICs1NSwxMiBAQCBzdHJ1Y3QgUGxhbiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpOwogICAgIH5QbGFuKCk7CiAg
ICAgCi0gICAgdm9pZCBjb21waWxlSW5UaHJlYWQoKTsKKyAgICB2b2lkIGNvbXBpbGVJblRocmVh
ZChMb25nTGl2ZWRTdGF0ZSYpOwogICAgIAogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXpl
KFJlZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGpp
dENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgCisgICAgQ29kZUJsb2NrKiBrZXkoKTsKKyAgICAK
ICAgICBjb25zdCBDb21waWxlTW9kZSBjb21waWxlTW9kZTsKICAgICBWTSYgdm07CiAgICAgUmVm
UHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwpAQCAtNzEsNiArNzUsOCBAQCBzdHJ1Y3QgUGxhbiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgRGVzaXJlZFdhdGNocG9pbnRzIHdhdGNo
cG9pbnRzOwogICAgIERlc2lyZWRJZGVudGlmaWVycyBpZGVudGlmaWVyczsKICAgICBEZXNpcmVk
U3RydWN0dXJlQ2hhaW5zIGNoYWluczsKKyAgICAKKyAgICBib29sIGlzQ29tcGlsZWQ7CiAKIHBy
aXZhdGU6CiAgICAgYm9vbCBpc1N0aWxsVmFsaWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5j
bHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitXb3JrbGlzdDo6V29ya2xpc3QoKQoreworfQorCitXb3JrbGlzdDo6fldvcmtsaXN0
KCkKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZChudWxscHRyKTsgLy8gVXNlIG51bGwgcGxhbiB0byBp
bmRpY2F0ZSB0aGF0IHdlIHdhbnQgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUuCisgICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24obV90aHJlYWQpOworfQorCit2b2lkIFdvcmtsaXN0OjpmaW5pc2hD
cmVhdGlvbigpCit7CisgICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQodGhyZWFkRnVuY3Rpb24s
IHRoaXMsICJKU0MgQ29tcGlsYXRpb24gVGhyZWFkIik7Cit9CisKK1Bhc3NSZWZQdHI8V29ya2xp
c3Q+IFdvcmtsaXN0OjpjcmVhdGUoKQoreworICAgIFJlZlB0cjxXb3JrbGlzdD4gcmVzdWx0ID0g
YWRvcHRSZWYobmV3IFdvcmtsaXN0KCkpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24oKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdvcmtsaXN0OjplbnF1ZXVlKFBhc3NSZWZQ
dHI8UGxhbj4gcGFzc2VkUGxhbikKK3sKKyAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IHBhc3NlZFBs
YW47CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAgICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0
YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIjogRW5xdWV1ZWluZyBwbGFuIHRvIG9wdGltaXpl
ICIsICpwbGFuLT5rZXkoKSwgIlxuIik7CisgICAgfQorICAgIEFTU0VSVChtX3BsYW5zLmZpbmQo
cGxhbi0+a2V5KCkpID09IG1fcGxhbnMuZW5kKCkpOworICAgIG1fcGxhbnMuYWRkKHBsYW4tPmtl
eSgpLCBwbGFuKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsKKyAgICBtX2NvbmRpdGlvbi5i
cm9hZGNhc3QoKTsKK30KKworQ29tcGlsYXRpb25SZXN1bHQgV29ya2xpc3Q6OmNvbXBsZXRlQW5k
U2NoZWR1bGVPU1IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKQoreworICAgIERlZmVyR0MgZGVm
ZXJHQyhwcm9maWxlZEJsb2NrLT52bSgpLT5oZWFwKTsKKyAgICBSZWZQdHI8UGxhbj4gcGxhbjsK
KyAgICAKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICAgICAg
ZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCI6IENv
bXBsZXRpbmcgIiwgKnByb2ZpbGVkQmxvY2ssICJcbiIpOworICAgICAgICB9CisgICAgICAgIHBs
YW4gPSBtX3BsYW5zLnRha2UocHJvZmlsZWRCbG9jayk7CisgICAgfQorICAgIAorICAgIEFTU0VS
VChwbGFuKTsKKyAgICBBU1NFUlQocGxhbi0+aXNDb21waWxlZCk7CisgICAgCisgICAgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0ID0gcHJvZmlsZWRCbG9jay0+cmVwbGFjZVdpdGhEZWZlcnJlZE9w
dGltaXplZENvZGUocGxhbik7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ICE9IENv
bXBpbGF0aW9uRGVmZXJyZWQpOworICAgIHByb2ZpbGVkQmxvY2stPnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChyZXN1bHQpOworICAgIAorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1dvcmtsaXN0OjpTdGF0ZSBXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0
ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2spCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuZmluZChwcm9maWxl
ZEJsb2NrKTsKKyAgICBpZiAoaXRlciA9PSBtX3BsYW5zLmVuZCgpKQorICAgICAgICByZXR1cm4g
Tm90S25vd247CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLT5pc0NvbXBpbGVkID8gQ29tcGlsZWQg
OiBDb21waWxpbmc7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1B
cmVSZWFkeShWTSYgdm0pCit7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIC8v
IFdhaXQgZm9yIGFsbCBvZiB0aGUgcGxhbnMgZm9yIHRoZSBnaXZlbiBWTSB0byBjb21wbGV0ZS4g
VGhlIGlkZWEgaGVyZQorICAgIC8vIGlzIHRoYXQgd2Ugd2FudCBhbGwgb2YgdGhlIGNhbGxlciBW
TSdzIHBsYW5zIHRvIGJlIGRvbmUuIFdlIGRvbid0IGNhcmUKKyAgICAvLyBhYm91dCBhbnkgb3Ro
ZXIgVk0ncyBwbGFucywgYW5kIHdlIHdvbid0IGF0dGVtcHQgdG8gd2FpdCBvbiB0aG9zZS4KKyAg
ICAvLyBBZnRlciB3ZSByZWxlYXNlIHRoaXMgbG9jaywgd2Uga25vdyB0aGF0IGFsdGhvdWdoIG90
aGVyIFZNcyBtYXkgc3RpbGwKKyAgICAvLyBiZSBhZGRpbmcgcGxhbnMsIG91ciBWTSB3aWxsIG5v
dCBiZS4KKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICBkdW1wKGxv
Y2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygiOiBXYWl0aW5nIGZvciBh
bGwgaW4gVk0gdG8gY29tcGxldGUuXG4iKTsKKyAgICB9CisgICAgCisgICAgZm9yICg7Oykgewor
ICAgICAgICBib29sIGFsbEFyZUNvbXBsZXRlZCA9IHRydWU7CisgICAgICAgIFBsYW5NYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fcGxhbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAg
ICAgICAgaWYgKCZpdGVyLT52YWx1ZS0+dm0gIT0gJnZtKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS0+aXNDb21waWxlZCkgeworICAgICAg
ICAgICAgICAgIGFsbEFyZUNvbXBsZXRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYWxsQXJl
Q29tcGxldGVkKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBtX2NvbmRp
dGlvbi53YWl0KG1fbG9jayk7CisgICAgfQorfQorCitXb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6
OmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiB2bSwgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBDb21waWxhdGlvblJlc3VsdCogcmVzdWx0Rm9yQmxvY2spCit7CisgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOworICAgIFZlY3RvcjxSZWZQdHI8Q29kZUJsb2NrPiA+IGtleUJsb2Nr
czsKKyAgICAKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
ICAgICBQbGFuTWFwOjppdGVyYXRvciBlbmQgPSBtX3BsYW5zLmVuZCgpOworICAgICAgICBmb3Ig
KFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICgmaXRlci0+dmFsdWUtPnZtICE9ICZ2bSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUtPmlzQ29t
cGlsZWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBrZXlCbG9ja3Mu
YXBwZW5kKGl0ZXItPmtleSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgU3RhdGUgcmVz
dWx0aW5nU3RhdGUgPSBOb3RLbm93bjsKKworICAgIGZvciAodW5zaWduZWQgaSA9IGtleUJsb2Nr
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsYXRpb25S
ZXN1bHQgPSBjb21wbGV0ZUFuZFNjaGVkdWxlT1NSKGtleUJsb2Nrc1tpXS5nZXQoKSk7CisgICAg
ICAgIGlmIChrZXlCbG9ja3NbaV0uZ2V0KCkgPT0gcHJvZmlsZWRCbG9jaykgeworICAgICAgICAg
ICAgaWYgKHJlc3VsdEZvckJsb2NrKQorICAgICAgICAgICAgICAgICpyZXN1bHRGb3JCbG9jayA9
IGNvbXBpbGF0aW9uUmVzdWx0OworICAgICAgICAgICAgcmVzdWx0aW5nU3RhdGUgPSBDb21waWxl
ZDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAocHJvZmlsZWRCbG9jayAmJiByZXN1
bHRpbmdTdGF0ZSA9PSBOb3RLbm93biAmJiBtX3BsYW5zLmNvbnRhaW5zKHByb2ZpbGVkQmxvY2sp
KQorICAgICAgICByZXN1bHRpbmdTdGF0ZSA9IENvbXBpbGluZzsKKyAgICAKKyAgICByZXR1cm4g
cmVzdWx0aW5nU3RhdGU7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JW
TShWTSYgdm0pCit7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIHdhaXRVbnRp
bEFsbFBsYW5zRm9yVk1BcmVSZWFkeSh2bSk7CisgICAgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9y
Vk0odm0pOworfQorCitzaXplX3QgV29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKCkKK3sKKyAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gbV9xdWV1ZS5zaXplKCk7Cit9CisK
K3ZvaWQgV29ya2xpc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICBkdW1wKGxvY2tlciwgb3V0KTsKK30KKwordm9pZCBXb3Jr
bGlzdDo6ZHVtcChjb25zdCBNdXRleExvY2tlciYsIFByaW50U3RyZWFtJiBvdXQpCit7CisgICAg
b3V0LnByaW50KAorICAgICAgICAiV29ya2xpc3QoIiwgUmF3UG9pbnRlcih0aGlzKSwgIilbUXVl
dWUgTGVuZ3RoID0gIiwgbV9xdWV1ZS5zaXplKCksCisgICAgICAgICIsIE1hcCBTaXplID0gIiwg
bV9wbGFucy5zaXplKCksICJdIik7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OnJ1blRocmVhZCgpCit7
CisgICAgTG9uZ0xpdmVkU3RhdGUgbG9uZ0xpdmVkU3RhdGU7CisgICAgCisgICAgZm9yICg7Oykg
eworICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbjsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICB3aGlsZSAobV9xdWV1ZS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX2xvY2spOworICAgICAg
ICAgICAgcGxhbiA9IG1fcXVldWUudGFrZUZpcnN0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghcGxhbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IHBsYW4tPmNvbXBpbGVJblRocmVhZChsb25nTGl2ZWRTdGF0ZSk7CisgICAgICAgIGNvbXBsZXRl
QXN5bmNocm9ub3VzUGxhbihwbGFuLmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya2xpc3Q6
OmNvbXBsZXRlQXN5bmNocm9ub3VzUGxhbihQbGFuKiBwbGFuKQoreworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIHBsYW4tPmtleSgpLT5mb3JjZU9wdGltaXphdGlvblNsb3dQ
YXRoQ29uY3VycmVudGx5KCk7CisgICAgcGxhbi0+aXNDb21waWxlZCA9IHRydWU7CisgICAgCisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAgICAgICAgZHVt
cChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIjogQ29tcGlsZWQg
IiwgKnBsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKKyAgICB9CisgICAgCisgICAg
bV9jb25kaXRpb24uYnJvYWRjYXN0KCk7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OnRocmVhZEZ1bmN0
aW9uKHZvaWQqIGFyZ3VtZW50KQoreworICAgIHN0YXRpY19jYXN0PFdvcmtsaXN0Kj4oYXJndW1l
bnQpLT5ydW5UaHJlYWQoKTsKK30KKworc3RhdGljIHB0aHJlYWRfb25jZV90IGluaXRpYWxpemVH
bG9iYWxXb3JrbGlzdEtleU9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK3N0YXRpYyBXb3JrbGlz
dCogdGhlR2xvYmFsV29ya2xpc3Q7CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxXb3Jr
bGlzdE9uY2UoKQoreworICAgIHRoZUdsb2JhbFdvcmtsaXN0ID0gV29ya2xpc3Q6OmNyZWF0ZSgp
LmxlYWtSZWYoKTsKK30KKworV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0KCkKK3sKKyAgICBwdGhy
ZWFkX29uY2UoJmluaXRpYWxpemVHbG9iYWxXb3JrbGlzdEtleU9uY2UsIGluaXRpYWxpemVHbG9i
YWxXb3JrbGlzdE9uY2UpOworICAgIHJldHVybiB0aGVHbG9iYWxXb3JrbGlzdDsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHV29ya2xpc3RfaAorI2RlZmluZSBERkdXb3JrbGlzdF9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHUGxhbi5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2xpc3Q+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENv
bXBpbGluZywgQ29tcGlsZWQgfTsKKworICAgIH5Xb3JrbGlzdCgpOworICAgIAorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdvcmtsaXN0PiBjcmVhdGUoKTsKKyAgICAKKyAgICB2b2lkIGVucXVldWUo
UGFzc1JlZlB0cjxQbGFuPik7CisgICAgCisgICAgLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvOgor
ICAgIC8vIHdvcmtsaXN0LT53YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkodm0pOworICAg
IC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CisgICAgdm9pZCBj
b21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKKyAgICAKKyAgICB2b2lkIHdhaXRVbnRpbEFsbFBs
YW5zRm9yVk1BcmVSZWFkeShWTSYpOworICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0Zv
clZNKAorICAgICAgICBWTSYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IDAsIENvbXBpbGF0
aW9uUmVzdWx0KiByZXN1bHRGb3JCbG9jayA9IDApOworICAgIAorICAgIENvbXBpbGF0aW9uUmVz
dWx0IGNvbXBsZXRlQW5kU2NoZWR1bGVPU1IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKTsKKyAg
ICAKKyAgICBTdGF0ZSBjb21waWxhdGlvblN0YXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jayk7
CisgICAgCisgICAgc2l6ZV90IHF1ZXVlTGVuZ3RoKCk7CisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJik7CisgICAgCitwcml2YXRlOgorICAgIFdvcmtsaXN0KCk7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbigpOworICAgIAorICAgIHZvaWQgcnVuVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQg
dGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOworICAgIAorICAgIHZvaWQgY29tcGxldGVB
c3luY2hyb25vdXNQbGFuKFBsYW4qKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoY29uc3QgTXV0ZXhM
b2NrZXImLCBQcmludFN0cmVhbSYpOworCisgICAgRGVxdWU8UmVmUHRyPFBsYW4+ID4gbV9xdWV1
ZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPENvZGVCbG9jaz4sIFJlZlB0cjxQbGFuPiA+
IFBsYW5NYXA7CisgICAgUGxhbk1hcCBtX3BsYW5zOworICAgIE11dGV4IG1fbG9jazsKKyAgICAv
LyBXZSBicm9hZGNhc3Qgb24gdGhpcyBjb25kaXRpb24gd2hlbmV2ZXI6CisgICAgLy8gLSBTb21l
dGhpbmcgaXMgZW5xdWV1ZWQuCisgICAgLy8gLSBTb21ldGhpbmcgaXMgY29tcGxldGVkLgorICAg
IFRocmVhZENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhy
ZWFkOworfTsKKworLy8gRm9yIG5vdyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsIHdvcmtsaXN0LiBJ
dCdzIG5vdCBjbGVhciB0aGF0IHRoaXMKKy8vIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgYnV0
IGl0IGlzIHdoYXQgd2UgZG8sIGZvciBub3cuIFRoaXMgZnVuY3Rpb24KKy8vIHdpbGwgbGF6aWx5
IGNyZWF0ZSBvbmUgd2hlbiBpdCdzIG5lZWRlZC4gQ3VycmVudGx5IHRoaXMgaXMgb25seSBjYWxs
ZWQKKy8vIGZyb20gREZHRHJpdmVyLmNwcCwgd2hlbiBpdCBhY3R1YWxseSB3YW50cyB0byBlbnF1
ZXVlIHNvbWV0aGluZy4KK1dvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
U3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDE1MDM4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUs
OCArMTM1LDcgQEAgaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRTcGFjZTo6YWxsb2NhdAogCiBp
bmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9jaygpCiB7Ci0gICAgaWYgKG1faGVh
cC0+c2hvdWxkQ29sbGVjdCgpKQotICAgICAgICBtX2hlYXAtPmNvbGxlY3QoSGVhcDo6RG9Ob3RT
d2VlcCk7CisgICAgbV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiAKICAgICBt
X2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0RlZmVyR0MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0RlZmVyR0MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVyR0NfaAor
I2RlZmluZSBEZWZlckdDX2gKKworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIERlZmVyR0MgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERlZmVyR0MpOworcHVibGljOgorICAgIERlZmVyR0MoSGVhcCYg
aGVhcCkKKyAgICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICB7CisgICAgICAgIG1faGVhcC5pbmNy
ZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgfQorICAgIAorICAgIH5EZWZlckdDKCkKKyAgICB7
CisgICAgICAgIG1faGVhcC5kZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIERlZmVyR0NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNp
bmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3Iu
aCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpAQCAtMjYzLDYgKzI2NCw3IEBAIEhlYXA6
OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbGFzdENvZGVEaXNjYXJk
VGltZShXVEY6OmN1cnJlbnRUaW1lKCkpCiAgICAgLCBtX2FjdGl2aXR5Q2FsbGJhY2soRGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFjazo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9zd2VlcGVyKEluY3Jl
bWVudGFsU3dlZXBlcjo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9kZWZlcnJhbERlcHRoKDApCiB7
CiAgICAgbV9zdG9yYWdlU3BhY2UuaW5pdCgpOwogfQpAQCAtMzA1LDggKzMwNyw3IEBAIHZvaWQg
SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2UKICAgICAvLyBjb2xsZWN0aW5nIG1v
cmUgZnJlcXVlbnRseSBhcyBsb25nIGFzIGl0IHN0YXlzIGFsaXZlLgogCiAgICAgZGlkQWxsb2Nh
dGUoY29zdCk7Ci0gICAgaWYgKHNob3VsZENvbGxlY3QoKSkKLSAgICAgICAgY29sbGVjdChEb05v
dFN3ZWVwKTsKKyAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKIHZvaWQgSGVh
cDo6cmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKQpAQCAtNjg3LDcgKzY4OCw3IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UoKQogewogICAgIGlmICghbV9pc1NhZmVUb0NvbGxlY3Qp
CiAgICAgICAgIHJldHVybjsKLQorICAgIAogICAgIGNvbGxlY3QoRG9Td2VlcCk7CiB9CiAKQEAg
LTY5NywxMiArNjk4LDE4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0
aW9uIik7CiAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVmZXJyYWxEZXB0aCk7CiAgICAg
R0NQSEFTRShDb2xsZWN0KTsKICAgICBBU1NFUlQodm0oKS0+YXBpTG9jaygpLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmlkZW50aWZpZXJU
YWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKICAgICBB
U1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0JFR0lOKCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9u
KTsKKyAgICAKKyAgICBtX2RlZmVycmFsRGVwdGgrKzsgLy8gTWFrZSBzdXJlIHRoYXQgd2UgZG9u
J3QgR0MgaW4gdGhpcyBjYWxsLgorICAgIG1fdm0tPnByZXBhcmVUb0Rpc2NhcmRDb2RlKCk7Cisg
ICAgbV9kZWZlcnJhbERlcHRoLS07IC8vIERlY3JlbWVudCBkZWZlcmFsIG1hbnVhbGx5LCBzbyB3
ZSBkb24ndCBHQyB3aGVuIHdlIGRvIHNvLCBzaW5jZSB3ZSBhcmUgYWxyZWFkeSBHQ2luZyEuCisg
ICAgCiAgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKIAogICAgIG1fYWN0
aXZpdHlDYWxsYmFjay0+d2lsbENvbGxlY3QoKTsKQEAgLTgwMyw2ICs4MTAsMTggQEAgdm9pZCBI
ZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBIZWFwU3RhdGlzdGlj
czo6c2hvd09iamVjdFN0YXRpc3RpY3ModGhpcyk7CiB9CiAKK2Jvb2wgSGVhcDo6Y29sbGVjdElm
TmVjZXNzYXJ5T3JEZWZlcigpCit7CisgICAgaWYgKG1fZGVmZXJyYWxEZXB0aCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghc2hvdWxkQ29sbGVjdCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgY29sbGVjdChEb05vdFN3ZWVwKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogdm9pZCBIZWFwOjptYXJrRGVhZE9iamVjdHMoKQogewogICAgIG1fb2JqZWN0
U3BhY2UuZm9yRWFjaERlYWRDZWxsPE1hcmtPYmplY3Q+KCk7CkBAIC04OTYsNCArOTE1LDIwIEBA
IHZvaWQgSGVhcDo6em9tYmlmeURlYWRPYmplY3RzKCkKICAgICBtX29iamVjdFNwYWNlLmZvckVh
Y2hEZWFkQ2VsbDxab21iaWZ5PigpOwogfQogCit2b2lkIEhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA8IDEwMCk7IC8v
IFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGdldCByaWRpY3Vsb3VzLgor
ICAgIAorICAgIG1fZGVmZXJyYWxEZXB0aCsrOworfQorCit2b2lkIEhlYXA6OmRlY3JlbWVudERl
ZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVy
cmFsRGVwdGggPj0gMSk7CisgICAgCisgICAgbV9kZWZlcnJhbERlcHRoLS07CisgICAgCisgICAg
Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MDM4MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xMTAsNiArMTEw
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSW5jcmVt
ZW50YWxTd2VlcGVyKiBzd2VlcGVyKCk7CiAKKyAgICAgICAgLy8gdHJ1ZSBpZiBjb2xsZWN0aW9u
IGlzIGluIHByb2dyZXNzCisgICAgICAgIGlubGluZSBib29sIGlzQ29sbGVjdGluZygpOwogICAg
ICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVz
cwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1c3koKTsKICAgICAgICAgCkBAIC0xMzEsNiArMTMz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gU3dlZXBUb2dnbGUgeyBEb05vdFN3
ZWVwLCBEb1N3ZWVwIH07CiAgICAgICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwogICAgICAgICB2
b2lkIGNvbGxlY3QoU3dlZXBUb2dnbGUpOworICAgICAgICBib29sIGNvbGxlY3RJZk5lY2Vzc2Fy
eU9yRGVmZXIoKTsgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGRpZCBjb2xsZWN0LgogCiAgICAgICAg
IHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBjb3N0KTsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCByZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOwpAQCAtMTc5LDYg
KzE4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIERlZmVyR0M7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklU
U3R1YlJvdXRpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTIyMCw2ICsyMjQsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU1N0YWNrJiBzdGFjaygpOwogICAgICAgICBC
bG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQg
aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFs
RGVwdGhBbmRHQ0lmTmVlZGVkKCk7CiAKICAgICAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlw
ZTsKICAgICAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTI2Niw2ICsyNzMsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKiBtX2FjdGl2aXR5Q2Fs
bGJhY2s7CiAgICAgICAgIEluY3JlbWVudGFsU3dlZXBlciogbV9zd2VlcGVyOwogICAgICAgICBW
ZWN0b3I8TWFya2VkQmxvY2sqPiBtX2Jsb2NrU25hcHNob3Q7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBtX2RlZmVycmFsRGVwdGg7CiAgICAgfTsKIAogICAgIHN0cnVjdCBNYXJrZWRCbG9j
a1NuYXBzaG90RnVuY3RvciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewpAQCAt
MjkzLDYgKzMwMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fb3BlcmF0
aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbjsKICAgICB9CiAKKyAgICBib29sIEhlYXA6Omlz
Q29sbGVjdGluZygpCisgICAgeworICAgICAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNz
ID09IENvbGxlY3Rpb247CisgICAgfQorCiAgICAgaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29u
c3QgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKS0+aGVhcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNTAzODApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw5
ICs4NCw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgKICAgICBp
ZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKLSAg
ICBpZiAobV9oZWFwLT5zaG91bGRDb2xsZWN0KCkpIHsKLSAgICAgICAgbV9oZWFwLT5jb2xsZWN0
KEhlYXA6OkRvTm90U3dlZXApOwotCisgICAgaWYgKG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5
T3JEZWZlcigpKSB7CiAgICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKICAgICAg
ICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTAzODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMSwxMCArNjAxLDYgQEAgQUxX
QVlTX0lOTElORSB2b2lkIFByb3BlcnR5U3R1YkNvbXBpbGF0aQogCiBQYXNzUmVmUHRyPEpJVENv
ZGU+IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ss
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQotICAgIHByaW50ZigiQ29tcGlsaW5nIEpJVCBjb2RlIVxuIik7Ci0jZW5kaWYKLSAgICAK
ICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2
ZWwgPSBtX2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKICAgICBzd2l0Y2ggKGxldmVs
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1MDM4MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsy
OCw2IEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0vLyBWZXJib3NlIGxvZ2dpbmcgb2YgY29kZSBn
ZW5lcmF0aW9uCi0jZGVmaW5lIEVOQUJMRV9KSVRfVkVSQk9TRSAwCi0vLyBWZXJib3NlIGxvZ2dp
bmcgZm9yIE9TUi1yZWxhdGVkIGNvZGUuCi0jZGVmaW5lIEVOQUJMRV9KSVRfVkVSQk9TRV9PU1Ig
MAotCiAvLyBXZSd2ZSBydW4gaW50byBzb21lIHByb2JsZW1zIHdoZXJlIGNoYW5naW5nIHRoZSBz
aXplIG9mIHRoZSBjbGFzcyBKSVQgbGVhZHMgdG8KIC8vIHBlcmZvcm1hbmNlIGZsdWN0dWF0aW9u
cy4gIFRyeSBmb3JjaW5nIGFsaWdubWVudCBpbiBhbiBhdHRlbXB0IHRvIHN0YWJhbGl6ZSB0aGlz
LgogI2lmIENPTVBJTEVSKEdDQykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiAxNTAzODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkNv
ZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJE
RkdPU1JFbnRyeS5oIgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRGVidWdn
ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0
dGVyLmgiCkBAIC05MDYsMzEgKzkwNyw3OSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBv
cHRpbWl6ZSkKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQz
MigpOwogCi0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKAotICAgICAg
ICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkIG9wdGltaXplIHdpdGggYnl0ZWNvZGVJbmRleCA9ICIs
IGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgICIsIGV4ZWN1dGVDb3VudGVyID0gIiwgY29kZUJsb2Nr
LT5qaXRFeGVjdXRlQ291bnRlcigpLAotICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIgPSAiLCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksCi0gICAgICAg
ICIsIGV4aXRDb3VudGVyID0gIik7Ci0gICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVw
bGFjZW1lbnQoKSkKLSAgICAgICAgZGF0YUxvZyhjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPm9z
ckV4aXRDb3VudGVyKCkpOwotICAgIGVsc2UKLSAgICAgICAgZGF0YUxvZygiTi9BIik7Ci0gICAg
ZGF0YUxvZygiXG4iKTsKLSNlbmRpZgorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsK
KyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgb3B0
aW1pemUgd2l0aCBieXRlY29kZUluZGV4ID0gIiwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAg
ICIsIGV4ZWN1dGVDb3VudGVyID0gIiwgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpLAor
ICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwgY29kZUJsb2NrLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLAorICAgICAgICAgICAgIiwgZXhpdENvdW50ZXIg
PSAiKTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkK
KyAgICAgICAgICAgIGRhdGFMb2coY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5vc3JFeGl0Q291
bnRlcigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YUxvZygiTi9BIik7CisgICAg
ICAgIGRhdGFMb2coIlxuIik7CisgICAgfQogCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZP
cHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgY29kZUJsb2NrLT51cGRh
dGVBbGxQcmVkaWN0aW9ucygpOwotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAg
IGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5c
biIpOwotI2VuZGlmCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5
ZXQuXG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmIChjb2RlQmxvY2stPmhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQot
ICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAq
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7Ci0jZW5kaWYKKyAgICAKKyAgICAvLyBX
ZSBjYW5ub3QgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uIGFu
ZCBhbHNvIGhhdmUgYW4gb3B0aW1pemVkCisgICAgLy8gcmVwbGFjZW1lbnQuCisgICAgQVNTRVJU
KAorICAgICAgICAhc3RhY2tGcmFtZS52bS0+d29ya2xpc3QKKyAgICAgICAgfHwgIShzdGFja0Zy
YW1lLnZtLT53b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShjb2RlQmxvY2spICE9IERGRzo6V29y
a2xpc3Q6Ok5vdEtub3duCisgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSk7CisgICAgCisgICAgREZHOjpXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RT
dGF0ZTsKKyAgICBDb21waWxhdGlvblJlc3VsdCBjb25jdXJyZW50UmVzdWx0OworICAgIGlmIChz
dGFja0ZyYW1lLnZtLT53b3JrbGlzdCkgeworICAgICAgICAvLyBUaGUgY2FsbCB0byBERkc6Oldv
cmtsaXN0Ojpjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgpIHdpbGwgY29tcGxldGUgYWxsIHJl
YWR5CisgICAgICAgIC8vIChpLmUuIGNvbXBpbGVkKSBjb2RlIGJsb2Nrcy4gQnV0IGlmIGl0IGNv
bXBsZXRlcyBvdXJzLCB3ZSBhbHNvIG5lZWQgdG8ga25vdworICAgICAgICAvLyB3aGF0IHRoZSBy
ZXN1bHQgd2FzIHNvIHRoYXQgd2UgZG9uJ3QgcGxvdyBhaGVhZCBhbmQgYXR0ZW1wdCBPU1Igb3Ig
aW1tZWRpYXRlCisgICAgICAgIC8vIHJlb3B0aW1pemF0aW9uLiBUaGlzIHdpbGwgaGF2ZSBhbHJl
YWR5IGFsc28gc2V0IHRoZSBhcHByb3ByaWF0ZSBKSVQgZXhlY3V0aW9uCisgICAgICAgIC8vIGNv
dW50IHRocmVzaG9sZCBkZXBlbmRpbmcgb24gd2hhdCBoYXBwZW5lZCwgc28gaWYgdGhlIGNvbXBp
bGF0aW9uIHdhcyBhbnl0aGluZworICAgICAgICAvLyBidXQgc3VjY2Vzc2Z1bCB3ZSBqdXN0IHdh
bnQgdG8gcmV0dXJuIGVhcmx5LiBTZWUgdGhlIGNhc2UgZm9yIHdvcmtsaXN0U3RhdGUgPT0KKyAg
ICAgICAgLy8gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQsIGJlbG93LgorICAgICAgICAKKyAgICAg
ICAgLy8gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgYWx0ZXJuYXRpdmVseSBqdXN0IGNhbGxlZCBX
b3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0ZSgpCisgICAgICAgIC8vIGhlcmUsIGFuZCBpZiBpdCBy
ZXR1cm5lZCBDb21waWxlZCwgd2UgY291bGQgaGF2ZSB0aGVuIGNhbGxlZAorICAgICAgICAvLyBj
b21wbGV0ZUFuZFNjaGVkdWxlT1NSKCkgYmVsb3cuIEJ1dCB0aGF0IHdvdWxkIGhhdmUgbWVhbnQg
dGhhdCBpdCBjb3VsZCB0YWtlCisgICAgICAgIC8vIGxvbmdlciBmb3IgY29kZSBibG9ja3MgdG8g
YmUgY29tcGxldGVkOiB0aGV5IHdvdWxkIG9ubHkgY29tcGxldGUgd2hlbiAqdGhlaXIqCisgICAg
ICAgIC8vIGV4ZWN1dGlvbiBjb3VudCB0cmlnZ2VyIGZpcmVkOyBidXQgdGhhdCBjb3VsZCB0YWtl
IGEgd2hpbGUgc2luY2UgdGhlIGZpcmluZyBpcworICAgICAgICAvLyByYWN5LiBJdCBjb3VsZCBh
bHNvIG1lYW4gdGhhdCBjb2RlIGJsb2NrcyB0aGF0IG5ldmVyIHJ1biBhZ2FpbiBhZnRlciBiZWlu
ZworICAgICAgICAvLyBjb21waWxlZCB3b3VsZCBzaXQgb24gdGhlIHdvcmtsaXN0IHVudGlsIG5l
eHQgR0MuIFRoYXQncyBmaW5lLCBidXQgaXQncworICAgICAgICAvLyBwcm9iYWJseSBhIHdhc3Rl
IG9mIG1lbW9yeS4gT3VyIGdvYWwgaGVyZSBpcyB0byBjb21wbGV0ZSBjb2RlIGJsb2NrcyBhcyBz
b29uIGFzCisgICAgICAgIC8vIHBvc3NpYmxlIGluIG9yZGVyIHRvIG1pbmltaXplIHRoZSBjaGFu
Y2VzIG9mIHVzIGV4ZWN1dGluZyBiYXNlbGluZSBjb2RlIGFmdGVyCisgICAgICAgIC8vIG9wdGlt
aXplZCBjb2RlIGlzIGFscmVhZHkgYXZhaWxhYmxlLgorICAgICAgICAKKyAgICAgICAgd29ya2xp
c3RTdGF0ZSA9IHN0YWNrRnJhbWUudm0tPndvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNG
b3JWTSgKKyAgICAgICAgICAgICpzdGFja0ZyYW1lLnZtLCBjb2RlQmxvY2ssICZjb25jdXJyZW50
UmVzdWx0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IERGRzo6V29ya2xp
c3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IERGRzo6V29ya2xp
c3Q6OkNvbXBpbGluZykgeworICAgICAgICAvLyBXZSBjYW5ub3QgYmUgaW4gdGhlIHByb2Nlc3Mg
b2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uIGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1pemVkCisg
ICAgICAgIC8vIHJlcGxhY2VtZW50LgorICAgICAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJsb2Nr
LT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRPcHRp
bWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25EZWZl
cnJlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3Rh
dGUgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgaWYgKGNvbmN1cnJlbnRS
ZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAg
ICAgICAgLy8gVGhpcyB3aWxsIGhhcHBlbiBpZiB3ZSBHQydkIHdoaWxlIGNvbXBsZXRpbmcgYWxs
IHJlYWR5IHBsYW5zLiBKdXN0IHJldHVybiwgc2luY2UKKyAgICAgICAgICAgIC8vIHdlIGtub3cg
dGhhdCBvdXIgdGhyZXNob2xkcyBoYXZlIGJlZW4gc2V0IGFwcHJvcHJpYXRlbHkgZnJvbSB0aGUg
amV0dGlzb25pbmcuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcg
T1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIi5c
biIpOwogICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCwgdGhl
biBpdCBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgd2UgZW50ZXJlZAogICAgICAgICAvLyBjdGlfb3B0
aW1pemUgZnJvbSBhIGxvb3AuIFRoYXQncyBiZWNhdXNlIGlzIHRoZXJlJ3MgYW4gb3B0aW1pemVk
IHJlcGxhY2VtZW50LAogICAgICAgICAvLyB0aGVuIGFsbCBjYWxscyB0byB0aGlzIGZ1bmN0aW9u
IHdpbGwgYmUgcmVsaW5rZWQgdG8gdGhlIHJlcGxhY2VtZW50IGFuZCBzbwpAQCAtOTQ1LDYwICs5
OTQsMzkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgIC8v
IHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpIHRvIGFsd2F5cyByZXR1cm4gdHJ1ZS4gQnV0
IHdlIG1ha2UgaXQgZG8gc29tZQogICAgICAgICAvLyBhZGRpdGlvbmFsIGNoZWNraW5nIGFueXdh
eSwgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgcmVjb21waWxhdGlvbiB0aHJhc2hpbmcuCiAgICAg
ICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVGcm9tTG9v
cE5vdygpKSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIGRhdGFM
b2coIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIigiLCAqY29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiKSAoaW4gbG9vcCkuXG4iKTsKLSNlbmRpZgorICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICAgICAgICAgIGRhdGFM
b2coCisgICAgICAgICAgICAgICAgICAgICJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICIs
ICpjb2RlQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICIoIiwgKmNvZGVCbG9jay0+cmVwbGFj
ZW1lbnQoKSwgIikgKGluIGxvb3ApLlxuIik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
b2RlQmxvY2stPnJlb3B0aW1pemUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygp
KSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIGRhdGFMb2coIkRl
bGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywgIiAoaW4gbG9vcCkgYmVjYXVz
ZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgICAgICAgICAiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZvciAiLCAqY29kZUJsb2Nr
LAorICAgICAgICAgICAgICAgICAgICAiIChpbiBsb29wKSBiZWNhdXNlIG9mIGluc3VmZmljaWVu
dCBwcm9maWxpbmcuXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBk
YXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2Nr
LCAiXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwg
KmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIAogICAgICAgICBKU1Njb3BlKiBzY29wZSA9IGNh
bGxGcmFtZS0+c2NvcGUoKTsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0OwogICAg
ICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZy
YW1lLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VDb21waWxhdGlvbigpCi0gICAgICAgICAgICB8fCBPcHRpb25zOjpzaG93RGlzYXNz
ZW1ibHkoKQotICAgICAgICAgICAgfHwgT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KCkpCisg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2co
Ik9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJl
c3VsdCwgIlxuIik7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgaWYgKGVy
cm9yKQotICAgICAgICAgICAgZGF0YUxvZygiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9u
IGZhaWxlZCB3aXRoIGEgSlMgZXJyb3IuXG4iKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJB
TShlcnJvcik7Ci0jZW5kaWYKKyAgICAgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZmFpbGVkIHdpdGggYSBK
UyBlcnJvci5cbiIpOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VS
VCgocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgPT0gKGNvZGVCbG9jay0+cmVwbGFj
ZW1lbnQoKSAhPSBjb2RlQmxvY2spKTsKLSAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKLSAgICAg
ICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAgICAgICAgY2FzZSBDb21waWxhdGlvbkRlZmVy
cmVkOgotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9nKCJP
cHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgZmFpbGVkLlxuIik7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoK
LSAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7Ci0gICAgICAgICAgICAvLyBSZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tv
ZmYuCi0gICAgICAgICAgICBjb2RlQmxvY2stPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21w
aWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICB9
CiAgICAgCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCk7CkBAIC0xMDE0LDMyICsxMDQyLDI4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wdGltaXplKQogICAgIH0KICAgICAKICAgICBpZiAodm9pZCogYWRkcmVzcyA9IERG
Rzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29k
ZUluZGV4KSkgewotICAgICAgICBpZiAoT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KCkpIHsK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgZGF0YUxv
ZygKICAgICAgICAgICAgICAgICAiUGVyZm9ybWluZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAtPiAi
LCAqb3B0aW1pemVkQ29kZUJsb2NrLCAiLCBhZGRyZXNzICIsCiAgICAgICAgICAgICAgICAgUmF3
UG9pbnRlcigoU1RVQl9SRVRVUk5fQUREUkVTUykudmFsdWUoKSksICIgLT4gIiwgUmF3UG9pbnRl
cihhZGRyZXNzKSwgIi5cbiIpOwogICAgICAgICB9Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKLSAgICAgICAgZGF0YUxvZygiT3B0aW1pemluZyAiLCAqY29kZUJsb2NrLCAiIHN1Y2NlZWRl
ZCwgcGVyZm9ybWluZyBPU1IgYWZ0ZXIgYSBkZWxheSBvZiAiLCBjb2RlQmxvY2stPm9wdGltaXph
dGlvbkRlbGF5Q291bnRlcigpLCAiLlxuIik7Ci0jZW5kaWYKIAogICAgICAgICBjb2RlQmxvY2st
Pm9wdGltaXplU29vbigpOwogICAgICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhhZGRyZXNz
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQotICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBzdWNjZWVkZWQs
IE9TUiBmYWlsZWQsIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25E
ZWxheUNvdW50ZXIoKSwgIi5cbiIpOwotI2VuZGlmCisKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyAiLCAq
Y29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksCisgICAgICAgICAg
ICAiIHN1Y2NlZWRlZCwgT1NSIGZhaWxlZCwgYWZ0ZXIgYSBkZWxheSBvZiAiLAorICAgICAgICAg
ICAgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOworICAgIH0K
IAogICAgIC8vIENvdW50IHRoZSBPU1IgZmFpbHVyZSBhcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUu
IElmIHRoaXMgaGFwcGVucyBhIGxvdCwgdGhlbgogICAgIC8vIHJlb3B0aW1pemUuCiAgICAgb3B0
aW1pemVkQ29kZUJsb2NrLT5jb3VudE9TUkV4aXQoKTsKICAgICAKLSNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQotICAgIGRhdGFMb2coIkVuY291bnRlcmVkIE9TUiBmYWlsdXJlICIsICpjb2Rl
QmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIi5cbiIpOwotI2VuZGlm
Ci0KICAgICAvLyBXZSBhcmUgYSBsb3QgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgdHJpZ2dlcmlu
ZyByZW9wdGltaXphdGlvbiBhZnRlciBPU1IgZmFpbHVyZSB0aGFuCiAgICAgLy8gYmVmb3JlIGl0
LiBJZiB3ZSBlbnRlciB0aGUgb3B0aW1pemVfZnJvbV9sb29wIHRyaWdnZXIgd2l0aCBhIGJ1Y2tl
dCBmdWxsIG9mIGZhaWwKICAgICAvLyBhbHJlYWR5LCB0aGVuIHdlIHJlYWxseSB3b3VsZCBsaWtl
IHRvIHJlb3B0aW1pemUgaW1tZWRpYXRlbHkuIEJ1dCB0aGlzIGNhc2UgY292ZXJzCkBAIC0xMDQ5
LDkgKzEwNzMsMTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAg
Ly8gcmlnaHQgbm93LiBTbywgd2Ugb25seSB0cmlnZ2VyIHJlb3B0aW1pemF0aW9uIG9ubHkgdXBv
biB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgKG5vbi1sb29wKQogICAgIC8vIHJlb3B0aW1pemF0aW9u
IHRyaWdnZXIuCiAgICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6ZU5v
dygpKSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZygiVHJp
Z2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCksICIgKGFmdGVyIE9TUiBmYWlsKS5cbiIpOwotI2VuZGlmCisgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAgICAgIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9j
aywgIiAtPiAiLAorICAgICAgICAgICAgICAgICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIg
KGFmdGVyIE9TUiBmYWlsKS5cbiIpOworICAgICAgICB9CiAgICAgICAgIGNvZGVCbG9jay0+cmVv
cHRpbWl6ZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNTAzODApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODIsMzAgKzI4MiwyNiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0
SGV1cmlzdGljcyhDCiAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0
aW9ucygpOwogICAgIAogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVh
Y2hlZCgpKSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0Yo
IiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuXG4iKTsKLSNlbmRpZgorICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBK
SVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuXG4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICAKICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb2RlQmxvY2st
PmppdENvbXBpbGUoZXhlYyk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBp
bGF0aW9uTm90TmVlZGVkOgotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRh
dGFMb2dGKCIgICAgQ29kZSB3YXMgYWxyZWFkeSBjb21waWxlZC5cbiIpOwotI2VuZGlmCisgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nRigiICAg
IENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQuXG4iKTsKICAgICAgICAgY29kZUJsb2NrLT5qaXRT
b29uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6
Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0YoIiAgICBKSVQg
Y29tcGlsYXRpb24gZmFpbGVkLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNvbXBpbGF0aW9uIGZh
aWxlZC5cbiIpOwogICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0jaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0YoIiAgICBKSVQgY29tcGls
YXRpb24gc3VjY2Vzc2Z1bC5cbiIpOwotI2VuZGlmCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBzdWNj
ZXNzZnVsLlxuIik7CiAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMzE3LDExICszMTMsMTEgQEAgaW5saW5lIGJvb2wg
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQwogZW51bSBFbnRyeUtpbmQgeyBQcm9sb2d1ZSwg
QXJpdHlDaGVjayB9Owogc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihFeGVjU3Rh
dGUqIGV4ZWMsIEluc3RydWN0aW9uKiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIg
Km5hbWUsIEVudHJ5S2luZCBraW5kKQogewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0g
ICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5hbWUsICIgd2l0aCBleGVjdXRl
Q291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKG5hbWUpOwotI2VuZGlmCisgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywg
IjogRW50ZXJlZCAiLCBuYW1lLCAiIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLAorICAgICAgICAg
ICAgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCksICJcbiIpOworICAgIH0KICAgICAK
ICAgICBpZiAoIXNob3VsZEpJVChleGVjKSkgewogICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRB
bnl0aW1lU29vbigpOwpAQCAtMzY0LDEwICszNjAsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
ZW50cnlfb3NyX2Z1bmN0aW9uXwogTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiB7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAKLSNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRW50ZXJl
ZCBsb29wX29zciB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1
dGVDb3VudGVyKCksICJcbiIpOwotI2VuZGlmCisKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRl
cmVkIGxvb3Bfb3NyIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLAorICAgICAgICAgICAgY29kZUJs
b2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCksICJcbiIpOworICAgIH0KICAgICAKICAgICBpZiAo
IXNob3VsZEpJVChleGVjKSkgewogICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29v
bigpOwpAQCAtMzk0LDEwICszOTIsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3Ip
CiBMTElOVF9TTE9XX1BBVEhfREVDTChyZXBsYWNlKQogewogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgCi0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKLSAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEVudGVyZWQgcmVwbGFjZSB3aXRoIGV4ZWN1
dGVDb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCksICJcbiIpOwot
I2VuZGlmCisKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFM
b2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVj
dXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKSwgIlxuIik7CisgICAgfQogICAgIAogICAgIGlmIChzaG91bGRKSVQoZXhlYykpCiAgICAg
ICAgIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKGNvZGVCbG9jaywgZXhlYyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMu
aAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRl
ICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlBy
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4K
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJ
VExvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25j
dXJyZW50SklUTG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENv
bmN1cnJlbnRKSVRMb2NrX2gKKyNkZWZpbmUgQ29uY3VycmVudEpJVExvY2tfaAorCisjaW5jbHVk
ZSA8d3RmL0J5dGVTcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob0xvY2suaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKKyNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCit0eXBlZGVmIEJ5dGVTcGlu
TG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgQ29uY3VycmVu
dEpJVExvY2tlcjsKKyNlbHNlCit0eXBlZGVmIE5vTG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5
cGVkZWYgTm9Mb2NrTG9ja2VyIENvbmN1cnJlbnRKSVRMb2NrZXI7CisjZW5kaWYKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb25jdXJyZW50SklUTG9ja19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHJl
dmlzaW9uIDE1MDM4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlv
bkhhcm5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDEyICsxNDEsMjAgQEAgaW5saW5lIENv
bXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlvbgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlPgogaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRP
cHRpbWl6ZWRDb2RlKAotICAgIFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuLCBSZWZQdHI8Q29k
ZUJsb2NrVHlwZT4mIHNpbmssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKKyAgICBQYXNzUmVm
UHRyPERGRzo6UGxhbj4gcGFzc2VkUGxhbiwgUmVmUHRyPENvZGVCbG9ja1R5cGU+JiBzaW5rLCBS
ZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2ssIGludCogbnVtUGFyYW1ldGVycykKIHsKKyAgICBSZWZQdHI8REZH
OjpQbGFuPiBwbGFuID0gcGFzc2VkUGxhbjsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQg
PSBERkc6OnRyeUZpbmFsaXplUGxhbihwbGFuLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICJEZWZlcnJlZCBvcHRpbWl6aW5nIGNvbXBpbGF0aW9uICIsICpwbGFuLT5r
ZXkoKSwgIiAtPiAiLCAqcGxhbi0+Y29kZUJsb2NrLAorICAgICAgICAgICAgIiByZXN1bHQ6ICIs
IHJlc3VsdCwgIlxuIik7CisgICAgfQorICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNj
ZXNzZnVsKQorICAgICAgICBwbGFuLT5jb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnVubGlua0lu
Y29taW5nQ2FsbHMoKTsKICAgICByZXR1cm4gaW5zdGFsbE9wdGltaXplZENvZGUoCi0gICAgICAg
IERGRzo6dHJ5RmluYWxpemVQbGFuKHBsYW4sIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVj
ayksCi0gICAgICAgIHNpbmssIHN0YXRpY19jYXN0PENvZGVCbG9ja1R5cGUqPihwbGFuLT5jb2Rl
QmxvY2suZ2V0KCkpLCBqaXRDb2RlLAorICAgICAgICByZXN1bHQsIHNpbmssIHN0YXRpY19jYXN0
PENvZGVCbG9ja1R5cGUqPihwbGFuLT5jb2RlQmxvY2suZ2V0KCkpLCBqaXRDb2RlLAogICAgICAg
ICBqaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPyAqaml0Q29kZVdpdGhBcml0eUNoZWNrIDogTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCksCiAgICAgICAgIG51bVBhcmFtZXRlcnMpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDE1MDM4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNSw2ICszNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBpbnQgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdDo6ZmluZFJlZ2lzdGVySW5kZXgodm9pZCogcmVnaXN0ZXJBZGRyZXNzKQogeworICAg
IExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKICAgICBmb3IgKGludCBpID0gbV9yZWdpc3Rl
cnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIGlmICgmbV9yZWdpc3RlcnNbaV0gIT0gcmVnaXN0
ZXJBZGRyZXNzKQogICAgICAgICAgICAgY29udGludWU7CkBAIC00Niw2ICs0OCw4IEBAIGludCBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXMKIAogaW50IEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCkKIHsK
KyAgICBMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCiAgICAgQVNTRVJUKG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQgPj0gMCk7CiAgICAgCiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVy
cy5zaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxNTAzODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpZm5kZWYgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdF9oCiAjZGVmaW5lIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RfaAogCisjaW5jbHVk
ZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUg
IkpTU3ltYm9sVGFibGVPYmplY3QuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgpAQCAtOTEsOCAr
OTIsMTIgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIH0KKyAgICAKKyAgICB0eXBlZGVmIENvbmN1cnJlbnRKSVRMb2NrIExvY2s7Cisg
ICAgdHlwZWRlZiBDb25jdXJyZW50SklUTG9ja2VyIExvY2tlcjsKIAogICAgIFNlZ21lbnRlZFZl
Y3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4sIDE2PiBtX3JlZ2lzdGVyczsKKyAgICBMb2NrIG1f
bG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw2
ICs4MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoYm9vbCwgcHJpbnRFYWNoT1NSRXhpdCwg
ZmFsc2UpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlR3JhcGgsIGZhbHNlKSBcCiAgICAgdihib29s
LCB2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UsIGZhbHNlKSBcCisgICAgdihib29sLCB2ZXJib3Nl
T1NSLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgdmVyYm9zZUNvbXBpbGF0aW9uUXVldWUsIGZhbHNl
KSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlRXhwZXJpbWVudGFsRlRMLCBmYWxzZSkgXAogICAg
IHYoYm9vbCwgdXNlRlRMVEJBQSwgdHJ1ZSkgXApAQCAtODgsNiArOTAsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB2KGJvb2wsIGVuYWJsZUxMVk1GYXN0SVNlbCwgdHJ1ZSkgXAogICAgIHYodW5z
aWduZWQsIGxsdm1PcHRpbWl6YXRpb25MZXZlbCwgMikgXAogICAgIFwKKyAgICB2KGJvb2wsIGVu
YWJsZUNvbmN1cnJlbnRKSVQsIHRydWUpIFwKKyAgICBcCiAgICAgdihib29sLCBlbmFibGVQcm9m
aWxlciwgZmFsc2UpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgbWF4aW11bU9wdGltaXphdGlv
bkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMDAwKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNkZWZpbmUgU3RydWN0dXJlX2gKIAogI2luY2x1ZGUgIkNsYXNzSW5mby5o
IgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBl
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtNDAs
NyArNDEsNiBAQAogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50
LmgiCiAjaW5jbHVkZSAiV2Vhay5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KICNp
bmNsdWRlIDx3dGYvQ29tcGlsYXRpb25UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03Miw4ICs3Miw4IEBAIHB1Ymxp
YzoKIAogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgCi0gICAgdHlwZWRlZiBCeXRlU3Bp
bkxvY2sgTG9jazsKLSAgICB0eXBlZGVmIEJ5dGVTcGluTG9ja2VyIExvY2tlcjsKKyAgICB0eXBl
ZGVmIENvbmN1cnJlbnRKSVRMb2NrIExvY2s7CisgICAgdHlwZWRlZiBDb25jdXJyZW50SklUTG9j
a2VyIExvY2tlcjsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJ
bmZvKiwgSW5kZXhpbmdUeXBlID0gTm9uQXJyYXksIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0g
MCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE1MDM4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3
IEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkwKIAogQUxXQVlTX0lO
TElORSBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIFN0cnVjdHVyZTo6cHJvcGVydHlUYWJs
ZSgpCiB7Ci0gICAgQVNTRVJUKCFnbG9iYWxPYmplY3QoKSB8fCAhZ2xvYmFsT2JqZWN0KCktPnZt
KCkuaGVhcC5pc0J1c3koKSk7CisgICAgQVNTRVJUKCFnbG9iYWxPYmplY3QoKSB8fCAhZ2xvYmFs
T2JqZWN0KCktPnZtKCkuaGVhcC5pc0NvbGxlY3RpbmcoKSk7CiAgICAgcmV0dXJuIG1fcHJvcGVy
dHlUYWJsZVVuc2FmZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNTAzODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaWZuZGVmIFN5bWJvbFRhYmxlX2gKICNkZWZpbmUgU3ltYm9sVGFibGVfaAogCisjaW5jbHVk
ZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUg
IldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CkBAIC0zNDMsOCAr
MzQ0LDggQEAgc3RydWN0IFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzIDogSGFzaAogY2xhc3Mg
U3ltYm9sVGFibGUgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5n
SW1wbD4sIFN5bWJvbFRhYmxlRW50cnksIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJl
ZlB0cjxTdHJpbmdJbXBsPiA+LCBTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0cz4gTWFwOwotICAg
IHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7Ci0gICAgdHlwZWRlZiBCeXRlU3BpbkxvY2tlciBM
b2NrZXI7CisgICAgdHlwZWRlZiBDb25jdXJyZW50SklUTG9jayBMb2NrOworICAgIHR5cGVkZWYg
Q29uY3VycmVudEpJVExvY2tlciBMb2NrZXI7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBTeW1i
b2xUYWJsZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TeW1ib2xUYWJsZSgpOwpAQCAtNDM0
LDcgKzQzNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTWFwIG1fbWFwOwogcHVibGljOgot
ICAgIG11dGFibGUgQnl0ZVNwaW5Mb2NrIG1fbG9jazsKKyAgICBtdXRhYmxlIENvbmN1cnJlbnRK
SVRMb2NrIG1fbG9jazsKIH07CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRl
ICJERkdMb25nTGl2ZWRTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVk
ZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjUzLDEyICsyNTQsMTUgQEAg
Vk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgaWYgKGNhblVzZUpJVCgpKQotICAgICAgICBtX2RmZ1N0YXRlID0gYWRvcHRQ
dHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CisgICAgICAgIGRmZ1N0YXRlID0gYWRvcHRQ
dHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKIH0KIAogVk06On5WTSgpCiB7
CisgICAgLy8gTWFrZSBzdXJlIGNvbmN1cnJlbnQgY29tcGlsYXRpb25zIGFyZSBkb25lLgorICAg
IHByZXBhcmVUb0Rpc2NhcmRDb2RlKCk7CisgICAgCiAgICAgLy8gQ2xlYXIgdGhpcyBmaXJzdCB0
byBlbnN1cmUgdGhhdCBub2JvZHkgdHJpZXMgdG8gcmVtb3ZlIHRoZW1zZWx2ZXMgZnJvbSBpdC4K
ICAgICBtX3BlckJ5dGVjb2RlUHJvZmlsZXIuY2xlYXIoKTsKICAgICAKQEAgLTQzNCw4ICs0Mzgs
MTkgQEAgdm9pZCBWTTo6c3RvcFNhbXBsaW5nKCkKICAgICBpbnRlcnByZXRlci0+c3RvcFNhbXBs
aW5nKCk7CiB9CiAKK3ZvaWQgVk06OnByZXBhcmVUb0Rpc2NhcmRDb2RlKCkKK3sKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKyAgICBpZiAoIXdvcmtsaXN0KQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgd29ya2xpc3QtPmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqdGhpcyk7CisjZW5kaWYKK30KKwog
dm9pZCBWTTo6ZGlzY2FyZEFsbENvZGUoKQogeworICAgIHByZXBhcmVUb0Rpc2NhcmRDb2RlKCk7
CiAgICAgbV9jb2RlQ2FjaGUtPmNsZWFyKCk7CiAgICAgaGVhcC5kZWxldGVBbGxDb21waWxlZENv
ZGUoKTsKICAgICBoZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CkBAIC00NzcsNiAr
NDkyLDggQEAgc3RydWN0IFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXIgOiBwdWJsaQogCiB2b2lk
IFZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpCiB7CisgICAgcHJlcGFyZVRvRGlzY2FyZENv
ZGUoKTsKKyAgICAKICAgICBpZiAoZHluYW1pY0dsb2JhbE9iamVjdCkgewogICAgICAgICBTdGFj
a1ByZXNlcnZpbmdSZWNvbXBpbGVyIHJlY29tcGlsZXI7CiAgICAgICAgIEhhc2hTZXQ8SlNDZWxs
Kj4gcm9vdHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1
MDM4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDYgKzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgbmFtZXNwYWNlIERGRyB7CiAgICAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CisgICAgY2xh
c3MgV29ya2xpc3Q7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCkBAIC0yMDcs
NyArMjA4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhlYXAgaGVhcDsKICAgICAgICAg
CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRl
PiBtX2RmZ1N0YXRlOworICAgICAgICBPd25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gZGZnU3Rh
dGU7CisgICAgICAgIFJlZlB0cjxERkc6OldvcmtsaXN0PiB3b3JrbGlzdDsKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKIAogICAgICAgICBWTVR5cGUgdm1UeXBlOwpAQCAtNDc5LDYgKzQ4MSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0xvY2smIGFwaUxvY2soKSB7IHJldHVybiBt
X2FwaUxvY2s7IH0KICAgICAgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUoKSB7IHJldHVybiBtX2Nv
ZGVDYWNoZS5nZXQoKTsgfQogCisgICAgICAgIHZvaWQgcHJlcGFyZVRvRGlzY2FyZENvZGUoKTsK
KyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUo
KTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wNS0xOCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6IERG
RyBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYSBzZXBhcmF0ZSB0aHJlYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgzOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgKiB3dGYvQnl0ZVNw
aW5Mb2NrLmg6CisgICAgICAgIE1ha2UgaXQgbm9uLWNvcHlhYmxlLiBXZSBwcmV2aW91c2x5IGhh
ZCBidWdzIHdoZXJlIHdlIHVzZWQgQnl0ZVNwaW5Mb2NrIGFzIGEgbG9ja2VyLgorICAgICAgICBD
bGVhcmx5IHRoYXQncyBiYWQuCisKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5o
OgorICAgICAgICBNYWtlIGl0IHRocmVhZC1zYWZlIHJlZi1jb3VudGVkLCBzaW5jZSB3ZSBtYXkg
bm93IGJlIHBhc3NpbmcgdGhlbSBiZXR3ZWVuIHRoZQorICAgICAgICBjb25jdXJyZW50IEpJVCB0
aHJlYWQgYW5kIHRoZSBtYWluIHRocmVhZC4KKwogMjAxMy0wNS0wNiAgR2VvZmZyZXkgR2FyZW4g
IDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIENoZXJyeS1waWNrIG1lcmdlZCBzb21lIHBh
dGNoZXMgdG8gdGhlIEZUTCBicmFuY2guCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlU3Bpbkxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAkocmV2aXNp
b24gMTUwMzgwKQorKysgU291cmNlL1dURi93dGYvQnl0ZVNwaW5Mb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDExICsyOSwxMyBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5j
bHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIEJ5dGVTcGluTG9jayB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQnl0ZVNwaW5Mb2NrKTsKIHB1YmxpYzoKICAgICBCeXRlU3BpbkxvY2soKQog
ICAgICAgICA6IG1fbG9jaygwKQpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhh
bmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUu
aAkocmV2aXNpb24gMTUwMzgwKQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMSwxNCArMzEsMTQgQEAKIAogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgTWV0YUFsbG9j
YXRvcjsKIAotY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
dGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5k
bGUsIHZvaWQqPjo6Tm9kZSB7CitjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tU
cmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiBwcml2YXRlOgogICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6
ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202380</attachid>
            <date>2013-05-20 23:40:51 -0700</date>
            <delta_ts>2013-05-21 09:22:21 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>107026</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwNDIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMiBA
QAorMjAxMy0wNS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYSBzZXBhcmF0ZSB0aHJl
YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyB0aGUgZmluYWwgYml0IG9mIGNvbmN1cnJlbnQgSklUaW5nLiBUaGUgaWRlYSBp
cyB0aGF0IHRoZXJlIGlzIGEKKyAgICAgICAgc2luZ2xlIGdsb2JhbCB3b3JrbGlzdCwgYW5kIGEg
c2luZ2xlIGdsb2JhbCB0aHJlYWQsIHRoYXQgZG9lcyBhbGwKKyAgICAgICAgb3B0aW1pemluZyBj
b21waWxhdGlvbi4gVGhpcyBpcyB0aGUgREZHOjpXb3JrbGlzdC4gSXQgY29udGFpbnMgYSBxdWV1
ZSBvZgorICAgICAgICBERkc6OlBsYW5zLCBhbmQgYSBtYXAgZnJvbSBDb2RlQmxvY2sqICh0aGUg
YmFzZWxpbmUgY29kZSBibG9jayB3ZSdyZQorICAgICAgICB0cnlpbmcgdG8gb3B0aW1pemUpIHRv
IERGRzo6UGxhbi4gSWYgdGhlIERGR0RyaXZlciB0cmllcyB0byBjb25jdXJyZW50bHkKKyAgICAg
ICAgY29tcGlsZSBzb21ldGhpbmcsIGl0IHB1dHMgdGhlIFBsYW4gb24gdGhlIFdvcmtsaXN0LiBU
aGUgV29ya2xpc3QncworICAgICAgICB0aHJlYWQgd2lsbCBjb21waWxlIHRoYXQgUGxhbiBldmVu
dHVhbGx5LCBhbmQgd2hlbiBpdCdzIGRvbmUsIGl0IHdpbGwKKyAgICAgICAgc2lnbmFsIGl0cyBj
b21wbGV0aW9uIGJ5ICgxKSBub3RpZnlpbmcgYW55b25lIHdhaXRpbmcgZm9yIHRoZSBXb3JrbGlz
dCB0bworICAgICAgICBiZSBkb25lLCBhbmQgKDIpIGZvcmNpbmcgdGhlIENvZGVCbG9jazo6bV9q
aXRFeGVjdXRlQ291bnRlciB0byB0YWtlIHNsb3cKKyAgICAgICAgcGF0aC4gVGhlIG5leHQgQmFz
ZWxpbmUgSklUIGN0aV9vcHRpbWl6ZSBjYWxsIHdpbGwgdGhlbiBpbnN0YWxsIGFsbCByZWFkeQor
ICAgICAgICAoaS5lLiBjb21waWxlZCkgUGxhbnMgZm9yIHRoYXQgVk0uIE5vdGUgdGhhdCAoMSkg
aXMgb25seSBmb3IgdGhlIEdDIGFuZAorICAgICAgICBWTSBzaHV0ZG93biwgd2hpY2ggd2lsbCB3
YW50IHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3V0c3RhbmRpbmcKKyAgICAgICAg
YXN5bmMgY29tcGlsYXRpb25zIGJlZm9yZSBwcm9jZWVkaW5nLiBUaGV5IGRvIHNvIGJ5IHNpbXBs
eSB3YWl0aW5nIGZvcgorICAgICAgICBhbGwgb2YgdGhlIHBsYW5zIGZvciB0aGUgY3VycmVudCBW
TSB0byBjb21wbGV0ZS4gKDIpIGlzIHRoZSBhY3R1YWwgd2F5CisgICAgICAgIHRoYXQgY29kZSB0
eXBpY2FsbHkgZ2V0cyBpbnN0YWxsZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGFsbCB2
ZXJ5IHJhY3kgYnkgZGVzaWduLiBGb3IgZXhhbXBsZSwganVzdCBhcyB3ZSB0cnkgdG8gZm9yY2Ug
dGhlCisgICAgICAgIGV4ZWN1dGUgY291bnRlciB0byB0YWtlIHNsb3cgcGF0aCwgdGhlIG1haW4g
dGhyZWFkIG1heSBiZSBzZXR0aW5nIHRoZQorICAgICAgICBleGVjdXRlIGNvdW50ZXIgdG8gc29t
ZSBvdGhlciB2YWx1ZS4gVGhlIG1haW4gdGhyZWFkIG11c3Qgc2V0IGl0IHRvCisgICAgICAgIGFu
b3RoZXIgdmFsdWUgYmVjYXVzZSAoYSkgSklUIGNvZGUgaXMgY29uc3RhbnRseSBpbmNyZW1lbnRp
bmcgdGhlIGNvdW50ZXIKKyAgICAgICAgaW4gYSByYWN5IHdheSwgKGIpIHRoZSBjdGlfb3B0aW1p
emUgc2xvdyBwYXRoIHdpbGwgc2V0IGl0IHRvIHNvbWUKKyAgICAgICAgbGFyZ2UtaXNoIG5lZ2F0
aXZlIHZhbHVlIHRvIGVuc3VyZSB0aGF0IGN0aV9vcHRpbWl6ZSBpc24ndCBjYWxsZWQKKyAgICAg
ICAgcmVwZWF0ZWRseSwgYW5kIChjKSBPU1IgZXhpdHMgZnJvbSBwcmV2aW91c2x5IGpldHRpc29u
ZWQgY29kZSBibG9ja3MgbWF5CisgICAgICAgIHN0aWxsIHdhbnQgdG8gcmVzZXQgdGhlIGNvdW50
ZXIgdmFsdWVzLiBUaGlzICJyYWNlIiBpcyBtYWRlIGJlbmlnbiwgYnkKKyAgICAgICAgZW5zdXJp
bmcgdGhhdCB3aGlsZSB0aGVyZSBpcyBhbiBhc3luY2hyb25vdXMgY29tcGlsYXRpb24sIHdlIGF0
IHdvcnNlIHNldAorICAgICAgICB0aGUgY291bnRlciB0byBvcHRpbWl6ZUFmdGVyV2FybVVwIGFu
ZCBuZXZlciB0byBkZWZlckluZGVmaW5pdGVseS4gSGVuY2UKKyAgICAgICAgaWYgdGhlIHJhY2Ug
aGFwcGVucyB0aGVuIHRoZSB3b3JzdCBjYXNlIGlzIHRoYXQgd2Ugd2FpdCBhbm90aGVyIH4xMDAw
CisgICAgICAgIGNvdW50cyBiZWZvcmUgaW5zdGFsbGluZyB0aGUgb3B0aW1pemVkIGNvZGUuIEFu
b3RoZXIgZGVmZW5zZSBpcyB0aGF0IGlmCisgICAgICAgIGFueSBDb2RlQmxvY2sgY2FsbHMgaW50
byBjdGlfb3B0aW1pemUsIHRoZW4gaXQgd2lsbCBjaGVjayBmb3IgYWxsIHJlYWR5CisgICAgICAg
IHBsYW5zIGZvciB0aGUgVk0gLSBzbyBldmVuIGlmIGEgY29kZSBibG9jayBoYXMgdG8gd2FpdCBh
bm90aGVyIH4xMDAwCisgICAgICAgIGV4ZWN1dGlvbnMgYmVmb3JlIGl0IGNhbGxzIGN0aV9vcHRp
bWl6ZSB0byBkbyB0aGUgaW5zdGFsbGF0aW9uLCBpdCBtYXkKKyAgICAgICAgYWN0dWFsbHkgZW5k
IHVwIGJlaW5nIGluc3RhbGxlZCBzb29uZXIgYmVjYXVzZSBhIGRpZmZlcmVudCBjb2RlIGJsb2Nr
IGhhZAorICAgICAgICBjYWxsZWQgY3RpX29wdGltaXplLCBwb3RlbnRpYWxseSBmb3IgYW4gdW5y
ZWxhdGVkIHJlYXNvbi4KKyAgICAgICAgCisgICAgICAgIFNwZWNpYWwgY2FyZSBpcyB0YWtlbiB0
byBlbnN1cmUgdGhhdCBpbnN0YWxsaW5nIHBsYW5zIGluZm9ybXMgdGhlIEdDCisgICAgICAgIGFi
b3V0IHRoZSBpbmNyZWFzZWQgbWVtb3J5IHVzYWdlLCBidXQgYWxzbyBlbnN1cmVzIHRoYXQgd2Ug
ZG9uJ3QgcmVjdXJzZQorICAgICAgICBpbmZpbml0ZWx5IC0gc2luY2UgYXQgc3RhcnQgb2YgR0Mg
d2UgdHJ5IHRvIGluc3RhbGwgb3V0c3RhbmRpbmcgcGxhbnMuCisgICAgICAgIFRoaXMgaXMgZG9u
ZSBieSBpbnRyb2R1Y2luZyBhIG5ldyBHQyBkZWZlcnJhbCBtZWNoYW5pc20gKHRoZSBEZWZlckdD
CisgICAgICAgIGJsb2NrLXNjb3BlZCB0aGluZ3kpLCB3aGljaCB3aWxsIGVuc3VyZSB0aGF0IEdD
cyBkb24ndCBoYXBwZW4gaW4gdGhlCisgICAgICAgIHNjb3BlIGJ1dCBhcmUgYWxsb3dlZCB0byBo
YXBwZW4gYWZ0ZXIuIFRoaXMgc3RpbGwgbGVhdmVzIHRoZSBzdHJhbmdlCisgICAgICAgIGNvcm5l
ciBjYXNlIHRoYXQgY3RpX29wdGltaXplIG1heSBpbnN0YWxsIG91dHN0YW5kaW5nIHBsYW5zLCB0
aGVuIEdDLCBhbmQKKyAgICAgICAgdGhhdCBHQyBtYXkgamV0dGlzb24gdGhlIGNvZGUgYmxvY2sg
dGhhdCB3YXMgaW5zdGFsbGVkLiBUaGlzLCBhbmQgdGhlCisgICAgICAgIGZhY3QgdGhhdCB0aGUg
cGxhbiB0aGF0IHdlIHRvb2sgc2xvdyBwYXRoIHRvIGluc3RhbGwgY291bGQgaGF2ZSBiZWVuIGEK
KyAgICAgICAgZmFpbGVkIG9yIGludmFsaWQgY29tcGlsZSwgbWVhbiB0aGF0IHdlIGhhdmUgdG8g
dGFrZSBzcGVjaWFsIHByZWNhdXRpb25zCisgICAgICAgIGluIGN0aV9vcHRpbWl6ZS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBmaXhlcyBhIG51bWJlciBvZiBzbWFsbCBjb25j
dXJyZW5jeSBidWdzIHRoYXQgSSBmb3VuZAorICAgICAgICB3aGVuIHRoaW5ncyBzdGFydGVkIHJ1
bm5pbmcuIFRoZXJlIGFyZSBwcm9iYWJseSBtb3JlIG9mIHRob3NlIGJ1Z3Mgc3RpbGwKKyAgICAg
ICAgbGVmdCB0byBmaXguIFRoaXMgcGF0Y2gganVzdCBmaXhlcyB0aGUgb25lcyBJIGtub3cgYWJv
dXQuCisgICAgICAgIAorICAgICAgICBDb25jdXJyZW50IGNvbXBpbGF0aW9uIGlzIHJpZ2h0IG5v
dyBvbmx5IGVuYWJsZWQgb24gWDg2XzY0IE1hYy4gV2UgbmVlZAorICAgICAgICBwbGF0Zm9ybXMg
dGhhdCBhcmUgc3VmZmljaWVudGx5IENBU3Rhc3RpYyBzbyB0aGF0IHdlIGNhbiBkbyB0aGUgdmFy
aW91cworICAgICAgICBtZW1vcnkgZmVuY2UgYW5kIENBUyB0cmlja3MgdGhhdCBtYWtlIHRoaXMg
c2FmZS4gV2UgYWxzbyBuZWVkIGEgcGxhdGZvcm0KKyAgICAgICAgdGhhdCB1c2VzIEpTVkFMVUU2
NC4gQW5kIHdlIG5lZWQgcHRocmVhZF9vbmNlLiBTbywgdGhhdCBwcmV0dHkgbXVjaCBtZWFucwor
ICAgICAgICBqdXN0IFg2NF82NCBmb3Igbm93LiBFbmFibGluZyBMaW51eC02NF82NCBzaG91bGQg
YmUgYSBicmVlemUsIGJ1dCBJJ2xsCisgICAgICAgIGxlYXZlIHRoYXQgdXAgdG8gdGhlIFF0IGFu
ZCBHVEsrIHBvcnRzIHRvIGRvIGF0IHRoZWlyIGRpc2NyZXRpb24uCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc29saWQgc3BlZWQtdXAgb24gU3VuU3BpZGVyICg4JSkgYW5kIFY4U3BpZGVy
ICgxNiUpLCBvdXIgdHdvCisgICAgICAgIG1haW4gY29tcGlsZS10aW1lIGJlbmNobWFya3MuIE1v
c3QgcGVjdWxpYXJseSwgdGhpcyBhbHNvIGFwcGVhcnMgdG8KKyAgICAgICAgcmVkdWNlIG1lYXN1
cmVtZW50IG5vaXNlLCByYXRoZXIgdGhhbiBpbmNyZWFzaW5nIGl0IGFzIHlvdSB3b3VsZCBoYXZl
CisgICAgICAgIGV4cGVjdGVkLiBJIGRvbid0IHVuZGVyc3RhbmQgdGhhdCByZXN1bHQgYnV0IEkg
bGlrZSBpdCBhbnl3YXkuIE9uIHRoZQorICAgICAgICBvdGhlciBoYW5kLCB0aGlzIGlzIGEgc2xp
Z2h0bHkgKDElKSBzbG93LWRvd24gb24gVjh2Ny4gSSB3aWxsIGNvbnRpbnVlIHRvCisgICAgICAg
IGludmVzdGlnYXRlIHRoaXMgYnV0IEkgdGhpbmsgdGhhdCB0aGUgcmVzdWx0cyBhcmUgYWxyZWFk
eSBnb29kIGVub3VnaAorICAgICAgICB0aGF0IHdlIHNob3VsZCBsYW5kIHRoaXMgYXMtaXMuCisK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpyZXNldFN0dWJJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
YmFzZWxpbmVWZXJzaW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemF0aW9uVGhyZXNo
b2xkU2NhbGluZ0ZhY3Rvcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZk9wdGlt
aXphdGlvblRocmVzaG9sZFJlYWNoZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGlt
aXplTmV4dEludm9jYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRPcHRpbWl6
ZUFueXRpbWVTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyV2Fy
bVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVTb29uKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGls
YXRpb25SZXN1bHQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rp
b25zQW5kQ291bnRMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxs
QXJyYXlQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1p
emVOb3cpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb21waWxlKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2tMb2NrLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVj
b2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVy
Ojpmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChK
U0M6OkV4ZWN1dGlvbkNvdW50ZXI6OnNldFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoRXhlY3V0aW9uQ291bnRlcik6CisgICAgICAg
ICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmVjb21w
aWxlQWxsSlNGdW5jdGlvbnMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmluamVjdExhenlPcGVyYW5kU3Bl
Y3VsYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGVBbmRF
bWl0Q2hlY2tzKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6ZW5hYmxlQ29uY3VycmVudEpJVCk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9E
RkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZH
T1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojpjb21waWxlSW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmtleSk6CisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAoUGxhbik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpXb3JrbGlzdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
V29ya2xpc3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkpOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSk6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3Jr
bGlzdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJ1blRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnRocmVhZEZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjppbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpnbG9iYWxXb3JrbGlzdCk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6IEFkZGVkLgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKFdvcmtsaXN0KToKKyAgICAgICAgKiBoZWFwL0NvcGll
ZFNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9j
ayk6CisgICAgICAgICogaGVhcC9EZWZlckdDLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKERlZmVyR0MpOgorICAgICAgICAoSlNDOjpEZWZlckdDOjpEZWZlckdDKToKKyAgICAg
ICAgKEpTQzo6RGVmZXJHQzo6fkRlZmVyR0MpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6Cisg
ICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRy
YU1lbW9yeUNvc3RTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RBbGxHYXJi
YWdlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6
OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0aCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRl
Y3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKToKKyAgICAgICAgKiBoZWFwL0hlYXAu
aDoKKyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjppc0NvbGxlY3RpbmcpOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICog
aml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAg
ICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgor
ICAgICAgICAoSlNDOjpMTEludDo6ZW50cnlPU1IpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJ
TlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVz
Lmg6CisgICAgICAgICogcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmg6CisgICAgICAg
IChKU0M6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKiBydW50
aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRleCk6CisgICAgICAgIChKU0M6OkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyk6CisgICAgICAgICogcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVyZSk6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cHJvcGVydHlUYWJsZSk6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgor
ICAgICAgICAoU3ltYm9sVGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAg
ICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKEpTQzo6
Vk06OnByZXBhcmVUb0Rpc2NhcmRDb2RlKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OlZNOjpkaXNjYXJkQWxsQ29kZSk6CisgICAgICAgIChKU0M6OlZNOjpyZWxlYXNlRXhlY3V0YWJs
ZU1lbW9yeSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKFZNKToKKwogMjAxMy0wNS0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCiAgICAgICAgIENoZWNrQXJyYXlzIHNob3VsZCBiZSBob2lzdGVkCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUwMzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAKIAkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMw
IC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5
VmFsdWVNYXAuY3BwICovOyB9OwogCQkwRjBEODVCMjE3MjM0NTU0MDAzMzgyMTAgLyogQ29kZUJs
b2NrTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYwRDg1QjExNzIzNDU1MTAwMzM4MjEwIC8qIENvZGVCbG9ja0xvY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBGQzQ1QTE0QkQxNUY1MDBC
ODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxM
aW5rSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQg
LyogRGVmZXJHQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMTM5MTI5MTY3NzFDMzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
MzkxMjQxNjc3MUMzMDAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgKi87
IH07CiAJCTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5
MTI1MTY3NzFDMzAwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzOTEyQjE2Nzcx
QzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOTEyNjE2NzcxQzMwMDA5Q0NC
MDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgKi87IH07CkBAIC0zMzEsNiArMzMy
LDkgQEAKIAkJMEZEQjJDRTAxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q4MTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdQbGFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEQjJDRTIxNzQ2QzFGQTAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNF
MTE3NDZDMUY4MDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFNDE3NDZDRTlGMDA3QjND
MUIgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTMxNzQ2Q0U5RDAwN0IzQzFCIC8qIENvbXBpbGF0aW9u
UmVzdWx0LmNwcCAqLzsgfTsKKwkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmts
aXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
REIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CisJCTBGREIy
Q0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERG
R1dvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFOTE3NDg5
NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi87IH07CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQjE0MzZBQjIz
MDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMDY4LDYgKzEwNzIsNyBAQAogCQkwRjBDRDRDMzE1RjZCNkI1MDAz
MkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYwRDg1QjExNzIzNDU1MTAwMzM4MjEwIC8qIENvZGVCbG9ja0xvY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVy
R0MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJHQy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzOTEyNDE2NzcxQzMwMDA5Q0NCMDcgLyogUHJvZmls
ZXJCeXRlY29kZVNlcXVlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxl
ckJ5dGVjb2RlU2VxdWVuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEz
OTEyNTE2NzcxQzMwMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oOyBw
YXRoID0gcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMTM5MTI2MTY3NzFDMzAwMDlDQ0IwNyAvKiBQcm9maWxlclByb2Zp
bGVkQnl0ZWNvZGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBy
b2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJQcm9m
aWxlZEJ5dGVjb2Rlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzM4LDYg
KzEzNDMsOSBAQAogCQkwRkRCMkNEODE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuLmg7IHBhdGggPSBkZmcvREZHUGxh
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNFMTE3NDZDMUY4MDA3QjND
MUIgLyogQ29tcGlsYXRpb25SZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25SZXN1
bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTMxNzQ2Q0U5RDAwN0Iz
QzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0
aW9uUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRTUxNzQ4
MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAv
KiBERkdXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3Jr
bGlzdC5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50SklUTG9jay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZH
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
REJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzQ0LDYgKzIzNTIsNyBAQAogCQkJCUMyMjM5RDEzMTYy
NjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovLAogCQkJCUMyMjM5RDE0MTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQlDMjE4RDEzRjE2NTVDRkQ1
MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggKi8sCisJCQkJMEYxMzZENEIxNzRBRDY5QjAwNzVC
MzU0IC8qIERlZmVyR0MuaCAqLywKIAkJCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZH
Q29kZUJsb2Nrcy5jcHAgKi8sCiAJCQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0Nv
ZGVCbG9ja3MuaCAqLywKIAkJCQlCQ0JFMkNBRDE0RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRp
b25zLmggKi8sCkBAIC0yNjMzLDYgKzI2NDIsNyBAQAogCQkJCTBGREIyQ0UxMTc0NkMxRjgwMDdC
M0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5oICovLAogCQkJCTk2OUEwOTIyMEVEMUUwOUMwMEYx
RjY4MSAvKiBDb21wbGV0aW9uLmNwcCAqLywKIAkJCQlGNUJCMkJDNTAzMEY3NzIxMDFGQ0ZFMUQg
LyogQ29tcGxldGlvbi5oICovLAorCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25j
dXJyZW50SklUTG9jay5oICovLAogCQkJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25z
dHJ1Y3REYXRhLmNwcCAqLywKIAkJCQlCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3Ry
dWN0RGF0YS5oICovLAogCQkJCUJDRDIwMzQ1MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3Ry
dWN0b3IuY3BwICovLApAQCAtMzAzMCw2ICszMDQwLDggQEAKIAkJCQkwRjg1QTMxRTE2QUI3NkFF
MDA3NzU3MUUgLyogREZHVmFyaWFkaWNGdW5jdGlvbi5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkw
OTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAog
CQkJCTBGRkZDOTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuaCAqLywKKwkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xp
c3QuY3BwICovLAorCQkJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5o
ICovLAogCQkJKTsKIAkJCW5hbWUgPSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMzQ0NSw2ICszNDU3LDcgQEAKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklU
VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyog
SklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNFQTE3NDg5
NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg0
MDQ4MDEzMTAyMUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyMzVCRTQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNTc2LDYgKzM1ODksNyBAQAogCQkJCUJDMThDNDNGMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBOb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDEwRTE2RjVDRDAw
QjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0
MjBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVyQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDQzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJPYmplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkQzOTM5MTAzRTQ1NjAwMDdEQ0I1MiAvKiBO
dW1lcmljU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzQ3LDYgKzM3NjEsNyBAQAogCQkJ
CTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjEzNkQ0RDE3NEFENjlFMDA3
NUIzNTQgLyogRGVmZXJHQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00MzY2LDYgKzQzODEsNyBAQAog
CQkJCTE0NDY5REU4MTA3RUM3RTcwMDY1MDQ0NiAvKiBQcm9wZXJ0eVNsb3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3NEMzM0MxNkFBMkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkRCMkNFNzE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29y
a2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8q
IFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMkExNzA5NjI5NjAw
QkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQw
Rjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAxNTAzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJERkdSZXBhdGNoLmgiCisjaW5jbHVk
ZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkZUTEpJ
VENvZGUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtMjE4MiwxMiArMjE4Myw2IEBA
IHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3QKICAgICBwZXJmb3JtVHJh
Y2luZ0ZpeHBvaW50SXRlcmF0aW9uKHZpc2l0b3IpOwogfQogCi0jaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSB0cnVlOwotI2Vs
c2UKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSBmYWxzZTsKLSNlbmRpZgot
CiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogewogI2lmIEVOQUJM
RShMTElOVCkKQEAgLTIyMDMsNyArMjE5OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgKICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX291dF9vZl9saW5l
OgogICAgICAgICAgICAgICAgIGlmICghY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUgfHwg
SGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlu
a2luZykKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHJvcGVydHkgYWNjZXNzIHdp
dGggc3RydWN0dXJlICVwLlxuIiwgY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCkp
OwogICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmNsZWFyKCk7
CiAgICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kID0gMDsKQEAgLTIy
MTYsNyArMjIxMSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgK
ICAgICAgICAgICAgICAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25bNl0u
dS5zdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAgICAgICAgICYmIEhlYXA6OmlzTWFya2Vk
KGN1ckluc3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCkpKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykgewor
ICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHB1dCB0cmFuc2l0aW9uIHdpdGggc3Ry
dWN0dXJlcyAlcCAtPiAlcCwgY2hhaW4gJXAuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlLmdldCgpLApAQCAtMjIz
Niw3ICsyMjMxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xsaW50Q2FsbExpbmtJbmZvcy5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLmlz
TGlua2VkKCkgJiYgIUhlYXA6OmlzTWFya2VkKG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLmNhbGxl
ZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAg
ICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJDbGVhcmluZyBMTEludCBjYWxsIGZyb20gIiwgKnRoaXMsICJcbiIpOwogICAg
ICAgICAgICAgICAgIG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLnVubGluaygpOwogICAgICAgICAg
ICAgfQpAQCAtMjI0OSw3ICsyMjQ0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5v
dCBsaXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlzb24uCiAgICAgaWYgKCEoc2hvdWxkSW1tZWRp
YXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigp
LT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5n
KQorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgZGF0YUxv
ZygqdGhpcywgIiBoYXMgZGVhZCB3ZWFrIHJlZmVyZW5jZXMsIGpldHRpc29uaW5nIGR1cmluZyBH
Qy5cbiIpOwogCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBiYXNlbGluZSBKSVQga25v
d3MgdGhhdCBpdCBzaG91bGQgcmUtd2FybS11cCBiZWZvcmUKQEAgLTIyODMsNyArMjI3OCw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogICAgIGZvciAoc2l6
ZV90IHNpemUgPSBtX3B1dFRvQmFzZU9wZXJhdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewogICAgICAgICBpZiAobV9wdXRUb0Jhc2VPcGVyYXRpb25zW2ldLm1fc3RydWN0dXJl
ICYmICFIZWFwOjppc01hcmtlZChtX3B1dFRvQmFzZU9wZXJhdGlvbnNbaV0ubV9zdHJ1Y3R1cmUu
Z2V0KCkpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xl
YXJpbmcgcHV0VG9CYXNlIGluZm8gaW4gIiwgKnRoaXMsICJcbiIpOwogICAgICAgICAgICAgbV9w
dXRUb0Jhc2VPcGVyYXRpb25zW2ldLm1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIH0KQEAg
LTIyOTcsNyArMjI5Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKICNlbmRpZgogICAgICAgICBtX3Jlc29sdmVPcGVyYXRpb25zW2ldLmxhc3QoKS5tX3N0cnVj
dHVyZS5jbGVhcigpOwogICAgICAgICBpZiAobV9yZXNvbHZlT3BlcmF0aW9uc1tpXS5sYXN0KCku
bV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fcmVzb2x2ZU9wZXJhdGlvbnNbaV0ubGFz
dCgpLm1fc3RydWN0dXJlLmdldCgpKSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtp
bmcpCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkNsZWFyaW5nIHJlc29sdmUgaW5mbyBpbiAiLCAqdGhpcywgIlxuIik7CiAg
ICAgICAgICAgICBtX3Jlc29sdmVPcGVyYXRpb25zW2ldLmxhc3QoKS5tX3N0cnVjdHVyZS5jbGVh
cigpOwogICAgICAgICB9CkBAIC0yMzEyLDcgKzIzMDcsNyBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgaWYgKENsb3N1cmVDYWxsU3R1
YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8oaSkuc3R1Yi5nZXQoKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHN0dWItPnN0cnVjdHVyZSgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHN0dWItPmV4ZWN1dGFibGUoKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIkNsZWFyaW5nIGNsb3N1cmUgY2FsbCBmcm9tICIsICp0aGlzLCAiIHRvICIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWItPmV4ZWN1dGFibGUoKS0+aGFzaEZvcihj
YWxsTGlua0luZm8oaSkuc3BlY2lhbGl6YXRpb25LaW5kKCkpLApAQCAtMjMyMSw3ICsyMzE2LDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFIZWFw
Ojppc01hcmtlZChjYWxsTGlua0luZm8oaSkuY2FsbGVlLmdldCgpKSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDbGVhcmluZyBjYWxsIGZyb20gIiwgKnRo
aXMsICIgdG8gIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYXdQb2ludGVyKGNhbGxM
aW5rSW5mbyhpKS5jYWxsZWUuZ2V0KCkpLCAiICgiLApAQCAtMjM2Miw3ICsyMzU3LDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJlcGF0YwogewogICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
OwogICAgIAotICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIHN0cnVjdHVyZSBjYWNoZSAoa2lu
ZCAiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpLCAiKSBpbiAiLCAqdGhp
cywgIi5cbiIpOwogCiAgICAgc3dpdGNoIChnZXRKSVRUeXBlKCkpIHsKQEAgLTI0MjcsNiArMjQy
Miw0MiBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAjZW5kaWYg
ICAgCiB9CiAKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQoreworI2lm
IEVOQUJMRShKSVQpCisgICAgLy8gV2hlbiB3ZSdyZSBpbml0aWFsaXppbmcgdGhlIG9yaWdpbmFs
IGJhc2VsaW5lIGNvZGUgYmxvY2ssIHdlIHdvbid0IGJlIGFibGUKKyAgICAvLyB0byBnZXQgaXRz
IHJlcGxhY2VtZW50LiBCdXQgd2UnbGwga25vdyB0aGF0IGl0J3MgdGhlIG9yaWdpbmFsIGJhc2Vs
aW5lIGNvZGUKKyAgICAvLyBibG9jayBiZWNhdXNlIGl0IHdvbid0IGhhdmUgSklUIGNvZGUgeWV0
IGFuZCBpdCB3b24ndCBoYXZlIGFuIGFsdGVybmF0aXZlLgorICAgIGlmIChnZXRKSVRUeXBlKCkg
PT0gSklUQ29kZTo6Tm9uZSAmJiAhYWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgCisgICAgQ29kZUJsb2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOworICAgIEFTU0VS
VChyZXN1bHQpOworICAgIHdoaWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkpCisgICAgICAgIHJl
c3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICBB
U1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUocmVzdWx0LT5nZXRKSVRUeXBlKCkpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCisj
aWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgp
Cit7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGdldEpJVFR5cGUoKSkpOwor
ICAgIGJvb2wgcmVzdWx0ID0gSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmdl
dEpJVFR5cGUoKSwgZ2V0SklUVHlwZSgpKTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSkp
OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUocmVw
bGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudCgp
ID09IHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKIEhhbmRs
ZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCkKIHsKICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMo
KS5zaXplKCkpOwpAQCAtMjk4Myw5ICszMDE0LDEyIEBAIGRvdWJsZSBDb2RlQmxvY2s6Om9wdGlt
aXphdGlvblRocmVzaG9sZFMKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25Db3VudCk7IC8vIE1ha2Ug
c3VyZSB0aGlzIGlzIGNhbGxlZCBvbmx5IGFmdGVyIHdlIGhhdmUgYW4gaW5zdHJ1Y3Rpb24gc3Ry
ZWFtOyBvdGhlcndpc2UgaXQnbGwganVzdCByZXR1cm4gdGhlIHZhbHVlIG9mIGQsIHdoaWNoIG1h
a2VzIG5vIHNlbnNlLgogICAgIAogICAgIGRvdWJsZSByZXN1bHQgPSBkICsgYSAqIHNxcnQoaW5z
dHJ1Y3Rpb25Db3VudCArIGIpICsgYyAqIGluc3RydWN0aW9uQ291bnQ7Ci0jaWYgRU5BQkxFKEpJ
VF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCp0aGlzLCAiOiBpbnN0cnVjdGlvbiBjb3VudCBp
cyAiLCBpbnN0cnVjdGlvbkNvdW50LCAiLCBzY2FsaW5nIGV4ZWN1dGlvbiBjb3VudGVyIGJ5ICIs
IHJlc3VsdCwgIiAqICIsIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpLCAiXG4iKTsKLSNl
bmRpZgorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICp0aGlzLCAiOiBpbnN0cnVjdGlvbiBjb3VudCBpcyAiLCBpbnN0cnVjdGlv
bkNvdW50LAorICAgICAgICAgICAgIiwgc2NhbGluZyBleGVjdXRpb24gY291bnRlciBieSAiLCBy
ZXN1bHQsICIgKiAiLCBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSwKKyAgICAgICAgICAg
ICJcbiIpOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0ICogY29kZVR5cGVUaHJlc2hvbGRNdWx0
aXBsaWVyKCk7CiB9CiAKQEAgLTMwMjYsMzQgKzMwNjAsOTAgQEAgaW50MzJfdCBDb2RlQmxvY2s6
OmNvdW50ZXJWYWx1ZUZvck9wdGltaQogCiBib29sIENvZGVCbG9jazo6Y2hlY2tJZk9wdGltaXph
dGlvblRocmVzaG9sZFJlYWNoZWQoKQogeworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICht
X3ZtLT53b3JrbGlzdAorICAgICAgICAmJiBtX3ZtLT53b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0
ZSh0aGlzKSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICBvcHRpbWl6ZU5l
eHRJbnZvY2F0aW9uKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorICAg
IAogICAgIHJldHVybiBtX2ppdEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2Vk
QW5kU2V0KHRoaXMpOwogfQogCiB2b2lkIENvZGVCbG9jazo6b3B0aW1pemVOZXh0SW52b2NhdGlv
bigpCiB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygq
dGhpcywgIjogT3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uXG4iKTsKICAgICBtX2ppdEV4ZWN1
dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwLCB0aGlzKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6
OmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkKIHsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBOb3Qgb3B0aW1pemluZyBhbnl0aW1lIHNv
b24uXG4iKTsKICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7CiB9
CiAKIHZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyV2FybVVwKCkKIHsKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5n
IGFmdGVyIHdhcm0tdXAuXG4iKTsKICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVz
aG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCksIHRoaXMpOwogfQogCiB2
b2lkIENvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQogeworICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcg
YWZ0ZXIgbG9uZyB3YXJtLXVwLlxuIik7CiAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQoY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSwgdGhpcyk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZVNvb24oKQogeworICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgc29v
bi5cbiIpOwogICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKGNvdW50ZXJW
YWx1ZUZvck9wdGltaXplU29vbigpLCB0aGlzKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OmZvcmNl
T3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoKQoreworICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IEZvcmNpbmcgc2xvdyBwYXRo
IGNvbmN1cnJlbnRseS5cbiIpOworICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuZm9yY2VTbG93UGF0
aENvbmN1cnJlbnRseSgpOworfQorCit2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpOworICAgIFJFTEVBU0VfQVNTRVJUKChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVs
KSA9PSAocmVwbGFjZW1lbnQoKSAhPSB0aGlzKSk7CisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAg
ICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSkpOworICAg
ICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29tcGlsYXRpb25GYWlsZWQ6CisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcGlsYXRpb25EZWZlcnJlZDoKKyAgICAgICAgLy8g
V2UnZCBsaWtlIHRvIGRvIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkgYnV0IHdlIGNhbm5vdCBi
ZWNhdXNlCisgICAgICAgIC8vIGZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHko
KSBpcyBpbmhlcmVudGx5IHJhY3kuIEl0IHdvbid0CisgICAgICAgIC8vIG5lY2Vzc2FyaWx5IGd1
YXJhbnRlZSBhbnl0aGluZy4gU28sIHdlIG1ha2Ugc3VyZSB0aGF0IGV2ZW4gaWYgdGhhdAorICAg
ICAgICAvLyBmdW5jdGlvbiBlbmRzIHVwIGJlaW5nIGEgbm8tb3AsIHdlIHN0aWxsIGV2ZW50dWFs
bHkgcmV0cnkgYW5kIHJlYWxpemUKKyAgICAgICAgLy8gdGhhdCB3ZSBoYXZlIG9wdGltaXplZCBj
b2RlIHJlYWR5LgorICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gUmV0cnkgd2l0
aCBleHBvbmVudGlhbCBiYWNrb2ZmLgorICAgICAgICBjb3VudFJlb3B0aW1pemF0aW9uKCk7Cisg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCiAjaWYgRU5BQkxFKEpJVCkKIHVpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0
ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKIHsKQEAgLTMx
MTIsNyArMzIwMiw3IEBAIEFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRPckFkZEFycmF5UHIK
IHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MoCiAg
ICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24sIHVuc2lnbmVkJiBudW1iZXJPZkxpdmVO
b25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2Zp
bGVzKQogewotICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1fbG9jayk7CisgICAgQ29kZUJsb2Nr
TG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAogICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50
VmFsdWVQcm9maWxlcyA9IDA7CiAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyA9IDA7IC8v
IElmIHRoaXMgZGl2aWRlZCBieSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyBlcXVhbHMg
bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgdGhlbiB2YWx1ZSBwcm9maWxlcyBhcmUgZnVsbC4KQEAg
LTMxNDQsNyArMzIzNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmUKIAogdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoT3BlcmF0aW9u
SW5Qcm9ncmVzcyBvcGVyYXRpb24pCiB7Ci0gICAgQ29kZUJsb2NrTG9jayBsb2NrZXIobV9sb2Nr
KTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9hcnJh
eVByb2ZpbGVzW2ldLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIHRoaXMsIG9wZXJh
dGlvbik7CkBAIC0zMTYyLDkgKzMyNTIsOCBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJl
ZGljdGlvbnMoT3BlCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB7Ci0j
aWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBvcHRp
bWl6aW5nICIsICp0aGlzLCAiLi4uXG4iKTsKLSNlbmRpZgorICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgIiwgKnRo
aXMsICIuLi5cbiIpOwogCiAjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKICAgICBk
dW1wVmFsdWVQcm9maWxlcygpOwpAQCAtMzE3OSw5ICszMjY4LDE0IEBAIGJvb2wgQ29kZUJsb2Nr
OjpzaG91bGRPcHRpbWl6ZU5vdygpCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlczsKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MoTm9PcGVyYXRp
b24sIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZTYW1wbGVz
SW5Qcm9maWxlcyk7CiAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2dG
KCJQcm9maWxlIGhvdG5lc3M6ICVsZiAoJXUgLyAldSksICVsZiAoJXUgLyAldSlcbiIsIChkb3Vi
bGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCksIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCksIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCksIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMsIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzICogbnVt
YmVyT2ZWYWx1ZVByb2ZpbGVzKCkpOwotI2VuZGlmCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkgeworICAgICAgICBkYXRhTG9nRigKKyAgICAgICAgICAgICJQcm9maWxlIGhvdG5lc3M6
ICVsZiAoJXUgLyAldSksICVsZiAoJXUgLyAldSlcbiIsCisgICAgICAgICAgICAoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxl
cygpLAorICAgICAgICAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZTYW1w
bGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCksCisgICAgICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzLCBW
YWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAqIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsK
KyAgICB9CiAKICAgICBpZiAoKCFudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxl
cygpID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCiAgICAgICAgICYm
ICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIHRvdGFsTnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDE1MDM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDI1ICsxMzEsNyBAQCBjbGFzcyBDb2RlQmxvY2sg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvCiAgICAgICAgICAgICByZXR1cm4gc3BlY2lhbGl6YXRp
b25Gcm9tSXNDb25zdHJ1Y3QobV9pc0NvbnN0cnVjdG9yKTsKICAgICAgICAgfQogICAgICAgICAK
LSNpZiBFTkFCTEUoSklUKQotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lvbigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShnZXRKSVRU
eXBlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgQ29kZUJs
b2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOwotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7
Ci0gICAgICAgICAgICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQpOwotICAgICAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlc3Vs
dC0+Z2V0SklUVHlwZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0jZWxzZQotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lvbigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsKIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CiAKQEAgLTMwNywxMiArMjg5LDcgQEAgY2xhc3MgQ29kZUJsb2NrIDog
cHVibGljIFRocmVhZFNhZmVSZWZDbwogICAgICAgICAgICAgICAgIEFTU0VSVChnZXRKSVRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgICAgICAgICAgICAgIHJldHVybiBDb21w
aWxhdGlvbk5vdE5lZWRlZDsKICAgICAgICAgICAgIH0KLSNpZiBFTkFCTEUoSklUKQogICAgICAg
ICAgICAgcmV0dXJuIGppdENvbXBpbGVJbXBsKGV4ZWMpOwotI2Vsc2UKLSAgICAgICAgICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsK
LSNlbmRpZgogICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpID0gMDsKIApAQCAtMzI1LDIwICszMDIsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvCiAgICAgICAgIH0KICAgICAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZVdpdGhERkdTdGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0
ZTsgfQogCi0gICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoZ2V0SklUVHlwZSgp
KSk7Ci0gICAgICAgICAgICBib29sIHJlc3VsdCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBs
YWNlbWVudCgpLT5nZXRKSVRUeXBlKCksIGdldEpJVFR5cGUoKSk7Ci0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSkpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxp
bmVDb2RlKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSkpOwotICAgICAgICAgICAgICAgIEFT
U0VSVChyZXBsYWNlbWVudCgpID09IHRoaXMpOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9CisgICAgICAgIGJvb2wgaGFzT3B0aW1p
emVkUmVwbGFjZW1lbnQoKTsKICNlbHNlCiAgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklU
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEpJVENvZGU6OkJhc2VsaW5lSklUOyB9CiAjZW5kaWYKQEAg
LTg2NSw2ICs4MjksMTAgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZD
bwogICAgICAgICAvLyB0byB0cmlnZ2VyIG9wdGltaXphdGlvbiBpZiBvbmUgb2YgdGhvc2UgZnVu
Y3Rpb25zIGJlY29tZXMgaG90CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAg
ICAgICB2b2lkIG9wdGltaXplU29vbigpOworICAgIAorICAgICAgICB2b2lkIGZvcmNlT3B0aW1p
emF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKKyAgICAKKyAgICAgICAgdm9pZCBzZXRPcHRp
bWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1
bHQpOwogICAgICAgICAKICAgICAgICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7
IHJldHVybiBtX29zckV4aXRDb3VudGVyOyB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrTG9jay5oCShyZXZpc2lvbiAxNTAzOTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrTG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxOCArMjYsMTIgQEAKICNpZm5kZWYgQ29kZUJsb2NrTG9ja19oCiAj
ZGVmaW5lIENvZGVCbG9ja0xvY2tfaAogCi0jaW5jbHVkZSA8d3RmL0J5dGVTcGluTG9jay5oPgot
I2luY2x1ZGUgPHd0Zi9Ob0xvY2suaD4KKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJVCkKLXR5cGVkZWYg
Qnl0ZVNwaW5Mb2NrIENvZGVCbG9ja0xvY2s7Ci10eXBlZGVmIEJ5dGVTcGluTG9ja2VyIENvZGVC
bG9ja0xvY2tlcjsKLSNlbHNlCi10eXBlZGVmIE5vTG9jayBDb2RlQmxvY2tMb2NrOwotdHlwZWRl
ZiBOb0xvY2tMb2NrZXIgQ29kZUJsb2NrTG9ja2VyOwotI2VuZGlmCit0eXBlZGVmIENvbmN1cnJl
bnRKSVRMb2NrIENvZGVCbG9ja0xvY2s7Cit0eXBlZGVmIENvbmN1cnJlbnRKSVRMb2NrZXIgQ29k
ZUJsb2NrTG9ja2VyOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNp
b24gMTUwMzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNv
dW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMSBAQCBFeGVjdXRpb25Db3Vu
dGVyOjpFeGVjdXRpb25Db3VudGVyKCkKICAgICByZXNldCgpOwogfQogCit2b2lkIEV4ZWN1dGlv
bkNvdW50ZXI6OmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKQoreworICAgIG1fY291bnRlciA9
IDA7Cit9CisKIGJvb2wgRXhlY3V0aW9uQ291bnRlcjo6Y2hlY2tJZlRocmVzaG9sZENyb3NzZWRB
bmRTZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaWYgKGhhc0Nyb3NzZWRUaHJlc2hv
bGQoY29kZUJsb2NrKSkKQEAgLTEyNCwxMSArMTI5LDExIEBAIGJvb2wgRXhlY3V0aW9uQ291bnRl
cjo6c2V0VGhyZXNob2xkKENvZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAg
ICAgCi0gICAgQVNTRVJUKCFoYXNDcm9zc2VkVGhyZXNob2xkKGNvZGVCbG9jaykpOworICAgIEFT
U0VSVCghbV9hY3RpdmVUaHJlc2hvbGQgfHwgIWhhc0Nyb3NzZWRUaHJlc2hvbGQoY29kZUJsb2Nr
KSk7CiAgICAgICAgIAogICAgIC8vIENvbXB1dGUgdGhlIHRydWUgdG90YWwgY291bnQuCiAgICAg
ZG91YmxlIHRydWVUb3RhbENvdW50ID0gY291bnQoKTsKLSAgICAgICAgCisgICAgCiAgICAgLy8g
Q29ycmVjdCB0aGUgdGhyZXNob2xkIGZvciBjdXJyZW50IG1lbW9yeSB1c2FnZS4KICAgICBkb3Vi
bGUgdGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3MobV9hY3RpdmVUaHJlc2hv
bGQsIGNvZGVCbG9jayk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCShyZXZpc2lvbiAxNTAzOTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEV4ZWN1dGlv
bkNvdW50ZXIgewogcHVibGljOgogICAgIEV4ZWN1dGlvbkNvdW50ZXIoKTsKKyAgICB2b2lkIGZv
cmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsgLy8gSWYgeW91IHVzZSB0aGlzLCBjaGVja0lmVGhy
ZXNob2xkQ3Jvc3NlZEFuZFNldCgpIG1heSBzdGlsbCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBj
aGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqKTsKICAgICB2b2lkIHNldE5l
d1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CiAgICAgdm9pZCBkZWZl
ckluZGVmaW5pdGVseSgpOwpAQCAtNzQsNyArNzUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVz
ZXQoKTsKIAogcHVibGljOgotCiAgICAgLy8gTkIuIFRoZXNlIGFyZSBpbnRlbnRpb25hbGx5IHB1
YmxpYyBiZWNhdXNlIGl0IHdpbGwgYmUgbW9kaWZpZWQgZnJvbSBtYWNoaW5lIGNvZGUuCiAgICAg
CiAgICAgLy8gVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIGJ5IHRoZSBKSVQgb3IgTExJbnQu
IEl0IHN0YXJ0cyBvdXQgbmVnYXRpdmUgYW5kIGlzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE1MDM5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw2ICsxMTgsOCBAQCB2b2lkIERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWCiAg
ICAgQVNTRVJUKCF2bS0+ZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgaWYgKHZtLT5keW5hbWlj
R2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CisgICAgCisgICAgdm0tPnByZXBhcmVUb0Rp
c2NhcmRDb2RlKCk7CiAKICAgICBSZWNvbXBpbGVyIHJlY29tcGlsZXIodGhpcyk7CiAgICAgdm0t
PmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoTGl2ZUNlbGwocmVjb21waWxlcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTUwMzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw3ICsyNzAsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NF
UlQobm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4ID09IG1fY3VycmVudEluZGV4KTsKLSAg
ICAgICAgQ29kZUJsb2NrTG9jayBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5sb2NhbCgpKTsKICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJh
bmRzLnByZWRpY3Rpb24obG9ja2VyLCBrZXkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKQEAgLTg0Myw3ICs4NDMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIEFycmF5TW9kZSBnZXRB
cnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbikKICAg
ICB7Ci0gICAgICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jayk7CiAgICAgICAgIHJldHVybiBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2Nr
ZXIsIHByb2ZpbGUsIGFjdGlvbiwgZmFsc2UpOwogICAgIH0KQEAgLTg1NSw3ICs4NTUsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFy
cmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIE5vZGUqIGJhc2UpCiAg
ICAgewotICAgICAgICBDb2RlQmxvY2tMb2NrIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICAKICAgICAg
ICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE1MDM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw2ICsxNTQsMTUgQEAg
aW5saW5lIGJvb2wgdmFsaWRhdGlvbkVuYWJsZWQoKQogI2VuZGlmCiB9CiAKK2lubGluZSBib29s
IGVuYWJsZUNvbmN1cnJlbnRKSVQoKQoreworI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJVCkKKyAg
ICByZXR1cm4gT3B0aW9uczo6ZW5hYmxlQ29uY3VycmVudEpJVCgpOworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKK30KKwogZW51bSBTcGlsbFJlZ2lzdGVyc01vZGUgeyBOZWVkVG9T
cGlsbCwgRG9udFNwaWxsIH07CiAKIGVudW0gTm9SZXN1bHRUYWcgeyBOb1Jlc3VsdCB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTUwMzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxMSArMzUsMTMgQEAKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgorI2luY2x1ZGUgIkRGR1dvcmts
aXN0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiU2Ft
cGxpbmdUb29sLmgiCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCkBAIC02NiwxOSArNjgsMjEgQEAgc3RhdGljIENvbXBpbGF0aW9u
UmVzdWx0IGNvbXBpbGUoQ29tcGlsZQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7
CiAgICAgCiAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQotICAgICAgICBkYXRhTG9n
KCJERkcgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMg
PSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CisgICAgICAgIGRhdGFM
b2coIkRGRyhEcml2ZXIpIGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5z
dHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOworICAg
IAorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
YW55IHN0dWJzIHRoYXQgdGhlIERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBX
ZSB3YW50IHRvCiAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWwgSklUIGNvZGUgZ2VuZXJhdGlvbiBk
b2VzIGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgZXhlYy0+dm0oKS5nZXRD
VElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwotICAgIGV4ZWMtPnZtKCku
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwotICAg
IGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICBleGVj
LT52bSgpLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKLSAgICBleGVj
LT52bSgpLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIGV4
ZWMtPnZtKCkuZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICBleGVj
LT52bSgpLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKKyAgICB2
bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOworICAgIHZtLmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKKyAgICB2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIo
bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKGxpbmtDbG9z
dXJlQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1
bmtHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKTsKICNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBleGVjLT52bSgpLmdldENUSVN0dWIo
RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHVi
KEZUTDo6b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAjZW5kaWYKICAgICAKICAg
ICAvLyBEZXJpdmUgb3VyIHNldCBvZiBtdXN0LWhhbmRsZSB2YWx1ZXMuIFRoZSBjb21waWxhdGlv
biBtdXN0IGJlIGF0IGxlYXN0IGNvbnNlcnZhdGl2ZQpAQCAtMTA1LDcgKzEwOSwxNiBAQCBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxlCiAgICAgICAgICAgICBwbGFuLT5t
dXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7
CiAgICAgfQogICAgIAotICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZCgpOworICAgIGlmIChlbmFi
bGVDb25jdXJyZW50SklUKCkpIHsKKyAgICAgICAgaWYgKCF2bS53b3JrbGlzdCkKKyAgICAgICAg
ICAgIHZtLndvcmtsaXN0ID0gZ2xvYmFsV29ya2xpc3QoKTsKKyAgICAgICAgaWYgKGxvZ0NvbXBp
bGF0aW9uQ2hhbmdlcygpKQorICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyaW5nIERGRyBjb21w
aWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHdpdGggcXVldWUgbGVuZ3RoICIsIHZtLndvcmts
aXN0LT5xdWV1ZUxlbmd0aCgpLCAiLlxuIik7CisgICAgICAgIHZtLndvcmtsaXN0LT5lbnF1ZXVl
KHBsYW4pOworICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25EZWZlcnJlZDsKKyAgICB9CisgICAg
CisgICAgcGxhbi0+Y29tcGlsZUluVGhyZWFkKCp2bS5kZmdTdGF0ZSk7CiAgICAgcmV0dXJuIHBs
YW4tPmZpbmFsaXplKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTAzOTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDQsMTIgKzQ0LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAjdW5k
ZWYgU1RSSU5HSVpFX0RGR19PUF9FTlVNCiB9OwogCi1HcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFu
JiBwbGFuKQorR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdmVkU3RhdGUm
IGxvbmdMaXZlZFN0YXRlKQogICAgIDogbV92bSh2bSkKICAgICAsIG1fcGxhbihwbGFuKQogICAg
ICwgbV9jb2RlQmxvY2sobV9wbGFuLmNvZGVCbG9jay5nZXQoKSkKICAgICAsIG1fcHJvZmlsZWRC
bG9jayhtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKLSAgICAsIG1fYWxsb2NhdG9yKHZtLm1f
ZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQorICAgICwgbV9hbGxvY2F0b3IobG9uZ0xpdmVkU3RhdGUu
bV9hbGxvY2F0b3IpCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhmYWxzZSkKICAgICAsIG1fZml4cG9p
bnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKICAgICAsIG1fZm9ybShMb2FkU3RvcmUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTAzOTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcg
KzkwLDcgQEAgZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2Rl
YWQnIHJlbWFpbiBpbiB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIHsK
IHB1YmxpYzoKLSAgICBHcmFwaChWTSYsIFBsYW4mKTsKKyAgICBHcmFwaChWTSYsIFBsYW4mLCBM
b25nTGl2ZWRTdGF0ZSYpOwogICAgIH5HcmFwaCgpOwogICAgIAogICAgIHZvaWQgY2hhbmdlQ2hp
bGQoRWRnZSYgZWRnZSwgTm9kZSogbmV3Tm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNTAzOTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTcgKzQ1
LDE4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpOwogICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogCi0jaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCJPU1IgaW4gIiwgKmNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLCAiIGZyb20gYmMjIiwgYnl0ZWNv
ZGVJbmRleCwgIlxuIik7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7
CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT1NSIGluICIsICpjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAgICIgZnJvbSBiYyMi
LCBieXRlY29kZUluZGV4LCAiXG4iKTsKKyAgICB9CiAgICAgCiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgp
LT5kZmcoKS0+b3NyRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAg
ICAKICAgICBpZiAoIWVudHJ5KSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAg
ICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIGVudHJ5cG9pbnQgd2FzIG9w
dGltaXplZCBvdXQuXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQorICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIGVu
dHJ5cG9pbnQgd2FzIG9wdGltaXplZCBvdXQuXG4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIApAQCAtODcsMTEgKzg4LDExIEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3Rh
dGUqIGV4ZWMsIEMKICAgICAKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVu
dCkgewogICAgICAgICBpZiAoYXJndW1lbnQgPj0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSkgewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRh
TG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAlenUgd2FzIG5vdCBwYXNzZWQs
IGV4cGVjdGVkICIsIGFyZ3VtZW50KTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFs
dWVzLmFyZ3VtZW50KGFyZ3VtZW50KS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAg
ICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVj
YXVzZSBhcmd1bWVudCAlenUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICIsIGFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVu
dCkuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4i
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAg
ICAgIApAQCAtMTAyLDkgKzEwMywxMSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAgICAgICAgICAgICB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZ3VtZW50IC0g
MSk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3Vt
ZW50KGFyZ3VtZW50KS52YWxpZGF0ZSh2YWx1ZSkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVu
dCAiLCBhcmd1bWVudCwgIiBpcyAiLCB2YWx1ZSwgIiwgZXhwZWN0ZWQgIiwgZW50cnktPm1fZXhw
ZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLCAiLlxuIik7Ci0jZW5kaWYKKyAgICAgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KAorICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAi
LCBhcmd1bWVudCwgIiBpcyAiLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0
ZWQgIiwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLCAiLlxuIik7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0K
QEAgLTExMiwxNyArMTE1LDIyIEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4
ZWMsIEMKICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZW50cnktPm1fZXhwZWN0
ZWRWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogICAgICAgICBpZiAoZW50cnkt
Pm1fbG9jYWxzRm9yY2VkRG91YmxlLmdldChsb2NhbCkpIHsKICAgICAgICAgICAgIGlmICghZXhl
Yy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKS5pc051bWJlcigpKSB7Ci0jaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxl
ZCBiZWNhdXNlIHZhcmlhYmxlICIsIGxvY2FsLCAiIGlzICIsIGV4ZWMtPnJlZ2lzdGVycygpW2xv
Y2FsXS5qc1ZhbHVlKCksICIsIGV4cGVjdGVkIG51bWJlci5cbiIpOwotI2VuZGlmCisgICAgICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1
c2UgdmFyaWFibGUgIiwgbG9jYWwsICIgaXMgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCksICIsIGV4cGVjdGVkIG51bWJlci5cbiIp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICghZW50
cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLnZhbGlkYXRlKGV4ZWMtPnJlZ2lzdGVy
cygpW2xvY2FsXS5qc1ZhbHVlKCkpKSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9j
YWwsICIgaXMgIiwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSwgIiwgZXhwZWN0
ZWQgIiwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLCAiLlxuIik7Ci0jZW5k
aWYKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSB2YXJpYWJsZSAiLCBsb2NhbCwgIiBpcyAiLAorICAgICAgICAgICAgICAgICAgICBleGVjLT5y
ZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLCAiLCBleHBlY3RlZCAiLAorICAgICAgICAgICAg
ICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCksICIuXG4iKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAt
MTM1LDE1ICsxNDMsMTMgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywg
QwogICAgIC8vICAgIHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGp1c3Qga2VwdCBydW5uaW5nIGFsYmVp
dCBsZXNzIHF1aWNrbHkuCiAgICAgCiAgICAgaWYgKCF2bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCku
Z3JvdygmZXhlYy0+cmVnaXN0ZXJzKClbY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyc10p
KSB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0YoIiAgICBP
U1IgZmFpbGVkIGJlY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwotI2VuZGlmCisgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nRigiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRh
dGFMb2dGKCIgICAgT1NSIHNob3VsZCBzdWNjZWVkLlxuIik7Ci0jZW5kaWYKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBzaG91bGQgc3Vj
Y2VlZC5cbiIpOwogICAgIAogICAgIC8vIDMpIFBlcmZvcm0gZGF0YSBmb3JtYXQgY29udmVyc2lv
bnMuCiAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVk
VmFsdWVzLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKQEAgLTE1OSw5ICsxNjUsOCBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgdm9pZCog
cmVzdWx0ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZz
ZXQoZW50cnktPm1fbWFjaGluZUNvZGVPZmZzZXQpOwogICAgIAotI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCi0gICAgZGF0YUxvZ0YoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBh
ZGRyZXNzICVwLlxuIiwgcmVzdWx0KTsKLSNlbmRpZgorICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCisgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHJldHVybmluZyBtYWNoaW5lIGNvZGUg
YWRkcmVzcyAlcC5cbiIsIHJlc3VsdCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKICNlbHNl
IC8vIERGR19FTkFCTEUoT1NSX0VOVFJZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTAzOTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg2LDkg
KzE2ODYsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAKIGV4
dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRh
dGFMb2coKmNvZGVCbG9jaywgIjogRW50ZXJlZCByZW9wdGltaXplXG4iKTsKLSNlbmRpZgorICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywg
IjogRW50ZXJlZCByZW9wdGltaXplXG4iKTsKICAgICAvLyBXZSBtdXN0IGJlIGNhbGxlZCB3aXRo
IHRoZSBiYXNlbGluZSBjb2RlIGJsb2NrLgogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5l
Q29kZShjb2RlQmxvY2stPmdldEpJVFR5cGUoKSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1MDM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgUGxh
bjo6UGxhbigKICAgICAsIG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcnNXaXRoVmFsdWVzKQogICAgICwgY29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgp
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0
aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29k
ZXNGb3IoY29kZUJsb2NrLmdldCgpKSwgUHJvZmlsZXI6OkRGRykpIDogMCkKICAgICAsIGlkZW50
aWZpZXJzKGNvZGVCbG9jay5nZXQoKSkKKyAgICAsIGlzQ29tcGlsZWQoZmFsc2UpCiB7CiB9CiAK
QEAgLTg1LDEyICs4NiwxNSBAQCBQbGFuOjp+UGxhbigpCiB7CiB9CiAKLXZvaWQgUGxhbjo6Y29t
cGlsZUluVGhyZWFkKCkKK3ZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXRl
JiBsb25nTGl2ZWRTdGF0ZSkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIENvbXBpbGF0aW9uIChQbGFuKSIpOwogICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGlsYXRp
b25TY29wZTsKIAotICAgIEdyYXBoIGRmZyh2bSwgKnRoaXMpOworICAgIGlmIChsb2dDb21waWxh
dGlvbkNoYW5nZXMoKSkKKyAgICAgICAgZGF0YUxvZygiREZHKFBsYW4pIGNvbXBpbGluZyAiLCAq
Y29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkNvdW50KCksICJcbiIpOworCisgICAgR3JhcGggZGZnKHZtLCAqdGhpcywgbG9uZ0xp
dmVkU3RhdGUpOwogICAgIAogICAgIGlmICghcGFyc2UoZGZnKSkgewogICAgICAgICBmaW5hbGl6
ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKCp0aGlzKSk7CkBAIC0xOTksNiArMjAz
LDExIEBAIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplKFJlZlB0cjwKICAgICByZXR1
cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCitDb2RlQmxvY2sqIFBsYW46OmtleSgpCit7
CisgICAgcmV0dXJuIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTUwMzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAg
Y2xhc3MgQ29kZUJsb2NrOwogCiBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgTG9uZ0xpdmVkU3Rh
dGU7CisKIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9
OwogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC01MywxMCArNTUsMTIgQEAgc3RydWN0IFBsYW4g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgICAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5
dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKICAgICB+UGxhbigpOwog
ICAgIAotICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCk7CisgICAgdm9pZCBjb21waWxlSW5UaHJl
YWQoTG9uZ0xpdmVkU3RhdGUmKTsKICAgICAKICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6
ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogICAgIAorICAgIENvZGVCbG9jayoga2V5KCk7CisgICAg
CiAgICAgY29uc3QgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGU7CiAgICAgVk0mIHZtOwogICAgIFJl
ZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKQEAgLTcxLDYgKzc1LDggQEAgc3RydWN0IFBsYW4g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIERlc2lyZWRXYXRjaHBvaW50cyB3YXRj
aHBvaW50czsKICAgICBEZXNpcmVkSWRlbnRpZmllcnMgaWRlbnRpZmllcnM7CiAgICAgRGVzaXJl
ZFN0cnVjdHVyZUNoYWlucyBjaGFpbnM7CisgICAgCisgICAgYm9vbCBpc0NvbXBpbGVkOwogCiBw
cml2YXRlOgogICAgIGJvb2wgaXNTdGlsbFZhbGlkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJEZWZlckdDLmgiCisj
aW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitXb3JrbGlzdDo6V29ya2xpc3QoKQoreworfQorCitXb3JrbGlzdDo6fldvcmts
aXN0KCkKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZChudWxscHRyKTsgLy8gVXNlIG51bGwgcGxhbiB0
byBpbmRpY2F0ZSB0aGF0IHdlIHdhbnQgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUuCisgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWQpOworfQorCit2b2lkIFdvcmtsaXN0OjpmaW5p
c2hDcmVhdGlvbigpCit7CisgICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQodGhyZWFkRnVuY3Rp
b24sIHRoaXMsICJKU0MgQ29tcGlsYXRpb24gVGhyZWFkIik7Cit9CisKK1Bhc3NSZWZQdHI8V29y
a2xpc3Q+IFdvcmtsaXN0OjpjcmVhdGUoKQoreworICAgIFJlZlB0cjxXb3JrbGlzdD4gcmVzdWx0
ID0gYWRvcHRSZWYobmV3IFdvcmtsaXN0KCkpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24o
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdvcmtsaXN0OjplbnF1ZXVlKFBhc3NS
ZWZQdHI8UGxhbj4gcGFzc2VkUGxhbikKK3sKKyAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IHBhc3Nl
ZFBsYW47CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAgICAgICAgZHVtcChsb2NrZXIsIFdURjo6
ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIjogRW5xdWV1ZWluZyBwbGFuIHRvIG9wdGlt
aXplICIsICpwbGFuLT5rZXkoKSwgIlxuIik7CisgICAgfQorICAgIEFTU0VSVChtX3BsYW5zLmZp
bmQocGxhbi0+a2V5KCkpID09IG1fcGxhbnMuZW5kKCkpOworICAgIG1fcGxhbnMuYWRkKHBsYW4t
PmtleSgpLCBwbGFuKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsKKyAgICBtX2NvbmRpdGlv
bi5icm9hZGNhc3QoKTsKK30KKworV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21waWxhdGlv
blN0YXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaykKK3sKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICBQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5maW5kKHBy
b2ZpbGVkQmxvY2spOworICAgIGlmIChpdGVyID09IG1fcGxhbnMuZW5kKCkpCisgICAgICAgIHJl
dHVybiBOb3RLbm93bjsKKyAgICByZXR1cm4gaXRlci0+dmFsdWUtPmlzQ29tcGlsZWQgPyBDb21w
aWxlZCA6IENvbXBpbGluZzsKK30KKwordm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNG
b3JWTUFyZVJlYWR5KFZNJiB2bSkKK3sKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Cisg
ICAgLy8gV2FpdCBmb3IgYWxsIG9mIHRoZSBwbGFucyBmb3IgdGhlIGdpdmVuIFZNIHRvIGNvbXBs
ZXRlLiBUaGUgaWRlYSBoZXJlCisgICAgLy8gaXMgdGhhdCB3ZSB3YW50IGFsbCBvZiB0aGUgY2Fs
bGVyIFZNJ3MgcGxhbnMgdG8gYmUgZG9uZS4gV2UgZG9uJ3QgY2FyZQorICAgIC8vIGFib3V0IGFu
eSBvdGhlciBWTSdzIHBsYW5zLCBhbmQgd2Ugd29uJ3QgYXR0ZW1wdCB0byB3YWl0IG9uIHRob3Nl
LgorICAgIC8vIEFmdGVyIHdlIHJlbGVhc2UgdGhpcyBsb2NrLCB3ZSBrbm93IHRoYXQgYWx0aG91
Z2ggb3RoZXIgVk1zIG1heSBzdGlsbAorICAgIC8vIGJlIGFkZGluZyBwbGFucywgb3VyIFZNIHdp
bGwgbm90IGJlLgorICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAor
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7CisgICAgICAgIGR1
bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCI6IFdhaXRpbmcg
Zm9yIGFsbCBpbiBWTSB0byBjb21wbGV0ZS5cbiIpOworICAgIH0KKyAgICAKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIGJvb2wgYWxsQXJlQ29tcGlsZWQgPSB0cnVlOworICAgICAgICBQbGFuTWFw
OjppdGVyYXRvciBlbmQgPSBtX3BsYW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsYW5NYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgIGlmICgmaXRlci0+dmFsdWUtPnZtICE9ICZ2bSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUtPmlzQ29tcGlsZWQpIHsKKyAg
ICAgICAgICAgICAgICBhbGxBcmVDb21waWxlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYWxs
QXJlQ29tcGlsZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIG1fY29u
ZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya2xpc3Q6OnJlbW92ZUFs
bFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIFZlY3RvcjxSZWZQdHI8UGxhbj4sIDg+JiBteVJlYWR5
UGxhbnMpCit7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWFkeVBsYW5z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9yZWFkeVBsYW5z
W2ldOworICAgICAgICBpZiAoJnBsYW4tPnZtICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoIXBsYW4tPmlzQ29tcGlsZWQpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgbXlSZWFkeVBsYW5zLmFwcGVuZChwbGFuKTsKKyAgICAgICAgbV9yZWFkeVBsYW5z
W2ktLV0gPSBtX3JlYWR5UGxhbnMudGFrZUxhc3QoKTsKKyAgICAgICAgbV9wbGFucy5yZW1vdmUo
cGxhbi0+a2V5KCkpOworICAgIH0KK30KKwordm9pZCBXb3JrbGlzdDo6cmVtb3ZlQWxsUmVhZHlQ
bGFuc0ZvclZNKFZNJiB2bSkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFBsYW4+LCA4PiBteVJlYWR5
UGxhbnM7CisgICAgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBteVJlYWR5UGxhbnMpOwor
fQorCitXb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZN
KFZNJiB2bSwgQ29kZUJsb2NrKiByZXF1ZXN0ZWRQcm9maWxlZEJsb2NrKQoreworICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBWZWN0b3I8UmVmUHRyPFBsYW4+LCA4PiBteVJlYWR5
UGxhbnM7CisgICAgCisgICAgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBteVJlYWR5UGxh
bnMpOworICAgIAorICAgIFN0YXRlIHJlc3VsdGluZ1N0YXRlID0gTm90S25vd247CisKKyAgICB3
aGlsZSAoIW15UmVhZHlQbGFucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+IHBs
YW4gPSBteVJlYWR5UGxhbnMudGFrZUxhc3QoKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrID0gcGxhbi0+a2V5KCk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZUNvbXBpbGF0aW9uUXVldWUoKSkKKyAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IENv
bXBsZXRpbmcgIiwgKnByb2ZpbGVkQmxvY2ssICJcbiIpOworICAgICAgICAKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQocGxhbi0+aXNDb21waWxlZCk7CisgICAgICAgIAorICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBjb21waWxhdGlvblJlc3VsdCA9CisgICAgICAgICAgICBwcm9maWxlZEJsb2Nr
LT5yZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShwbGFuKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29tcGlsYXRpb25SZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAg
ICAgIHByb2ZpbGVkQmxvY2stPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxh
dGlvblJlc3VsdChjb21waWxhdGlvblJlc3VsdCk7CisgICAgICAgIAorICAgICAgICBpZiAocHJv
ZmlsZWRCbG9jayA9PSByZXF1ZXN0ZWRQcm9maWxlZEJsb2NrKQorICAgICAgICAgICAgcmVzdWx0
aW5nU3RhdGUgPSBDb21waWxlZDsKKyAgICB9CisgICAgCisgICAgaWYgKHJlcXVlc3RlZFByb2Zp
bGVkQmxvY2sgJiYgcmVzdWx0aW5nU3RhdGUgPT0gTm90S25vd24pIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIGlmIChtX3BsYW5zLmNvbnRhaW5zKHJlcXVl
c3RlZFByb2ZpbGVkQmxvY2spKQorICAgICAgICAgICAgcmVzdWx0aW5nU3RhdGUgPSBDb21waWxp
bmc7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHRpbmdTdGF0ZTsKK30KKwordm9pZCBX
b3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKK3sKKyAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CisgICAgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KHZtKTsK
KyAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7Cit9CisKK3NpemVfdCBXb3JrbGlz
dDo6cXVldWVMZW5ndGgoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
IHJldHVybiBtX3F1ZXVlLnNpemUoKTsKK30KKwordm9pZCBXb3JrbGlzdDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
IGR1bXAobG9ja2VyLCBvdXQpOworfQorCit2b2lkIFdvcmtsaXN0OjpkdW1wKGNvbnN0IE11dGV4
TG9ja2VyJiwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAg
ICAgICJXb3JrbGlzdCgiLCBSYXdQb2ludGVyKHRoaXMpLCAiKVtRdWV1ZSBMZW5ndGggPSAiLCBt
X3F1ZXVlLnNpemUoKSwKKyAgICAgICAgIiwgTWFwIFNpemUgPSAiLCBtX3BsYW5zLnNpemUoKSwg
Il0iKTsKK30KKwordm9pZCBXb3JrbGlzdDo6cnVuVGhyZWFkKCkKK3sKKyAgICBMb25nTGl2ZWRT
dGF0ZSBsb25nTGl2ZWRTdGF0ZTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFJlZlB0
cjxQbGFuPiBwbGFuOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChtX3F1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CisgICAgICAgICAgICBwbGFuID0gbV9x
dWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFwbGFu
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgcGxhbi0+Y29tcGlsZUlu
VGhyZWFkKGxvbmdMaXZlZFN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIHsKKyAgICAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICAgICAgcGxhbi0+a2V5KCktPmZv
cmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKKyAgICAgICAgICAgIHBsYW4t
PmlzQ29tcGlsZWQgPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICAgICAgICAgIGR1bXAobG9j
a2VyLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIjogQ29tcGls
ZWQgIiwgKnBsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9yZWFkeVBsYW5zLmFwcGVuZChwbGFuKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9jb25kaXRpb24uYnJvYWRjYXN0KCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgV29ya2xpc3Q6OnRocmVhZEZ1bmN0aW9uKHZvaWQqIGFyZ3Vt
ZW50KQoreworICAgIHN0YXRpY19jYXN0PFdvcmtsaXN0Kj4oYXJndW1lbnQpLT5ydW5UaHJlYWQo
KTsKK30KKworc3RhdGljIHB0aHJlYWRfb25jZV90IGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdEtl
eU9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK3N0YXRpYyBXb3JrbGlzdCogdGhlR2xvYmFsV29y
a2xpc3Q7CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2UoKQorewor
ICAgIHRoZUdsb2JhbFdvcmtsaXN0ID0gV29ya2xpc3Q6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKK30K
KworV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0KCkKK3sKKyAgICBwdGhyZWFkX29uY2UoJmluaXRp
YWxpemVHbG9iYWxXb3JrbGlzdEtleU9uY2UsIGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2Up
OworICAgIHJldHVybiB0aGVHbG9iYWxXb3JrbGlzdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdXb3JrbGlzdF9oCisjZGVmaW5lIERGR1dvcmtsaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdQbGFuLmgi
CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgV29ya2xpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrbGlz
dD4geworcHVibGljOgorICAgIGVudW0gU3RhdGUgeyBOb3RLbm93biwgQ29tcGlsaW5nLCBDb21w
aWxlZCB9OworCisgICAgfldvcmtsaXN0KCk7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
V29ya2xpc3Q+IGNyZWF0ZSgpOworICAgIAorICAgIHZvaWQgZW5xdWV1ZShQYXNzUmVmUHRyPFBs
YW4+KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG86CisgICAgLy8gd29ya2xp
c3QtPndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSh2bSk7CisgICAgLy8gd29ya2xpc3Qt
PmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKKyAgICB2b2lkIGNvbXBsZXRlQWxsUGxh
bnNGb3JWTShWTSYpOworICAgIAorICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJl
YWR5KFZNJik7CisgICAgU3RhdGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2sgPSAwKTsKKyAgICB2b2lkIHJlbW92ZUFsbFJlYWR5UGxhbnNG
b3JWTShWTSYpOworICAgIAorICAgIFN0YXRlIGNvbXBpbGF0aW9uU3RhdGUoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrKTsKKyAgICAKKyAgICBzaXplX3QgcXVldWVMZW5ndGgoKTsKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgV29ya2xpc3Qo
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKCk7CisgICAgCisgICAgdm9pZCBydW5UaHJlYWQo
KTsKKyAgICBzdGF0aWMgdm9pZCB0aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCk7CisgICAg
CisgICAgdm9pZCByZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBWZWN0b3I8UmVmUHRyPFBs
YW4+LCA4PiYpOworCisgICAgdm9pZCBkdW1wKGNvbnN0IE11dGV4TG9ja2VyJiwgUHJpbnRTdHJl
YW0mKSBjb25zdDsKKworICAgIC8vIFVzZWQgdG8gaW5mb3JtIHRoZSB0aHJlYWQgYWJvdXQgd2hh
dCB3b3JrIHRoZXJlIGlzIGxlZnQgdG8gZG8uCisgICAgRGVxdWU8UmVmUHRyPFBsYW4+LCAxNj4g
bV9xdWV1ZTsKKyAgICAKKyAgICAvLyBVc2VkIHRvIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgdGhl
IGN1cnJlbnQgc3RhdGUgb2YgYSBjb2RlIGJsb2NrLiBUaGlzCisgICAgLy8gaXMgcGFydGljdWxh
cmx5IGdyZWF0IGZvciB0aGUgY3RpX29wdGltaXplIE9TUiBzbG93IHBhdGgsIHdoaWNoIHdhbnRz
CisgICAgLy8gdG8ga25vdzogZGlkIEkgZ2V0IGhlcmUgYmVjYXVzZSBhIGJldHRlciB2ZXJzaW9u
IG9mIG1lIGp1c3QgZ290CisgICAgLy8gY29tcGlsZWQ/CisgICAgdHlwZWRlZiBIYXNoTWFwPFJl
ZlB0cjxDb2RlQmxvY2s+LCBSZWZQdHI8UGxhbj4gPiBQbGFuTWFwOworICAgIFBsYW5NYXAgbV9w
bGFuczsKKyAgICAKKyAgICAvLyBVc2VkIHRvIHF1aWNrbHkgZmluZCB3aGljaCBwbGFucyBoYXZl
IGJlZW4gY29tcGlsZWQgYW5kIGFyZSByZWFkeSB0bworICAgIC8vIGJlIGNvbXBsZXRlZC4KKyAg
ICBWZWN0b3I8UmVmUHRyPFBsYW4+LCAxNj4gbV9yZWFkeVBsYW5zOworICAgIAorICAgIG11dGFi
bGUgTXV0ZXggbV9sb2NrOworICAgIC8vIFdlIGJyb2FkY2FzdCBvbiB0aGlzIGNvbmRpdGlvbiB3
aGVuZXZlcjoKKyAgICAvLyAtIFNvbWV0aGluZyBpcyBlbnF1ZXVlZC4KKyAgICAvLyAtIFNvbWV0
aGluZyBpcyBjb21wbGV0ZWQuCisgICAgVGhyZWFkQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAg
IFRocmVhZElkZW50aWZpZXIgbV90aHJlYWQ7Cit9OworCisvLyBGb3Igbm93IHdlIHVzZSBhIHNp
bmdsZSBnbG9iYWwgd29ya2xpc3QuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcworLy8gaXMgdGhl
IHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQgaXQgaXMgd2hhdCB3ZSBkbywgZm9yIG5vdy4gVGhpcyBm
dW5jdGlvbgorLy8gd2lsbCBsYXppbHkgY3JlYXRlIG9uZSB3aGVuIGl0J3MgbmVlZGVkLiBDdXJy
ZW50bHkgdGhpcyBpcyBvbmx5IGNhbGxlZAorLy8gZnJvbSBERkdEcml2ZXIuY3BwLCB3aGVuIGl0
IGFjdHVhbGx5IHdhbnRzIHRvIGVucXVldWUgc29tZXRoaW5nLgorV29ya2xpc3QqIGdsb2JhbFdv
cmtsaXN0KCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHV29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkocmV2aXNpb24gMTUw
Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNSw4ICsxMzUsNyBAQCBpbmxpbmUgQ29waWVkQmxvY2sqIENv
cGllZFNwYWNlOjphbGxvY2F0CiAKIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjphbGxvY2F0ZUJs
b2NrKCkKIHsKLSAgICBpZiAobV9oZWFwLT5zaG91bGRDb2xsZWN0KCkpCi0gICAgICAgIG1faGVh
cC0+Y29sbGVjdChIZWFwOjpEb05vdFN3ZWVwKTsKKyAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKTsKIAogICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBEZWZlckdDX2gKKyNkZWZpbmUgRGVmZXJHQ19oCisKKyNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBEZWZlckdDIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDKTsKK3B1
YmxpYzoKKyAgICBEZWZlckdDKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisg
ICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKyAg
ICAKKyAgICB+RGVmZXJHQygpCisgICAgeworICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJy
YWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSGVhcCYgbV9o
ZWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEZWZlckdDX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1MDM5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiSGVhcFJvb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIK
QEAgLTI2Myw2ICsyNjQsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgLCBtX2xhc3RDb2RlRGlzY2FyZFRpbWUoV1RGOjpjdXJyZW50VGltZSgpKQogICAgICwg
bV9hY3Rpdml0eUNhbGxiYWNrKERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSh0aGlz
KSkKICAgICAsIG1fc3dlZXBlcihJbmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZSh0aGlzKSkKKyAg
ICAsIG1fZGVmZXJyYWxEZXB0aCgwKQogewogICAgIG1fc3RvcmFnZVNwYWNlLmluaXQoKTsKIH0K
QEAgLTMwNSw4ICszMDcsNyBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dD
YXNlCiAgICAgLy8gY29sbGVjdGluZyBtb3JlIGZyZXF1ZW50bHkgYXMgbG9uZyBhcyBpdCBzdGF5
cyBhbGl2ZS4KIAogICAgIGRpZEFsbG9jYXRlKGNvc3QpOwotICAgIGlmIChzaG91bGRDb2xsZWN0
KCkpCi0gICAgICAgIGNvbGxlY3QoRG9Ob3RTd2VlcCk7CisgICAgY29sbGVjdElmTmVjZXNzYXJ5
T3JEZWZlcigpOwogfQogCiB2b2lkIEhlYXA6OnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCkK
QEAgLTY4Nyw3ICs2ODgsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKIHsKICAg
ICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm47Ci0KKyAgICAKICAgICBj
b2xsZWN0KERvU3dlZXApOwogfQogCkBAIC02OTcsMTIgKzY5OCwxOCBAQCB2b2lkIEhlYXA6OmNv
bGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVjdGlvbiIpOwogICAgIAorICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2RlZmVycmFsRGVwdGgpOwogICAgIEdDUEhBU0UoQ29sbGVjdCk7CiAgICAgQVNTRVJUKHZt
KCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBSRUxFQVNF
X0FTU0VSVCh2bSgpLT5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJ
ZGVudGlmaWVyVGFibGUoKSk7CiAgICAgQVNTRVJUKG1faXNTYWZlVG9Db2xsZWN0KTsKICAgICBK
QVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7CisgICAgCisgICAgbV9kZWZlcnJhbERlcHRoKys7
IC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IEdDIGluIHRoaXMgY2FsbC4KKyAgICBtX3ZtLT5w
cmVwYXJlVG9EaXNjYXJkQ29kZSgpOworICAgIG1fZGVmZXJyYWxEZXB0aC0tOyAvLyBEZWNyZW1l
bnQgZGVmZXJhbCBtYW51YWxseSwgc28gd2UgZG9uJ3QgR0Mgd2hlbiB3ZSBkbyBzbywgc2luY2Ug
d2UgYXJlIGFscmVhZHkgR0NpbmchLgorICAgIAogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9
IENvbGxlY3Rpb247CiAKICAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPndpbGxDb2xsZWN0KCk7CkBA
IC04MDMsNiArODEwLDE4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKICAgICAgICAgSGVhcFN0YXRpc3RpY3M6OnNob3dPYmplY3RTdGF0aXN0aWNzKHRoaXMpOwog
fQogCitib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKQoreworICAgIGlmICht
X2RlZmVycmFsRGVwdGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIXNo
b3VsZENvbGxlY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGNvbGxlY3Qo
RG9Ob3RTd2VlcCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgSGVhcDo6bWFya0RlYWRP
YmplY3RzKCkKIHsKICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hEZWFkQ2VsbDxNYXJrT2JqZWN0
PigpOwpAQCAtODk2LDQgKzkxNSwyMCBAQCB2b2lkIEhlYXA6OnpvbWJpZnlEZWFkT2JqZWN0cygp
CiAgICAgbV9vYmplY3RTcGFjZS5mb3JFYWNoRGVhZENlbGw8Wm9tYmlmeT4oKTsKIH0KIAordm9p
ZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2RlZmVycmFsRGVwdGggPCAxMDApOyAvLyBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMg
ZG9lc24ndCBnZXQgcmlkaWN1bG91cy4KKyAgICAKKyAgICBtX2RlZmVycmFsRGVwdGgrKzsKK30K
Kwordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9kZWZlcnJhbERlcHRoID49IDEpOworICAgIAorICAgIG1fZGVm
ZXJyYWxEZXB0aC0tOworICAgIAorICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShy
ZXZpc2lvbiAxNTAzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMTEwLDYgKzExMCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIEluY3JlbWVudGFsU3dlZXBlciogc3dlZXBlcigpOwogCisgICAg
ICAgIC8vIHRydWUgaWYgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcworICAgICAgICBpbmxpbmUg
Ym9vbCBpc0NvbGxlY3RpbmcoKTsKICAgICAgICAgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9uIG9y
IGNvbGxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MKICAgICAgICAgaW5saW5lIGJvb2wgaXNCdXN5KCk7
CiAgICAgICAgIApAQCAtMTMxLDYgKzEzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBl
bnVtIFN3ZWVwVG9nZ2xlIHsgRG9Ob3RTd2VlcCwgRG9Td2VlcCB9OwogICAgICAgICBib29sIHNo
b3VsZENvbGxlY3QoKTsKICAgICAgICAgdm9pZCBjb2xsZWN0KFN3ZWVwVG9nZ2xlKTsKKyAgICAg
ICAgYm9vbCBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBp
dCBkaWQgY29sbGVjdC4KIAogICAgICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXpl
X3QgY29zdCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0QWJhbmRvbmVk
T2JqZWN0R3JhcGgoKTsKQEAgLTE3OSw2ICsxODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgICAgICBmcmllbmQg
Y2xhc3MgQ29waWVkQmxvY2s7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDOwogICAgICAg
ICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUU3R1YlJvdXRpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkBAIC0yMjAsNiArMjI0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNT
dGFjayYgc3RhY2soKTsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7
CisgICAgICAgIAorICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAg
ICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpOwogCiAgICAgICAg
IGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgICAgIGNvbnN0IHNpemVfdCBtX3JhbVNp
emU7CkBAIC0yNjYsNiArMjczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEdDQWN0aXZp
dHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxiYWNrOwogICAgICAgICBJbmNyZW1lbnRhbFN3ZWVw
ZXIqIG1fc3dlZXBlcjsKICAgICAgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja1NuYXBz
aG90OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbV9kZWZlcnJhbERlcHRoOwogICAgIH07
CiAKICAgICBzdHJ1Y3QgTWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0b3IgOiBwdWJsaWMgTWFya2Vk
QmxvY2s6OlZvaWRGdW5jdG9yIHsKQEAgLTI5Myw2ICszMDIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb247CiAg
ICAgfQogCisgICAgYm9vbCBIZWFwOjppc0NvbGxlY3RpbmcoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBDb2xsZWN0aW9uOworICAgIH0KKwogICAgIGlu
bGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAg
IHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTUwMzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODQsOSArODQsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6
OmFsbG9jYXRlU2xvd0Nhc2UoCiAgICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgCi0gICAgaWYgKG1faGVhcC0+c2hvdWxkQ29sbGVjdCgpKSB7
Ci0gICAgICAgIG1faGVhcC0+Y29sbGVjdChIZWFwOjpEb05vdFN3ZWVwKTsKLQorICAgIGlmICht
X2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKSkgewogICAgICAgICByZXN1bHQgPSB0
cnlBbGxvY2F0ZShieXRlcyk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTUw
Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MDEsMTAgKzYwMSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBQcm9wZXJ0eVN0dWJDb21w
aWxhdGkKIAogUGFzc1JlZlB0cjxKSVRDb2RlPiBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIq
IGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7
Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBwcmludGYoIkNvbXBpbGluZyBKSVQg
Y29kZSFcbiIpOwotI2VuZGlmCi0gICAgCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRo
REZHKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAxNTAzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsNiBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotLy8g
VmVyYm9zZSBsb2dnaW5nIG9mIGNvZGUgZ2VuZXJhdGlvbgotI2RlZmluZSBFTkFCTEVfSklUX1ZF
UkJPU0UgMAotLy8gVmVyYm9zZSBsb2dnaW5nIGZvciBPU1ItcmVsYXRlZCBjb2RlLgotI2RlZmlu
ZSBFTkFCTEVfSklUX1ZFUkJPU0VfT1NSIDAKLQogLy8gV2UndmUgcnVuIGludG8gc29tZSBwcm9i
bGVtcyB3aGVyZSBjaGFuZ2luZyB0aGUgc2l6ZSBvZiB0aGUgY2xhc3MgSklUIGxlYWRzIHRvCiAv
LyBwZXJmb3JtYW5jZSBmbHVjdHVhdGlvbnMuICBUcnkgZm9yY2luZyBhbGlnbm1lbnQgaW4gYW4g
YXR0ZW1wdCB0byBzdGFiYWxpemUgdGhpcy4KICNpZiBDT01QSUxFUihHQ0MpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTUwMzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDcgQEAKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiQ29tbW9u
U2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKKyNpbmNsdWRlICJERkdXb3Jr
bGlzdC5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgpAQCAtOTA2LDMxICs5MDcsODMgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgg
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgZGF0YUxvZygKLSAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCBvcHRpbWl6
ZSB3aXRoIGJ5dGVjb2RlSW5kZXggPSAiLCBieXRlY29kZUluZGV4LAotICAgICAgICAiLCBleGVj
dXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAg
Iiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpLAotICAgICAgICAiLCBleGl0Q291bnRlciA9ICIpOwotICAgIGlmIChj
b2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCi0gICAgICAgIGRhdGFMb2coY29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5vc3JFeGl0Q291bnRlcigpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGRhdGFMb2coIk4vQSIpOwotICAgIGRhdGFMb2coIlxuIik7Ci0jZW5kaWYKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAq
Y29kZUJsb2NrLCAiOiBFbnRlcmVkIG9wdGltaXplIHdpdGggYnl0ZWNvZGVJbmRleCA9ICIsIGJ5
dGVjb2RlSW5kZXgsCisgICAgICAgICAgICAiLCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9j
ay0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKKyAgICAgICAgICAgICIsIG9wdGltaXphdGlvbkRlbGF5
Q291bnRlciA9ICIsIGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwKKyAg
ICAgICAgICAgICIsIGV4aXRDb3VudGVyID0gIik7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICBkYXRhTG9nKGNvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKS0+b3NyRXhpdENvdW50ZXIoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGRhdGFMb2coIk4vQSIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgIH0KIAogICAg
IGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7
CiAgICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKLSNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gb3B0aW1p
emUgIiwgKmNvZGVCbG9jaywgIiB5ZXQuXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIG9w
dGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0KLSAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0jaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgT1NS
ICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIi5cbiIp
OwotI2VuZGlmCisgICAgCisgICAgLy8gV2UgY2Fubm90IGJlIGluIHRoZSBwcm9jZXNzIG9mIGFz
eW5jaHJvbm91cyBjb21waWxhdGlvbiBhbmQgYWxzbyBoYXZlIGFuIG9wdGltaXplZAorICAgIC8v
IHJlcGxhY2VtZW50LgorICAgIEFTU0VSVCgKKyAgICAgICAgIXN0YWNrRnJhbWUudm0tPndvcmts
aXN0CisgICAgICAgIHx8ICEoc3RhY2tGcmFtZS52bS0+d29ya2xpc3QtPmNvbXBpbGF0aW9uU3Rh
dGUoY29kZUJsb2NrKSAhPSBERkc6OldvcmtsaXN0OjpOb3RLbm93bgorICAgICAgICAgICAgICYm
IGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkpOworICAgIAorICAgIERGRzo6
V29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CisgICAgaWYgKHN0YWNrRnJhbWUudm0tPndv
cmtsaXN0KSB7CisgICAgICAgIC8vIFRoZSBjYWxsIHRvIERGRzo6V29ya2xpc3Q6OmNvbXBsZXRl
QWxsUmVhZHlQbGFuc0ZvclZNKCkgd2lsbCBjb21wbGV0ZSBhbGwgcmVhZHkKKyAgICAgICAgLy8g
KGkuZS4gY29tcGlsZWQpIGNvZGUgYmxvY2tzLiBCdXQgaWYgaXQgY29tcGxldGVzIG91cnMsIHdl
IGFsc28gbmVlZCB0byBrbm93CisgICAgICAgIC8vIHdoYXQgdGhlIHJlc3VsdCB3YXMgc28gdGhh
dCB3ZSBkb24ndCBwbG93IGFoZWFkIGFuZCBhdHRlbXB0IE9TUiBvciBpbW1lZGlhdGUKKyAgICAg
ICAgLy8gcmVvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBoYXZlIGFscmVhZHkgYWxzbyBzZXQgdGhl
IGFwcHJvcHJpYXRlIEpJVCBleGVjdXRpb24KKyAgICAgICAgLy8gY291bnQgdGhyZXNob2xkIGRl
cGVuZGluZyBvbiB3aGF0IGhhcHBlbmVkLCBzbyBpZiB0aGUgY29tcGlsYXRpb24gd2FzIGFueXRo
aW5nCisgICAgICAgIC8vIGJ1dCBzdWNjZXNzZnVsIHdlIGp1c3Qgd2FudCB0byByZXR1cm4gZWFy
bHkuIFNlZSB0aGUgY2FzZSBmb3Igd29ya2xpc3RTdGF0ZSA9PQorICAgICAgICAvLyBERkc6Oldv
cmtsaXN0OjpDb21waWxlZCwgYmVsb3cuCisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQg
d2UgY291bGQgaGF2ZSBhbHRlcm5hdGl2ZWx5IGp1c3QgY2FsbGVkIFdvcmtsaXN0Ojpjb21waWxh
dGlvblN0YXRlKCkKKyAgICAgICAgLy8gaGVyZSwgYW5kIGlmIGl0IHJldHVybmVkIENvbXBpbGVk
LCB3ZSBjb3VsZCBoYXZlIHRoZW4gY2FsbGVkCisgICAgICAgIC8vIGNvbXBsZXRlQW5kU2NoZWR1
bGVPU1IoKSBiZWxvdy4gQnV0IHRoYXQgd291bGQgaGF2ZSBtZWFudCB0aGF0IGl0IGNvdWxkIHRh
a2UKKyAgICAgICAgLy8gbG9uZ2VyIGZvciBjb2RlIGJsb2NrcyB0byBiZSBjb21wbGV0ZWQ6IHRo
ZXkgd291bGQgb25seSBjb21wbGV0ZSB3aGVuICp0aGVpcioKKyAgICAgICAgLy8gZXhlY3V0aW9u
IGNvdW50IHRyaWdnZXIgZmlyZWQ7IGJ1dCB0aGF0IGNvdWxkIHRha2UgYSB3aGlsZSBzaW5jZSB0
aGUgZmlyaW5nIGlzCisgICAgICAgIC8vIHJhY3kuIEl0IGNvdWxkIGFsc28gbWVhbiB0aGF0IGNv
ZGUgYmxvY2tzIHRoYXQgbmV2ZXIgcnVuIGFnYWluIGFmdGVyIGJlaW5nCisgICAgICAgIC8vIGNv
bXBpbGVkIHdvdWxkIHNpdCBvbiB0aGUgd29ya2xpc3QgdW50aWwgbmV4dCBHQy4gVGhhdCdzIGZp
bmUsIGJ1dCBpdCdzCisgICAgICAgIC8vIHByb2JhYmx5IGEgd2FzdGUgb2YgbWVtb3J5LiBPdXIg
Z29hbCBoZXJlIGlzIHRvIGNvbXBsZXRlIGNvZGUgYmxvY2tzIGFzIHNvb24gYXMKKyAgICAgICAg
Ly8gcG9zc2libGUgaW4gb3JkZXIgdG8gbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgdXMgZXhlY3V0
aW5nIGJhc2VsaW5lIGNvZGUgYWZ0ZXIKKyAgICAgICAgLy8gb3B0aW1pemVkIGNvZGUgaXMgYWxy
ZWFkeSBhdmFpbGFibGUuCisgICAgICAgIAorICAgICAgICB3b3JrbGlzdFN0YXRlID0KKyAgICAg
ICAgICAgIHN0YWNrRnJhbWUudm0tPndvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JW
TSgqc3RhY2tGcmFtZS52bSwgY29kZUJsb2NrKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd29ya2xp
c3RTdGF0ZSA9IERGRzo6V29ya2xpc3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlz
dFN0YXRlID09IERGRzo6V29ya2xpc3Q6OkNvbXBpbGluZykgeworICAgICAgICAvLyBXZSBjYW5u
b3QgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uIGFuZCBhbHNv
IGhhdmUgYW4gb3B0aW1pemVkCisgICAgICAgIC8vIHJlcGxhY2VtZW50LgorICAgICAgICBSRUxF
QVNFX0FTU0VSVCghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAgICAg
ICAgY29kZUJsb2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQoQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAg
ICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgYnV0IHdl
IGRpZCBqdXN0IGdldCBjb21waWxlZCwgdGhlbgorICAgICAgICAvLyBlaXRoZXIgb2YgdGhlIGZv
bGxvd2luZyBoYXBwZW5lZDoKKyAgICAgICAgLy8gLSBUaGUgY29tcGlsYXRpb24gZmFpbGVkIG9y
IHdhcyBpbnZhbGlkYXRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgZXhlY3V0aW9uIGNvdW50CisgICAg
ICAgIC8vICAgdGhyZXNob2xkcyBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYXBwcm9wcmlhdGVseSBi
eQorICAgICAgICAvLyAgIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRP
bkNvbXBpbGF0aW9uUmVzdWx0KCkgYW5kIHdlIGhhdmUKKyAgICAgICAgLy8gICBub3RoaW5nIGxl
ZnQgdG8gZG8uCisgICAgICAgIC8vIC0gR0MgcmFuIGFmdGVyIERGRzo6V29ya2xpc3Q6OmNvbXBs
ZXRlQWxsUmVhZHlQbGFuc0ZvclZNKCkgYW5kIGpldHRpc29uZWQgb3VyCisgICAgICAgIC8vICAg
Y29kZSBibG9jay4gT2J2aW91c2x5IHRoYXQncyB1bmZvcnR1bmF0ZSBhbmQgd2UnZCByYXRoZXIg
bm90IGhhdmUgdGhhdAorICAgICAgICAvLyAgIGhhcHBlbiwgYnV0IGl0IGNhbiBoYXBwZW4sIGFu
ZCBpZiBpdCBkaWQgdGhlbiB0aGUgamV0dGlzb25pbmcgbG9naWMgd2lsbAorICAgICAgICAvLyAg
IGhhdmUgc2V0IG91ciB0aHJlc2hvbGQgYXBwcm9wcmlhdGVseSBhbmQgd2UgaGF2ZSBub3RoaW5n
IGxlZnQgdG8gZG8uCisgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoY29kZUJsb2NrLT5o
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBPU1IgIiwgKmNvZGVCbG9j
aywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7CiAgICAgICAgIC8v
IElmIHdlIGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0aGVuIGl0IG11c3QgYmUgdGhl
IGNhc2UgdGhhdCB3ZSBlbnRlcmVkCiAgICAgICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEgbG9v
cC4gVGhhdCdzIGJlY2F1c2UgaXMgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsCiAg
ICAgICAgIC8vIHRoZW4gYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZWxpbmtl
ZCB0byB0aGUgcmVwbGFjZW1lbnQgYW5kIHNvCkBAIC05NDUsNjAgKzk5OCwzOSBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgLy8gc2hvdWxkUmVvcHRpbWl6
ZUZyb21Mb29wTm93KCkgdG8gYWx3YXlzIHJldHVybiB0cnVlLiBCdXQgd2UgbWFrZSBpdCBkbyBz
b21lCiAgICAgICAgIC8vIGFkZGl0aW9uYWwgY2hlY2tpbmcgYW55d2F5LCB0byByZWR1Y2UgdGhl
IGFtb3VudCBvZiByZWNvbXBpbGF0aW9uIHRocmFzaGluZy4KICAgICAgICAgaWYgKGNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkpIHsKLSNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBy
ZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiKCIsICpjb2RlQmxvY2stPnJlcGxhY2Vt
ZW50KCksICIpIChpbiBsb29wKS5cbiIpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICAgICAgICAgIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywKKyAg
ICAgICAgICAgICAgICAgICAgIigiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiKSAoaW4g
bG9vcCkuXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRp
bWl6ZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKLSNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZygiRGVsYXlpbmcgb3B0aW1pemF0
aW9uIGZvciAiLCAqY29kZUJsb2NrLCAiIChpbiBsb29wKSBiZWNhdXNlIG9mIGluc3VmZmljaWVu
dCBwcm9maWxpbmcuXG4iKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAg
ICJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICIsICpjb2RlQmxvY2ssCisgICAgICAgICAgICAg
ICAgICAgICIgKGluIGxvb3ApIGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHByb2ZpbGluZy5cbiIp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2coIlRyaWdnZXJp
bmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwotI2VuZGlm
CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9n
KCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4i
KTsKICAgICAgICAgCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgp
OwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQ7CiAgICAgICAgIEpTT2JqZWN0KiBl
cnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlLCByZXN1
bHQsIGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0
aW9uKCkKLSAgICAgICAgICAgIHx8IE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpCi0gICAgICAg
ICAgICB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiT3B0aW1pemluZyBjb21w
aWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKLSNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAg
ICBkYXRhTG9nKCJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZmFpbGVkIHdpdGggYSBK
UyBlcnJvci5cbiIpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSNlbmRp
ZgorICAgICAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIldBUk5J
Tkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQgd2l0aCBhIEpTIGVycm9yLlxuIik7Cisg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKChyZXN1bHQgPT0gQ29t
cGlsYXRpb25TdWNjZXNzZnVsKSA9PSAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpICE9IGNvZGVC
bG9jaykpOwotICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgICBjYXNlIENvbXBpbGF0
aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBpbGF0
aW9uRmFpbGVkOgotICAgICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6Ci0jaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwgKmNv
ZGVCbG9jaywgIiBmYWlsZWQuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGNvZGVC
bG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgY29kZUJsb2Nr
LT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0
KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKLSAgICAg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCk7Ci0gICAgICAgICAgICAvLyBSZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYuCi0g
ICAgICAgICAgICBjb2RlQmxvY2stPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgIH0KICAgICAKICAgICBDb2Rl
QmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKQEAg
LTEwMTQsMzIgKzEwNDYsMjggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUp
CiAgICAgfQogICAgIAogICAgIGlmICh2b2lkKiBhZGRyZXNzID0gREZHOjpwcmVwYXJlT1NSRW50
cnkoY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7Ci0gICAg
ICAgIGlmIChPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKSkgeworICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAg
ICAgICJQZXJmb3JtaW5nIE9TUiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpvcHRpbWl6ZWRDb2Rl
QmxvY2ssICIsIGFkZHJlc3MgIiwKICAgICAgICAgICAgICAgICBSYXdQb2ludGVyKChTVFVCX1JF
VFVSTl9BRERSRVNTKS52YWx1ZSgpKSwgIiAtPiAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiLlxu
Iik7CiAgICAgICAgIH0KLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRh
TG9nKCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgc3VjY2VlZGVkLCBwZXJmb3JtaW5nIE9T
UiBhZnRlciBhIGRlbGF5IG9mICIsIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KCksICIuXG4iKTsKLSNlbmRpZgogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7
CiAgICAgICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNTKGFkZHJlc3MpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxv
ZygiT3B0aW1pemluZyAiLCAqY29kZUJsb2NrLCAiIHN1Y2NlZWRlZCwgT1NSIGZhaWxlZCwgYWZ0
ZXIgYSBkZWxheSBvZiAiLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpLCAi
LlxuIik7Ci0jZW5kaWYKKworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgLT4g
IiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwKKyAgICAgICAgICAgICIgc3VjY2VlZGVkLCBP
U1IgZmFpbGVkLCBhZnRlciBhIGRlbGF5IG9mICIsCisgICAgICAgICAgICBjb2RlQmxvY2stPm9w
dGltaXphdGlvbkRlbGF5Q291bnRlcigpLCAiLlxuIik7CisgICAgfQogCiAgICAgLy8gQ291bnQg
dGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3VsYXRpb24gZmFpbHVyZS4gSWYgdGhpcyBoYXBwZW5z
IGEgbG90LCB0aGVuCiAgICAgLy8gcmVvcHRpbWl6ZS4KICAgICBvcHRpbWl6ZWRDb2RlQmxvY2st
PmNvdW50T1NSRXhpdCgpOwogICAgIAotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAg
ZGF0YUxvZygiRW5jb3VudGVyZWQgT1NSIGZhaWx1cmUgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAq
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7Ci0jZW5kaWYKLQogICAgIC8vIFdlIGFy
ZSBhIGxvdCBtb3JlIGNvbnNlcnZhdGl2ZSBhYm91dCB0cmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9u
IGFmdGVyIE9TUiBmYWlsdXJlIHRoYW4KICAgICAvLyBiZWZvcmUgaXQuIElmIHdlIGVudGVyIHRo
ZSBvcHRpbWl6ZV9mcm9tX2xvb3AgdHJpZ2dlciB3aXRoIGEgYnVja2V0IGZ1bGwgb2YgZmFpbAog
ICAgIC8vIGFscmVhZHksIHRoZW4gd2UgcmVhbGx5IHdvdWxkIGxpa2UgdG8gcmVvcHRpbWl6ZSBp
bW1lZGlhdGVseS4gQnV0IHRoaXMgY2FzZSBjb3ZlcnMKQEAgLTEwNDksOSArMTA3NywxMSBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAvLyByaWdodCBub3cuIFNv
LCB3ZSBvbmx5IHRyaWdnZXIgcmVvcHRpbWl6YXRpb24gb25seSB1cG9uIHRoZSBtb3JlIGNvbnNl
cnZhdGl2ZSAobm9uLWxvb3ApCiAgICAgLy8gcmVvcHRpbWl6YXRpb24gdHJpZ2dlci4KICAgICBp
ZiAob3B0aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93KCkpIHsKLSNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIHJlb3B0aW1p
emF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQo
KSwgIiAoYWZ0ZXIgT1NSIGZhaWwpLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkgeworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAi
VHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsCisgICAg
ICAgICAgICAgICAgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIiAoYWZ0ZXIgT1NSIGZhaWwp
LlxuIik7CisgICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1MDM5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Miwz
MCArMjgyLDI2IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKEMKICAg
ICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAgICAgCiAg
ICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKLSNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nRigiICAgIEpJVCB0aHJlc2hv
bGQgc2hvdWxkIGJlIGxpZnRlZC5cbiIpOwotI2VuZGlmCisgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nRigiICAgIEpJVCB0aHJlc2hvbGQgc2hv
dWxkIGJlIGxpZnRlZC5cbiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAog
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+aml0Q29tcGlsZShleGVj
KTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25Ob3ROZWVkZWQ6
Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0YoIiAgICBDb2Rl
IHdhcyBhbHJlYWR5IGNvbXBpbGVkLlxuIik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgQ29kZSB3YXMgYWxyZWFk
eSBjb21waWxlZC5cbiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSNpZiBFTkFCTEUoSklU
X1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBmYWls
ZWQuXG4iKTsKLSNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLlxuIik7CiAgICAg
ICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSNpZiBFTkFCTEUoSklUX1ZFUkJP
U0VfT1NSKQotICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVs
LlxuIik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwuXG4iKTsKICAg
ICAgICAgY29kZUJsb2NrLT5qaXRTb29uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6CkBAIC0zMTcsMTEgKzMxMywxMSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0
SGV1cmlzdGljcyhDCiBlbnVtIEVudHJ5S2luZCB7IFByb2xvZ3VlLCBBcml0eUNoZWNrIH07CiBz
dGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1
Y3Rpb24qLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5k
IGtpbmQpCiB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCpjb2Rl
QmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwgY29k
ZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCksICJcbiIpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0obmFtZSk7Ci0jZW5kaWYKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Cisg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5h
bWUsICIgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBjb2RlQmxvY2stPmxs
aW50RXhlY3V0ZUNvdW50ZXIoKSwgIlxuIik7CisgICAgfQogICAgIAogICAgIGlmICghc2hvdWxk
SklUKGV4ZWMpKSB7CiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CkBA
IC0zNjQsMTAgKzM2MCwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rp
b25fCiBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKIHsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIAotI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCi0gICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBFbnRlcmVkIGxvb3Bfb3NyIHdpdGgg
ZXhlY3V0ZUNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSwgIlxu
Iik7Ci0jZW5kaWYKKworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAg
ZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgbG9vcF9vc3Igd2l0
aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50RXhlY3V0
ZUNvdW50ZXIoKSwgIlxuIik7CisgICAgfQogICAgIAogICAgIGlmICghc2hvdWxkSklUKGV4ZWMp
KSB7CiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CkBAIC0zOTQsMTAg
KzM5MiwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHJlcGxhY2UpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICAKLSNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2co
KmNvZGVCbG9jaywgIjogRW50ZXJlZCByZXBsYWNlIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLCBj
b2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSwgIlxuIik7Ci0jZW5kaWYKKworICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICpjb2RlQmxvY2ssICI6IEVudGVyZWQgcmVwbGFjZSB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwK
KyAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKKyAg
ICB9CiAgICAgCiAgICAgaWYgKHNob3VsZEpJVChleGVjKSkKICAgICAgICAgaml0Q29tcGlsZUFu
ZFNldEhldXJpc3RpY3MoY29kZUJsb2NrLCBleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5oCShyZXZpc2lvbiAxNTAz
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2gu
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJCeXRlY29kZVNl
cXVlbmNlLmgiCi0jaW5jbHVkZSA8d3RmL0J5dGVTcGluTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50
SklUTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb25jdXJyZW50SklUTG9j
a19oCisjZGVmaW5lIENvbmN1cnJlbnRKSVRMb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9CeXRlU3Bp
bkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9Mb2NrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisj
aWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQordHlwZWRlZiBCeXRlU3BpbkxvY2sgQ29uY3VycmVu
dEpJVExvY2s7Cit0eXBlZGVmIEJ5dGVTcGluTG9ja2VyIENvbmN1cnJlbnRKSVRMb2NrZXI7Cisj
ZWxzZQordHlwZWRlZiBOb0xvY2sgQ29uY3VycmVudEpJVExvY2s7Cit0eXBlZGVmIE5vTG9ja0xv
Y2tlciBDb25jdXJyZW50SklUTG9ja2VyOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gQ29uY3VycmVudEpJVExvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCShyZXZpc2lvbiAxNTAzOTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0MSwxMiArMTQxLDIwIEBAIGlubGluZSBDb21waWxhdGlvblJlc3Vs
dCBwcmVwYXJlRnVuY3Rpb24KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KIGlu
bGluZSBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgK
LSAgICBQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbiwgUmVmUHRyPENvZGVCbG9ja1R5cGU+JiBz
aW5rLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCisgICAgUGFzc1JlZlB0cjxERkc6OlBsYW4+
IHBhc3NlZFBsYW4sIFJlZlB0cjxDb2RlQmxvY2tUeXBlPiYgc2luaywgUmVmUHRyPEpJVENvZGU+
JiBqaXRDb2RlLAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNo
ZWNrLCBpbnQqIG51bVBhcmFtZXRlcnMpCiB7CisgICAgUmVmUHRyPERGRzo6UGxhbj4gcGxhbiA9
IHBhc3NlZFBsYW47CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjp0cnlGaW5h
bGl6ZVBsYW4ocGxhbiwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAi
RGVmZXJyZWQgb3B0aW1pemluZyBjb21waWxhdGlvbiAiLCAqcGxhbi0+a2V5KCksICIgLT4gIiwg
KnBsYW4tPmNvZGVCbG9jaywKKyAgICAgICAgICAgICIgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIp
OworICAgIH0KKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAgICAg
ICAgcGxhbi0+Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7
CiAgICAgcmV0dXJuIGluc3RhbGxPcHRpbWl6ZWRDb2RlKAotICAgICAgICBERkc6OnRyeUZpbmFs
aXplUGxhbihwbGFuLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spLAotICAgICAgICBz
aW5rLCBzdGF0aWNfY2FzdDxDb2RlQmxvY2tUeXBlKj4ocGxhbi0+Y29kZUJsb2NrLmdldCgpKSwg
aml0Q29kZSwKKyAgICAgICAgcmVzdWx0LCBzaW5rLCBzdGF0aWNfY2FzdDxDb2RlQmxvY2tUeXBl
Kj4ocGxhbi0+Y29kZUJsb2NrLmdldCgpKSwgaml0Q29kZSwKICAgICAgICAgaml0Q29kZVdpdGhB
cml0eUNoZWNrID8gKmppdENvZGVXaXRoQXJpdHlDaGVjayA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpLAogICAgICAgICBudW1QYXJhbWV0ZXJzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNTAzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRS
ZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKIHsKKyAgICBMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgCiAgICAgZm9yIChpbnQgaSA9IG1fcmVnaXN0ZXJzLnNpemUoKTsgaS0t
OykgewogICAgICAgICBpZiAoJm1fcmVnaXN0ZXJzW2ldICE9IHJlZ2lzdGVyQWRkcmVzcykKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDYsNiArNDgsOCBAQCBpbnQgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdDo6ZmluZFJlZ2lzCiAKIGludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojph
ZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCiB7CisgICAgTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIAogICAgIEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49
IDApOwogICAgIAogICAgIHNpemVfdCBvbGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMTUwMzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RfaAogI2Rl
ZmluZSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0X2gKIAorI2luY2x1ZGUgIkNvbmN1cnJlbnRK
SVRMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1N5bWJvbFRhYmxl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKQEAgLTkxLDggKzkyLDEyIEBAIHByb3Rl
Y3RlZDoKICAgICB7CiAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICB9Cisg
ICAgCisgICAgdHlwZWRlZiBDb25jdXJyZW50SklUTG9jayBMb2NrOworICAgIHR5cGVkZWYgQ29u
Y3VycmVudEpJVExvY2tlciBMb2NrZXI7CiAKICAgICBTZWdtZW50ZWRWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+LCAxNj4gbV9yZWdpc3RlcnM7CisgICAgTG9jayBtX2xvY2s7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHJldmlzaW9uIDE1MDM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsNiArODEsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB2KGJvb2wsIHByaW50RWFjaE9TUkV4aXQsIGZhbHNlKSBcCiAgICAg
dihib29sLCB2YWxpZGF0ZUdyYXBoLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVHcmFw
aEF0RWFjaFBoYXNlLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgdmVyYm9zZU9TUiwgZmFsc2UpIFwK
KyAgICB2KGJvb2wsIHZlcmJvc2VDb21waWxhdGlvblF1ZXVlLCBmYWxzZSkgXAogICAgIFwKICAg
ICB2KGJvb2wsIHVzZUV4cGVyaW1lbnRhbEZUTCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHVzZUZU
TFRCQUEsIHRydWUpIFwKQEAgLTg4LDYgKzkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihi
b29sLCBlbmFibGVMTFZNRmFzdElTZWwsIHRydWUpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZtT3B0
aW1pemF0aW9uTGV2ZWwsIDIpIFwKICAgICBcCisgICAgdihib29sLCBlbmFibGVDb25jdXJyZW50
SklULCB0cnVlKSBcCisgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlUHJvZmlsZXIsIGZhbHNlKSBc
CiAgICAgXAogICAgIHYodW5zaWduZWQsIG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50LCAxMDAwMCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1MDM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
ZGVmaW5lIFN0cnVjdHVyZV9oCiAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJD
b25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNp
bmNsdWRlICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUg
IldlYWsuaCIKLSNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0Nv
bXBpbGF0aW9uVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6CiAKICAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOwogICAgIAotICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7Ci0g
ICAgdHlwZWRlZiBCeXRlU3BpbkxvY2tlciBMb2NrZXI7CisgICAgdHlwZWRlZiBDb25jdXJyZW50
SklUTG9jayBMb2NrOworICAgIHR5cGVkZWYgQ29uY3VycmVudEpJVExvY2tlciBMb2NrZXI7CiAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5n
VHlwZSA9IE5vbkFycmF5LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDApOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShy
ZXZpc2lvbiAxNTAzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCBpbmxpbmUgYm9v
bCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMCiAKIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJy
aWVyPFByb3BlcnR5VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQogewotICAgIEFT
U0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNCdXN5
KCkpOworICAgIEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgp
LmhlYXAuaXNDb2xsZWN0aW5nKCkpOwogICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
aAkocmV2aXNpb24gMTUwMzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBTeW1i
b2xUYWJsZV9oCiAjZGVmaW5lIFN5bWJvbFRhYmxlX2gKIAorI2luY2x1ZGUgIkNvbmN1cnJlbnRK
SVRMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtMzQzLDggKzM0NCw4IEBAIHN0cnVj
dCBTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0cyA6IEhhc2gKIGNsYXNzIFN5bWJvbFRhYmxlIHsK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBTeW1ib2xU
YWJsZUVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8U3RyaW5nSW1w
bD4gPiwgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHM+IE1hcDsKLSAgICB0eXBlZGVmIEJ5dGVT
cGluTG9jayBMb2NrOwotICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgTG9ja2VyOworICAgIHR5
cGVkZWYgQ29uY3VycmVudEpJVExvY2sgTG9jazsKKyAgICB0eXBlZGVmIENvbmN1cnJlbnRKSVRM
b2NrZXIgTG9ja2VyOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3ltYm9sVGFibGUoKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB+U3ltYm9sVGFibGUoKTsKQEAgLTQzNCw3ICs0MzUsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIE1hcCBtX21hcDsKIHB1YmxpYzoKLSAgICBtdXRhYmxlIEJ5
dGVTcGluTG9jayBtX2xvY2s7CisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7
CiB9OwogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9u
IDE1MDM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVDYWNoZS5o
IgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVk
U3RhdGUuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0
aXZhdGlvbi5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJH
Q0FjdGl2aXR5Q2FsbGJhY2suaCIKQEAgLTI1MywxMiArMjU0LDE5IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlm
IChjYW5Vc2VKSVQoKSkKLSAgICAgICAgbV9kZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6Okxv
bmdMaXZlZFN0YXRlKCkpOworICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6Okxv
bmdMaXZlZFN0YXRlKCkpOwogI2VuZGlmCiB9CiAKIFZNOjp+Vk0oKQogeworICAgIC8vIE1ha2Ug
c3VyZSBjb25jdXJyZW50IGNvbXBpbGF0aW9ucyBhcmUgZG9uZSwgYnV0IGRvbid0IGluc3RhbGwg
dGhlbSwgc2luY2UgaW5zdGFsbGluZworICAgIC8vIHRoZW0gbWlnaHQgY2F1c2UgYSBHQy4gV2Ug
ZG9uJ3Qgd2FudCB0byBHQyByaWdodCBub3cuCisgICAgaWYgKHdvcmtsaXN0KSB7CisgICAgICAg
IHdvcmtsaXN0LT53YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoKnRoaXMpOworICAgICAg
ICB3b3JrbGlzdC0+cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKCp0aGlzKTsKKyAgICB9CisgICAg
CiAgICAgLy8gQ2xlYXIgdGhpcyBmaXJzdCB0byBlbnN1cmUgdGhhdCBub2JvZHkgdHJpZXMgdG8g
cmVtb3ZlIHRoZW1zZWx2ZXMgZnJvbSBpdC4KICAgICBtX3BlckJ5dGVjb2RlUHJvZmlsZXIuY2xl
YXIoKTsKICAgICAKQEAgLTQzNCw4ICs0NDIsMTkgQEAgdm9pZCBWTTo6c3RvcFNhbXBsaW5nKCkK
ICAgICBpbnRlcnByZXRlci0+c3RvcFNhbXBsaW5nKCk7CiB9CiAKK3ZvaWQgVk06OnByZXBhcmVU
b0Rpc2NhcmRDb2RlKCkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIXdvcmtsaXN0
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgd29ya2xpc3QtPmNvbXBsZXRlQWxsUGxhbnNG
b3JWTSgqdGhpcyk7CisjZW5kaWYKK30KKwogdm9pZCBWTTo6ZGlzY2FyZEFsbENvZGUoKQogewor
ICAgIHByZXBhcmVUb0Rpc2NhcmRDb2RlKCk7CiAgICAgbV9jb2RlQ2FjaGUtPmNsZWFyKCk7CiAg
ICAgaGVhcC5kZWxldGVBbGxDb21waWxlZENvZGUoKTsKICAgICBoZWFwLnJlcG9ydEFiYW5kb25l
ZE9iamVjdEdyYXBoKCk7CkBAIC00NzcsNiArNDk2LDggQEAgc3RydWN0IFN0YWNrUHJlc2Vydmlu
Z1JlY29tcGlsZXIgOiBwdWJsaQogCiB2b2lkIFZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgp
CiB7CisgICAgcHJlcGFyZVRvRGlzY2FyZENvZGUoKTsKKyAgICAKICAgICBpZiAoZHluYW1pY0ds
b2JhbE9iamVjdCkgewogICAgICAgICBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyIHJlY29tcGls
ZXI7CiAgICAgICAgIEhhc2hTZXQ8SlNDZWxsKj4gcm9vdHM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1MDM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgbmFtZXNwYWNlIERGRyB7CiAgICAgY2xh
c3MgTG9uZ0xpdmVkU3RhdGU7CisgICAgY2xhc3MgV29ya2xpc3Q7CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogCkBAIC0yMDcsNyArMjA4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEhlYXAgaGVhcDsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAg
IE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0YXRlOworICAgICAgICBPd25QdHI8
REZHOjpMb25nTGl2ZWRTdGF0ZT4gZGZnU3RhdGU7CisgICAgICAgIFJlZlB0cjxERkc6Oldvcmts
aXN0PiB3b3JrbGlzdDsKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgICAgICBWTVR5
cGUgdm1UeXBlOwpAQCAtNDc5LDYgKzQ4MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U0xvY2smIGFwaUxvY2soKSB7IHJldHVybiBtX2FwaUxvY2s7IH0KICAgICAgICAgQ29kZUNhY2hl
KiBjb2RlQ2FjaGUoKSB7IHJldHVybiBtX2NvZGVDYWNoZS5nZXQoKTsgfQogCisgICAgICAgIHZv
aWQgcHJlcGFyZVRvRGlzY2FyZENvZGUoKTsKKyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2
aXNpb24gMTUwMzk4KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAxMy0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYSBz
ZXBhcmF0ZSB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMjgzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgKiB3dGYvQnl0ZVNwaW5Mb2NrLmg6CisgICAgICAgIE1ha2UgaXQgbm9u
LWNvcHlhYmxlLiBXZSBwcmV2aW91c2x5IGhhZCBidWdzIHdoZXJlIHdlIHVzZWQgQnl0ZVNwaW5M
b2NrIGFzIGEgbG9ja2VyLgorICAgICAgICBDbGVhcmx5IHRoYXQncyBiYWQuCisKKyAgICAgICAg
KiB3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOgorICAgICAgICBNYWtlIGl0IHRocmVhZC1zYWZl
IHJlZi1jb3VudGVkLCBzaW5jZSB3ZSBtYXkgbm93IGJlIHBhc3NpbmcgdGhlbSBiZXR3ZWVuIHRo
ZQorICAgICAgICBjb25jdXJyZW50IEpJVCB0aHJlYWQgYW5kIHRoZSBtYWluIHRocmVhZC4KKwog
MjAxMy0wNS0wNiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAg
IENoZXJyeS1waWNrIG1lcmdlZCBzb21lIHBhdGNoZXMgdG8gdGhlIEZUTCBicmFuY2guCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9CeXRlU3BpbkxvY2suaAkocmV2aXNpb24gMTUwMzk4KQorKysgU291cmNlL1dURi93dGYv
Qnl0ZVNwaW5Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMyBAQAogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRl
IDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIEJ5
dGVTcGluTG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZVNwaW5Mb2NrKTsKIHB1
YmxpYzoKICAgICBCeXRlU3BpbkxvY2soKQogICAgICAgICA6IG1fbG9jaygwKQpJbmRleDogU291
cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMTUwMzk4KQorKysgU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxNCArMzEs
MTQgQEAKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1JlZEJs
YWNrVHJlZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAogY2xhc3MgTWV0YUFsbG9jYXRvcjsKIAotY2xhc3MgTWV0YUFsbG9jYXRvckhh
bmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVk
QmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CitjbGFzcyBNZXRh
QWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1ldGFBbGxvY2F0
b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQq
Pjo6Tm9kZSB7CiBwcml2YXRlOgogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRv
ciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lvbiAxNTAzOTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjAyLDcgKzYwMiwxNCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgY29uc3QgVCYgZmlyc3QoKSBjb25zdCB7IHJldHVybiBhdCgwKTsgfQogICAgICAg
ICBUJiBsYXN0KCkgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KICAgICAgICAgY29uc3QgVCYg
bGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9Ci0KKyAgICAgICAgCisgICAg
ICAgIFQgdGFrZUxhc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBUIHJlc3VsdCA9IGxhc3Qo
KTsKKyAgICAgICAgICAgIHJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wg
Y29udGFpbnMoY29uc3QgVSYpIGNvbnN0OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
aXplX3QgZmluZChjb25zdCBVJikgY29uc3Q7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IHNpemVfdCByZXZlcnNlRmluZChjb25zdCBVJikgY29uc3Q7Cg==
</data>
<flag name="review"
          id="223783"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>