<?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>68227</bug_id>
          
          <creation_ts>2011-09-16 00:03:26 -0700</creation_ts>
          <short_desc>DFG JIT should inline Math.abs</short_desc>
          <delta_ts>2011-09-16 11:49:41 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>468348</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-16 00:03:26 -0700</bug_when>
    <thetext>Math.abs is a simple function to inline.  We know exactly what it does.  DFG already has the ability to speculate that it is definitely calling a particular function, thanks to CheckMethod.  Implementing this feature will be a great first step for supporting inlining in general, and other sorts of intrinsic functions in particular.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468350</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-16 00:05:10 -0700</bug_when>
    <thetext>This is a 13% win on Kraken, due to a 61% win on imaging-gaussian-blur.


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;CheckMethod&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc
&quot;MathDotAbs&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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              CheckMethod              MathDotAbs          MathDotAbs v. TipOfTree  
SunSpider:
   3d-cube                                7.8771+-0.2118    ?     7.9524+-0.1532          7.7974+-0.2673         might be 1.0102x faster
   3d-morph                               7.4824+-0.1647          7.3816+-0.1877    ?     7.3948+-0.1308         might be 1.0118x faster
   3d-raytrace                            7.9141+-0.1938    ?     7.9445+-0.1934    ^     7.5801+-0.1588         might be 1.0441x faster
   access-binary-trees                    2.3728+-0.0569          2.2900+-0.0530    ?     2.2988+-0.0655         might be 1.0322x faster
   access-fannkuch                       11.7252+-0.2695    ?    11.7583+-0.1997         11.5732+-0.2085         might be 1.0131x faster
   access-nbody                           4.1582+-0.0611    ?     4.3343+-0.1218    ?     4.8783+-0.8866       ? might be 1.1732x slower
   access-nsieve                          2.6476+-0.0877          2.6017+-0.0657          2.5885+-0.0507         might be 1.0228x faster
   bitops-3bit-bits-in-byte               1.6404+-0.0357    ?     1.6442+-0.0437    ?     1.7019+-0.0660       ? might be 1.0375x slower
   bitops-bits-in-byte                    2.7977+-0.0822          2.6993+-0.0352    ?     2.7583+-0.0610         might be 1.0143x faster
   bitops-bitwise-and                     3.5206+-0.1040    ?     3.6103+-0.0862    ?     3.7339+-0.1119       ? might be 1.0606x slower
   bitops-nsieve-bits                     5.2149+-0.0636    ?     5.3302+-0.1189    ?     5.3482+-0.0815       ? might be 1.0256x slower
   controlflow-recursive                  1.9950+-0.0440    ?     2.0208+-0.0498    ?     2.0828+-0.0918       ? might be 1.0440x slower
   crypto-aes                             7.2947+-0.3756          6.9862+-0.3805          6.9653+-0.3419         might be 1.0473x faster
   crypto-md5                             2.8767+-0.1047          2.8361+-0.1007          2.7773+-0.0539         might be 1.0358x faster
   crypto-sha1                            2.2561+-0.0575          2.1765+-0.0356    ?     2.2091+-0.0720         might be 1.0213x faster
   date-format-tofte                     10.5105+-0.2760         10.3554+-0.1631    ?    10.3874+-0.2410         might be 1.0118x faster
   date-format-xparb                      8.6902+-0.2079    ?     9.0536+-0.2347          8.8852+-0.2032       ? might be 1.0224x slower
   math-cordic                            6.2988+-0.1205          6.1587+-0.1171    ?     6.2109+-0.1638         might be 1.0141x faster
   math-partial-sums                      7.2658+-0.1211    ?     7.3612+-0.1526          7.3564+-0.1448       ? might be 1.0125x slower
   math-spectral-norm                     2.8941+-0.4114    ?     3.1316+-0.6769          2.7383+-0.0906         might be 1.0569x faster
   regexp-dna                            10.7131+-0.2434    ?    10.9977+-0.1918         10.9197+-0.2360       ? might be 1.0193x slower
   string-base64                          5.8277+-0.1519          5.7318+-0.1803    ?     6.0018+-0.2913       ? might be 1.0299x slower
   string-fasta                           7.0203+-0.1499    ?     7.0551+-0.2153          6.9808+-0.1341       
   string-tagcloud                       11.9234+-0.3495    ?    12.2052+-0.4943         11.9608+-0.3251       ?
   string-unpack-code                    19.0595+-0.4566         18.9328+-0.3451         18.3859+-0.2872         might be 1.0366x faster
   string-validate-input                  6.6001+-0.2032          6.4331+-0.1183    ?     6.5165+-0.1550         might be 1.0128x faster

   &lt;arithmetic&gt;                           6.4837+-0.0365    ?     6.4993+-0.0494          6.4627+-0.0509       
   &lt;geometric&gt;                            5.3517+-0.0358    ?     5.3518+-0.0542    ?     5.3537+-0.0428       ?
   &lt;harmonic&gt;                             4.3701+-0.0436          4.3537+-0.0536    ?     4.3803+-0.0349       ?

                                            TipOfTree              CheckMethod              MathDotAbs          MathDotAbs v. TipOfTree  
V8:
   crypto                                83.3726+-0.6100    ?    83.3745+-0.5430         82.8878+-0.3526       
   deltablue                            246.6145+-3.1631    ^   240.5071+-1.2818    ?   243.8680+-2.7147         might be 1.0113x faster
   earley-boyer                          95.5398+-0.6002         94.6500+-0.4064    ?    95.3739+-0.3684       
   raytrace                              75.6773+-6.1967         72.7885+-0.4288         72.7452+-0.5102         might be 1.0403x faster
   regexp                               108.8515+-0.3325        108.4031+-0.5479    ^   106.5182+-0.3822       ^ definitely 1.0219x faster
   richards                             219.0579+-0.7349    ?   219.3573+-2.8656        218.7951+-1.8159       
   splay                                100.3839+-0.9403         99.6274+-0.6926    ^    98.2193+-0.3959       ^ definitely 1.0220x faster

   &lt;arithmetic&gt;                         132.7853+-1.1595        131.2440+-0.5493        131.2011+-0.6375         might be 1.0121x faster
   &lt;geometric&gt;                          119.7848+-1.3477        118.4509+-0.3559        118.1263+-0.3993         might be 1.0140x faster
   &lt;harmonic&gt;                           110.1116+-1.5381        108.8954+-0.2899        108.4592+-0.2939         might be 1.0152x faster

                                            TipOfTree              CheckMethod              MathDotAbs          MathDotAbs v. TipOfTree  
Kraken:
   ai-astar                             633.9435+-4.1433        632.6228+-4.4504    ?   638.0119+-2.3449       ?
   audio-beat-detection                 472.9599+-1.8222    ^   468.2434+-1.5094    !   477.2912+-7.3407       ?
   audio-dft                            424.4090+-1.8641    ?   430.5855+-4.3855    ?   458.9972+-42.7620      ? might be 1.0815x slower
   audio-fft                            369.4709+-1.7994    ^   363.4016+-1.2242    ?   365.5753+-3.3093         might be 1.0107x faster
   audio-oscillator                     319.4655+-1.6668    ^   316.7981+-0.6281    ^   314.1501+-1.7790       ^ definitely 1.0169x faster
   imaging-darkroom                     418.6947+-2.0732    ^   415.0992+-1.2111        414.6453+-0.6410       ^ definitely 1.0098x faster
   imaging-desaturate                   209.1284+-0.7906    ^   207.6594+-0.6454    ?   209.4528+-2.0826       ?
   imaging-gaussian-blur               1736.4665+-7.2265    ^  1574.9463+-7.2155    ^  1077.3633+-4.2862       ^ definitely 1.6118x faster
   json-parse-financial                  48.9103+-0.2949    !    50.7933+-1.0150         50.1767+-0.5739       ! definitely 1.0259x slower
   json-stringify-tinderbox              69.6547+-0.4141         69.3233+-0.1353         69.0610+-0.3808       
   stanford-crypto-aes                  145.1025+-0.9297    ?   145.1324+-0.8121        144.1862+-2.0463       
   stanford-crypto-ccm                  112.5759+-0.5658    ^   111.2905+-0.4928    ?   112.6970+-1.1181       ?
   stanford-crypto-pbkdf2               398.3721+-2.9153        395.1204+-2.0538    ?   400.3701+-5.5710       ?
   stanford-crypto-sha256-iterative     149.4793+-1.5592    ?   149.6702+-0.6328    ?   149.7595+-0.2238       ?

   &lt;arithmetic&gt;                         393.4738+-0.6612    ^   380.7633+-0.9488    ^   348.6955+-2.5650       ^ definitely 1.1284x faster
   &lt;geometric&gt;                          262.9734+-0.4518    ^   260.7038+-0.4816    ^   255.3935+-1.2807       ^ definitely 1.0297x faster
   &lt;harmonic&gt;                           176.2926+-0.4149    ?   177.1632+-0.8505        176.5071+-0.6388       ?

                                            TipOfTree              CheckMethod              MathDotAbs          MathDotAbs v. TipOfTree  
All benchmarks:
   &lt;arithmetic&gt;                         140.5682+-0.2888    ^   136.5612+-0.2688    ^   126.9825+-0.7800       ^ definitely 1.1070x faster
   &lt;geometric&gt;                           27.1244+-0.1400         27.0094+-0.1561         26.8389+-0.1312       ^ definitely 1.0106x faster
   &lt;harmonic&gt;                             7.7144+-0.0761          7.6856+-0.0928    ?     7.7308+-0.0601       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468351</commentid>
    <comment_count>2</comment_count>
      <attachid>107613</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-16 00:09:35 -0700</bug_when>
    <thetext>Created attachment 107613
the patch

This is still a work in progress, as it needs some build magic for other platforms.  I also plan on refactoring the intrinsic handling in DFGByteCodeParser, since I anticipate adding a lot more intrinsics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468354</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-16 00:11:31 -0700</bug_when>
    <thetext>Attachment 107613 did not pass style-queue:

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

Source/JavaScriptCore/runtime/JSGlobalData.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSGlobalData.h:223:  The parameter name &quot;intrinsic&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468362</commentid>
    <comment_count>4</comment_count>
      <attachid>107613</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-16 00:23:26 -0700</bug_when>
    <thetext>Comment on attachment 107613
the patch

Attachment 107613 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9711076</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468373</commentid>
    <comment_count>5</comment_count>
      <attachid>107617</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-16 01:08:08 -0700</bug_when>
    <thetext>Created attachment 107617
the patch - fix a lot of stuff

This is still a bit of a work in progress because the changes are pretty extensive and I&apos;m not sure I&apos;ve gotten it right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468391</commentid>
    <comment_count>6</comment_count>
      <attachid>107625</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-16 01:54:05 -0700</bug_when>
    <thetext>Created attachment 107625
the patch - refactored

Refactored the intrinsic handling in DFG::ByteCodeParser to be more reasonable, particularly for when we add more intrinsics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468677</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-16 11:49:41 -0700</bug_when>
    <thetext>Landed in r95310.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107613</attachid>
            <date>2011-09-16 00:09:35 -0700</date>
            <delta_ts>2011-09-16 01:08:08 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>mathdotabs_patch_1.diff</filename>
            <type>text/plain</type>
            <size>31926</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUyNzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAK
KzIwMTEtMDktMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmxpbmUgTWF0aC5hYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgdGhlIGFiaWxpdHkgdG8gdHJh
Y2sgaW50cmluc2ljIGZ1bmN0aW9ucyB0aHJvdWdob3V0IHRoZQorICAgICAgICBob3N0IGZ1bmN0
aW9uIGluZnJhc3RydWN0dXJlLCBzbyB0aGF0IHRoZSBERkcgY2FuIGVhc2lseSBxdWVyeQorICAg
ICAgICB3aGV0aGVyIG9yIG5vdCBhIGNhbGwncyB0YXJnZXQgaXMgaW50cmluc2ljLCBhbmQgaWYg
c28sIHdoaWNoCisgICAgICAgIGludHJpbnNpYyBpdCBpcy4KKyAgICAgICAgCisgICAgICAgIE9u
IHRvcCBvZiB0aGlzLCBpdCBhZGRzIE1hdGguYWJzIGludHJpbnNpY3MgdG8gREZHLiBDYWxsKE1h
dGguYWJzKQorICAgICAgICBpcyB0cmFuc2Zvcm1lZCBpbnRvIFZhbHVlVG9OdW1iZXI8LUFyaXRo
QWJzIG5vZGVzLiBUaGVzZSBub2RlcworICAgICAgICB0aGVuIGdldCBvcHRpbWl6ZWQgdXNpbmcg
dGhlIHVzdWFsIHRyaWNrcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcmVzdWx0cyBpbiBhIGJp
ZyB3aW4gaW4gaW1hZ2luZy1nYXVzc2lhbi1ibHVyOiA2MSUgZmFzdGVyCisgICAgICAgIHRoYW4g
YmVmb3JlLiBUaGUgbmV0IHdpbiBvbiBLcmFrZW4gaXMgYXJvdW5kIDEzJS4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3Jl
YXRlX2hhc2hfdGFibGU6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzRnVuY3Rpb25Db25z
dGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50
KToKKyAgICAgICAgKiBkZmcvREZHSW50cmluc2ljLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6aXNGdW5jdGlvbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJh
dG9yOjp2YWx1ZU9mRnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzRnVuY3Rpb25Db25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnZhbHVlT2ZGdW5jdGlvbkNvbnN0
YW50KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAqIGpp
dC9KSVRTdHVicy5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAg
IChKU0M6OkV4ZWN1dGFibGVCYXNlOjppbnRyaW5zaWMpOgorICAgICAgICAoSlNDOjpOYXRpdmVF
eGVjdXRhYmxlOjppbnRyaW5zaWMpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpO
YXRpdmVFeGVjdXRhYmxlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlv
bik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKiBydW50aW1l
L0xvb2t1cC5jcHA6CisgICAgICAgIChKU0M6Okhhc2hUYWJsZTo6Y3JlYXRlVGFibGUpOgorICAg
ICAgICAoSlNDOjpzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICogcnVudGltZS9M
b29rdXAuaDoKKyAgICAgICAgKEpTQzo6SGFzaEVudHJ5Ojppbml0aWFsaXplKToKKyAgICAgICAg
KEpTQzo6SGFzaEVudHJ5OjppbnRyaW5zaWMpOgorCiAyMDExLTA5LTE1ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCBkb2VzIG5vdCBvcHRpbWl6ZSBt
ZXRob2RfY2hlY2sKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jcmVhdGVfaGFzaF90YWJs
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY3JlYXRlX2hhc2hfdGFibGUJ
KHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0ZV9oYXNoX3Rh
YmxlCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNiArMjUyLDExIEBAIHN1YiBvdXRwdXQoKSB7CiAg
ICAgcHJpbnQgIiNlbHNlXG4iOwogICAgIHByaW50ICIjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihn
ZW5lcmF0b3IpXG4iOwogICAgIHByaW50ICIjZW5kaWZcbiI7CisgICAgcHJpbnQgIiNpZiBFTkFC
TEUoREZHX0pJVClcbiI7CisgICAgcHJpbnQgIiNkZWZpbmUgSU5UUklOU0lDKGludHJpbnNpYykg
LCBpbnRyaW5zaWNcbiI7CisgICAgcHJpbnQgIiNlbHNlXG4iOworICAgIHByaW50ICIjZGVmaW5l
IElOVFJJTlNJQyhpbnRyaW5zaWMpXG4iOworICAgIHByaW50ICIjZW5kaWZcbiI7CiAgICAgcHJp
bnQgIlxuc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGVWYWx1ZSAke25hbWVFbnRyaWVzfVxb
JGNvdW50XF0gPSB7XG4iOwogICAgIG15ICRpID0gMDsKICAgICBmb3JlYWNoIG15ICRrZXkgKEBr
ZXlzKSB7CkBAIC0yNzIsNiArMjc3LDcgQEAgc3ViIG91dHB1dCgpIHsKICAgICAgICAgICAgICRz
ZWNvbmRWYWx1ZSA9ICIwIjsKICAgICAgICAgfQogICAgICAgICBteSAkdGh1bmtHZW5lcmF0b3Ig
PSAiMCI7CisgICAgICAgIG15ICRpbnRyaW5zaWMgPSAiREZHOjpOb0ludHJpbnNpYyI7CiAgICAg
ICAgIGlmICgka2V5IGVxICJjaGFyQ29kZUF0IikgewogICAgICAgICAgICAgJHRodW5rR2VuZXJh
dG9yID0gImNoYXJDb2RlQXRUaHVua0dlbmVyYXRvciI7CiAgICAgICAgIH0KQEAgLTI5MCw2ICsy
OTYsNyBAQCBzdWIgb3V0cHV0KCkgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCRr
ZXkgZXEgImFicyIpIHsKICAgICAgICAgICAgICAgICAkdGh1bmtHZW5lcmF0b3IgPSAiYWJzVGh1
bmtHZW5lcmF0b3IiOworICAgICAgICAgICAgICAgICRpbnRyaW5zaWMgPSAiREZHOjpBYnNJbnRy
aW5zaWMiOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCRrZXkgZXEgImZsb29yIikg
ewogICAgICAgICAgICAgICAgICR0aHVua0dlbmVyYXRvciA9ICJmbG9vclRodW5rR2VuZXJhdG9y
IjsKQEAgLTMwNywxMCArMzE0LDEwIEBAIHN1YiBvdXRwdXQoKSB7CiAgICAgICAgICAgICAgICAg
JHRodW5rR2VuZXJhdG9yID0gImxvZ1RodW5rR2VuZXJhdG9yIjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBwcmludCAiICAgeyBcIiRrZXlcIiwgJGF0dHJzWyRpXSwgKGludHB0
cl90KSIgLiAkY2FzdFN0ciAuICIoJGZpcnN0VmFsdWUpLCAoaW50cHRyX3QpJHNlY29uZFZhbHVl
IFRIVU5LX0dFTkVSQVRPUigkdGh1bmtHZW5lcmF0b3IpIH0sXG4iOworICAgICAgICBwcmludCAi
ICAgeyBcIiRrZXlcIiwgJGF0dHJzWyRpXSwgKGludHB0cl90KSIgLiAkY2FzdFN0ciAuICIoJGZp
cnN0VmFsdWUpLCAoaW50cHRyX3QpJHNlY29uZFZhbHVlIFRIVU5LX0dFTkVSQVRPUigkdGh1bmtH
ZW5lcmF0b3IpIElOVFJJTlNJQygkaW50cmluc2ljKSB9LFxuIjsKICAgICAgICAgJGkrKzsKICAg
ICB9Ci0gICAgcHJpbnQgIiAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfVxuIjsK
KyAgICBwcmludCAiICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSBJTlRSSU5TSUMo
REZHOjpOb0ludHJpbnNpYykgfVxuIjsKICAgICBwcmludCAifTtcblxuIjsKICAgICBwcmludCAi
I3VuZGVmIFRIVU5LX0dFTkVSQVRPUlxuIjsKICAgICBwcmludCAiZXh0ZXJuIEpTQ19DT05TVF9I
QVNIVEFCTEUgSGFzaFRhYmxlICRuYW1lID1cbiI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzMs
NiArNzMsNyBAQAogCQkwRkQ4MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTgyMTQxRjNGQzkwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTg2MTQxRjNG
RjEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0
ZWRUeXBlLmNwcCAqLzsgfTsKIAkJMEZEODJFOTAxNDIwN0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKKwkJMEZE
ODJFRjUxNDIzMDc1QjAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFRjMxNDIzMDczOTAwMTc5Qzk0IC8q
IERGR0ludHJpbnNpYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4
MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9
OwogCQkxNDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFG
QkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTgxMyw2ICs4
MTQsNyBAQAogCQkwRkQ4MkU4MjE0MUYzRkM5MDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm91bmRzQ2hlY2tlZFBvaW50
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5
Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJlZGljdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEODJFRjMxNDIzMDczOTAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRyaW5zaWMuaDsgcGF0aCA9
IGRmZy9ERkdJbnRyaW5zaWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2
NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNC
YXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjI3LDYgKzIyMjksNyBAQAog
CQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZH
SW50cmluc2ljLmggKi8sCiAJCQkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVu
dHJ5LmNwcCAqLywKIAkJCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnku
aCAqLywKIAkJCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNw
cCAqLywKQEAgLTI0MjYsNiArMjQyOSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5
IC8qIEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2
NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5
ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkVG
NTE0MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQ4MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTUxNDFEQUVFRTAwMTc5Qzk0IC8qIFByZWRpY3Rpb25U
cmFja2VyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTY5LDYgKzExNjksNTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfZW5kKTsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBjYWxsVGFyZ2V0ID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaWYgKG1f
Z3JhcGguaXNGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCAqbV9nbG9iYWxEYXRhLCBjYWxs
VGFyZ2V0KSkgeworICAgICAgICAgICAgICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7IC8vIEF2b2lk
IHVzaW5nIGdvdG8ncworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCBhcmdD
b3VudCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgICAgICBpbnQgZmlyc3RBcmcgPSByZWdpc3Rlck9mZnNldCAtIGFyZ0NvdW50IC0g
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgICAgIGludCBs
YXN0QXJnID0gZmlyc3RBcmcgKyBhcmdDb3VudCAtIDE7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHJlc3VsdD8KKyAgICAgICAgICAgICAgICBib29s
IHVzZXNSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzdWx0T3BlcmFuZCA9
IDA7IC8vIG1ha2UgY29tcGlsZXIgaGFwcHkKKyAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiog
cHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2Nh
bGwpOworICAgICAgICAgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5z
dHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0T3BlcmFuZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgICAgICAgICAgdXNlc1Jlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaC52YWx1ZU9m
RnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgKm1fZ2xvYmFsRGF0YSwgY2FsbFRhcmdldCkt
PmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFic0lu
dHJpbnNpYzogeworICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXNSZXN1bHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgZXhlY3V0aW5n
IGFicyBmb3IgZWZmZWN0LCBzbyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBk
ZWFkIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
ZG9uJ3QgY2FyZSBhYm91dCB0aGUgdGhpcyBhcmd1bWVudC4gSWYgd2UgZG9uJ3QgaGF2ZSBhbgor
ICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudCB0aGVuIG1ha2UgdGhpcyBKU0NvbnN0YW50
KFVuZGVmaW5lZCkuCisgICAgICAgICAgICAgICAgICAgIGludCBhYnNBcmcgPSBmaXJzdEFyZyAr
IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChhYnNBcmcgPiBsYXN0QXJnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNvbnN0YW50VW5kZWZpbmVkKCkpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQocmVz
dWx0T3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFicywgZ2V0VG9OdW1iZXIoYWJzQXJnKSkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjYXNlIE5vSW50cmluc2ljOgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBORVhUX09QQ09ERSgpIGhhcyB0byBiZSBpbnNpZGUgYnJhY2VzLgorICAg
ICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBjYWxs
ID0gYWRkQ2FsbChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDYWxsKTsKICAgICAg
ICAgICAgIGFsaWFzZXMucmVjb3JkQ2FsbChjYWxsKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX2NhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNp
b24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzOCw2ICsyMzgsMTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIGF0KG5vZGVJbmRleCkuaXNCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKTsKICAgICB9Cisg
ICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlm
ICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmICghZ2V0SlNGdW5jdGlvbihnbG9iYWxEYXRhLCB2YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2ssIG5vZGVJbmRleCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50
IHZhbHVlcyBmcm9tIG5vZGVzLgogICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewpAQCAtMjU3LDYgKzI2
NSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnRO
b2RlKGNvZGVCbG9jaywgbm9kZUluZGV4KS5nZXRCb29sZWFuKCk7CiAgICAgfQorICAgIEpTRnVu
Y3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAg
ICBKU0NlbGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbihnbG9iYWxEYXRhLCB2YWx1ZU9mSlND
b25zdGFudChjb2RlQmxvY2ssIG5vZGVJbmRleCkpOworICAgICAgICBBU1NFUlQoZnVuY3Rpb24p
OworICAgICAgICByZXR1cm4gYXNGdW5jdGlvbihmdW5jdGlvbik7CisgICAgfQogCiAjaWZuZGVm
IE5ERUJVRwogICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5cGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRyaW5zaWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludHJpbnNpYy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRyaW5zaWMuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR0ludHJpbnNpY19oCisjZGVmaW5lIERGR0ludHJpbnNpY19oCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBJbnRyaW5zaWMgeworICAgIE5v
SW50cmluc2ljLAorICAgIEFic0ludHJpbnNpYworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gREZHSW50cmluc2ljX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NTI3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MjYsMTAgKzQyNiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBpc0RvdWJs
ZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzRG91YmxlQ29u
c3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCk7IH0K
ICAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJu
IG1faml0LmlzQm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzRnVuY3Rp
b25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0Z1bmN0aW9u
Q29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQudmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZUluZGV4KTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRl
eCk7IH0KICAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
IHsgcmV0dXJuIG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBib29s
IHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9q
aXQudmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlSW5kZXgpOyB9CisgICAgSlNGdW5jdGlvbiog
dmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9q
aXQudmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNOdWxs
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIGlmICghaXNDb25z
dGFudChub2RlSW5kZXgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSwxMSArMjUxLDEzIEBAIHB1
YmxpYzoKICAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyBy
ZXR1cm4gZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9
CiAgICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJu
IGdyYXBoKCkuaXNOdW1iZXJDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4KTsgfQogICAg
IGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3Jh
cGgoKS5pc0Jvb2xlYW5Db25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4KTsgfQorICAgIGJv
b2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBo
KCkuaXNGdW5jdGlvbkNvbnN0YW50KGNvZGVCbG9jaygpLCAqZ2xvYmFsRGF0YSgpLCBub2RlSW5k
ZXgpOyB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5v
ZGVzLgogICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4
KTsgfQogICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChjb2RlQmxvY2soKSwgbm9k
ZUluZGV4KTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQoY29kZUJsb2Nr
KCksIG5vZGVJbmRleCk7IH0KICAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mQm9vbGVhbkNvbnN0YW50KGNv
ZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CisgICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9u
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mRnVu
Y3Rpb25Db25zdGFudChjb2RlQmxvY2soKSwgKmdsb2JhbERhdGEoKSwgbm9kZUluZGV4KTsgfQog
CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBKSVQgZ2VuZXJhdGUgZHluYW1pYywgZGVidWctb25seSBj
aGVja3MgLSBha2luIHRvIEFTU0VSVHMuCiAjaWYgRU5BQkxFKERGR19KSVRfQVNTRVJUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk1MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2
ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIG1hY3JvKEFyaXRoTXVsLCBOb2RlUmVzdWx0TnVtYmVy
KSBcCiAgICAgbWFjcm8oQXJpdGhEaXYsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhB
cml0aE1vZCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoQWJzLCBOb2RlUmVz
dWx0TnVtYmVyKSBcCiAgICAgLyogQXJpdGhtZXRpYyBvcGVyYXRvcnMgY2FsbCBUb051bWJlciBv
biB0aGVpciBvcGVyYW5kcy4gKi9cCiAgICAgbWFjcm8oVmFsdWVUb051bWJlciwgTm9kZVJlc3Vs
dE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE1LDYgKzIxNSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIGNoaWxkID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAg
ICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24oY2hpbGQpKQorICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2dpY2FsTm90OgogICAgICAgICBj
YXNlIENvbXBhcmVMZXNzOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1Nyw2ICsxMDU3LDMyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaW50ZWdlclJlc3VsdChlZHguZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAg
ICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIob3AxLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQucnNoaWZ0MzIocmVzdWx0LmdwcigpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMxKSwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAg
ICAgICBtX2ppdC5hZGQzMihzY3JhdGNoLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgbV9qaXQueG9yMzIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBy
ZXN1bHQuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSA8PCAzMSkpKTsKKyAg
ICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEZQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IG5lZ2F0aXZlWmVyb0NvbnN0YW50ID0gLTAuMDsKKyAgICAgICAgCisgICAgICAgIG1faml0Lmxv
YWREb3VibGUoJm5lZ2F0aXZlWmVyb0NvbnN0YW50LCByZXN1bHQuZnByKCkpOworICAgICAgICBt
X2ppdC5hbmRub3REb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KIAogICAgIGNhc2UgTG9naWNhbE5vdDogewogICAgICAgICBpZiAoaXNLbm93bkJvb2xl
YW4obm9kZS5jaGlsZDEoKSkpIHsKQEAgLTE1NDQsNiArMTU3MCw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgogICAg
IGNhc2UgQ29uc3RydWN0OgorICAgICAgICAKKyAgICAgICAgCiAgICAgICAgIGVtaXRDYWxsKG5v
ZGUpOwogICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2ODYsMTYgKzM2ODYsMTYgQEAgTmF0aXZl
RXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogewogICAgIHN0ZDo6cGFpcjxIb3N0
RnVuY3Rpb25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0
dWJNYXAtPmFkZChmdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKICAgICBpZiAo
ISplbnRyeS5maXJzdC0+c2Vjb25kKQotICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgq
Z2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKSVQ6OmNv
bXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0
cnVjdCgpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKKyAgICAgICAgZW50cnku
Zmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgq
Z2xvYmFsRGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlv
biksIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9y
LCBERkc6Ok5vSW50cmluc2ljKSk7CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0
KCk7CiB9CiAKLU5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IpCitOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5j
dGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlv
biwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMpCiB7
CiAgICAgc3RkOjpwYWlyPEhvc3RGdW5jdGlvblN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRy
eSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1
dGFibGU+KCkpOwogICAgIGlmICghKmVudHJ5LmZpcnN0LT5zZWNvbmQpIHsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSA/IGdlbmVy
YXRvcihnbG9iYWxEYXRhKSA6IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwotICAgICAgICBlbnRy
eS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRl
KCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xv
YmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5j
dGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3Rp
TmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgaW50cmlu
c2ljKSk7CiAgICAgfQogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gOTUyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgSklUU3R1YnNfaAogCiAjaW5jbHVkZSAiQ2FsbERhdGEu
aCIKKyNpbmNsdWRlICJERkdJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9y
cy5oIgpAQCAtMjk3LDcgKzI5OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY3RpU3R1YihKU0dsb2JhbERhdGEqLCBUaHVua0dlbmVyYXRvcik7CiAK
ICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEq
LCBOYXRpdmVGdW5jdGlvbik7Ci0gICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlv
blN0dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yKTsKKyAg
ICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBO
YXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIERGRzo6SW50cmluc2ljKTsKIAogICAgICAg
ICB2b2lkIGNsZWFySG9zdEZ1bmN0aW9uU3R1YnMoKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDEzIEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCiAgICAg
bV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVE
OwogfQogCisjaWYgRU5BQkxFKERGR19KSVQpCitERkc6OkludHJpbnNpYyBFeGVjdXRhYmxlQmFz
ZTo6aW50cmluc2ljKCkgY29uc3QKK3sKKyAgICByZXR1cm4gREZHOjpOb0ludHJpbnNpYzsKK30K
KyNlbmRpZgorCiBjbGFzcyBFeGVjdXRhYmxlRmluYWxpemVyIDogcHVibGljIFdlYWtIYW5kbGVP
d25lciB7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUs
IHZvaWQqKQogICAgIHsKQEAgLTcwLDYgKzc3LDEzIEBAIE5hdGl2ZUV4ZWN1dGFibGU6On5OYXRp
dmVFeGVjdXRhYmxlKCkKIHsKIH0KIAorI2lmIEVOQUJMRShERkdfSklUKQorREZHOjpJbnRyaW5z
aWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmluc2ljKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
bnRyaW5zaWM7Cit9CisjZW5kaWYKKwogY29uc3QgQ2xhc3NJbmZvIFNjcmlwdEV4ZWN1dGFibGU6
OnNfaW5mbyA9IHsgIlNjcmlwdEV4ZWN1dGFibGUiLCAmRXhlY3V0YWJsZUJhc2U6OnNfaW5mbywg
MCwgMCB9OwogCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2
YWxFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTUy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gaGFzSklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAgICAgICB9CiAKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKyAgICAgICAgdmlydHVhbCBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMoKSBj
b25zdDsKKyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKSVRDb2RlIG1faml0Q29k
ZUZvckNhbGw7CiAgICAgICAgIEpJVENvZGUgbV9qaXRDb2RlRm9yQ29uc3RydWN0OwpAQCAtMTcz
LDE1ICsxNzcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgRXhlY3V0YWJs
ZUJhc2UgQmFzZTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHN0YXRpYyBOYXRpdmVFeGVj
dXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKKyAgICAg
ICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9u
IGNvbnN0cnVjdG9yLCBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBpZiAoIWNh
bGxUaHVuaykgewogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgKGFsbG9jYXRlQ2Vs
bDxOYXRpdmVFeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGds
b2JhbERhdGEsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICAgICAgZXhlY3V0
YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgSklUQ29kZSgpLCBKSVRDb2RlKCkpOwor
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIEpJ
VENvZGUoKSwgSklUQ29kZSgpLCBpbnRyaW5zaWMpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0
YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5j
dGlvbiwgY29uc3RydWN0b3IpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEsIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBKSVRD
b2RlOjpIb3N0RnVuY3Rpb24oY29uc3RydWN0VGh1bmspKTsKKyAgICAgICAgICAgICAgICBleGVj
dXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24o
Y2FsbFRodW5rKSwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVjdFRodW5rKSwgaW50cmlu
c2ljKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAg
ICAgICB9CkBAIC0yMDQsMTUgKzIwOCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByb3Rl
Y3RlZDoKICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSklUQ29kZSBjYWxsVGh1bmssIEpJVENvZGUgY29uc3RydWN0
VGh1bmspCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKSVRDb2RlIGNhbGxUaHVuaywgSklUQ29kZSBjb25zdHJ1Y3RUaHVuaywgREZHOjpJbnRy
aW5zaWMgaW50cmluc2ljKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBjYWxsVGh1
bms7CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBjb25zdHJ1Y3RUaHVuazsK
ICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGNhbGxUaHVuay5h
ZGRyZXNzRm9yQ2FsbCgpOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2sgPSBjb25zdHJ1Y3RUaHVuay5hZGRyZXNzRm9yQ2FsbCgpOworI2lmIEVOQUJMRShE
RkdfSklUKQorICAgICAgICAgICAgbV9pbnRyaW5zaWMgPSBpbnRyaW5zaWM7CisjZW5kaWYKICAg
ICAgICAgfQogI2VuZGlmCisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICB2
aXJ0dWFsIERGRzo6SW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0OworI2VuZGlmCiAgCiAgICAg
cHJpdmF0ZToKICNpZiBFTkFCTEUoSklUKQpAQCAtMjM1LDYgKzI0Niw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyBQcm9iYWJseSBzaG91bGQgYmUgYSBOYXRpdmVDb25zdHJ1Y3Rvciwg
YnV0IHRoaXMgd2lsbCBjdXJyZW50bHkgcmVxdWlyZSByZXdyaXRpbmcgdGhlIEpJVAogICAgICAg
ICAvLyB0cmFtcG9saW5lLiBJdCBtYXkgYmUgZWFzaWVyIHRvIG1ha2UgTmF0aXZlRnVuY3Rpb24g
YmUgcGFzc2VkICd0aGlzJyBhcyBhIHBhcnQgb2YgdGhlIEFyZ0xpc3QuCiAgICAgICAgIE5hdGl2
ZUZ1bmN0aW9uIG1fY29uc3RydWN0b3I7CisgICAgICAgIAorICAgICAgICBERkc6OkludHJpbnNp
YyBtX2ludHJpbnNpYzsKICAgICB9OwogCiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZSA6IHB1
YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEw
LDkgKzQxMCw5IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEYKIHsK
ICAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24pOwog
fQotTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZl
RnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK05hdGl2ZUV4ZWN1
dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIERGRzo6SW50cmluc2ljIGludHJpbnNpYykK
IHsKLSAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24s
IGdlbmVyYXRvcik7CisgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKHRoaXMs
IGZ1bmN0aW9uLCBnZW5lcmF0b3IsIGludHJpbnNpYyk7CiB9CiAjZWxzZQogTmF0aXZlRXhlY3V0
YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rp
b24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
aAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAi
Q2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNs
dWRlICJERkdJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJEYXRlSW5zdGFuY2VDYWNoZS5oIgogI2lu
Y2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKQEAgLTIx
OSw3ICsyMjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGppdFN0dWJzLT5jdGlTdHViKHRoaXMsIGdlbmVyYXRvcik7CiAgICAgICAgIH0KLSAgICAg
ICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBUaHVu
a0dlbmVyYXRvcik7CisgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihO
YXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIERGRzo6SW50cmluc2ljIGludHJpbnNpYyk7
CiAjZW5kaWYKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2
ZUZ1bmN0aW9uKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAu
Y3BwCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xv
b2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkgQEAgdm9pZCBIYXNoVGFibGU6
OmNyZWF0ZVRhYmxlKEpTR2xvYmFsRGF0YQogICAgICAgICBlbnRyeS0+aW5pdGlhbGl6ZShpZGVu
dGlmaWVyLCB2YWx1ZXNbaV0uYXR0cmlidXRlcywgdmFsdWVzW2ldLnZhbHVlMSwgdmFsdWVzW2ld
LnZhbHVlMgogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdmFs
dWVzW2ldLmdlbmVyYXRvcgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIHZhbHVlc1tpXS5pbnRyaW5zaWMKKyNlbmRpZgogI2VuZGlmCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICAgfQpAQCAtNzksNyArODIsNyBAQCB2b2lkIHNldFVwU3Rh
dGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKTsKICNpZiBFTkFCTEUoSklUKQogICAg
ICAgICBpZiAoZW50cnktPmdlbmVyYXRvcigpKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBKU0Z1
bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9u
U3RydWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGV4ZWMt
Pmdsb2JhbERhdGEoKS5nZXRIb3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5n
ZW5lcmF0b3IoKSkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCksIGVu
dHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmdsb2JhbERhdGEoKS5n
ZXRIb3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5nZW5lcmF0b3IoKSwgZW50
cnktPmludHJpbnNpYygpKSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgZnVu
Y3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPmZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0
eU5hbWUsIGVudHJ5LT5mdW5jdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xvb2t1cC5oCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5l
IExvb2t1cF9oCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJERkdJbnRyaW5z
aWMuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKQEAgLTQ0LDYgKzQ1LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGludHB0cl90IHZhbHVlMjsKICNpZiBFTkFCTEUoSklUKQogICAgICAg
ICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3I7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAg
IERGRzo6SW50cmluc2ljIGludHJpbnNpYzsKKyNlbmRpZgogI2VuZGlmCiAgICAgfTsKIApAQCAt
NTgsNiArNjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpbml0aWFsaXplKFN0
cmluZ0ltcGwqIGtleSwgdW5zaWduZWQgY2hhciBhdHRyaWJ1dGVzLCBpbnRwdHJfdCB2MSwgaW50
cHRyX3QgdjIKICNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgICAgICAgICAgICAgLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IgPSAwCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAsIERGRzo6SW50cmluc2ljIGludHJpbnNpYyA9IERGRzo6Tm9JbnRyaW5z
aWMKKyNlbmRpZgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgIHsK
QEAgLTY3LDYgKzc0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX3Uuc3RvcmUu
dmFsdWUyID0gdjI7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgIG1fdS5mdW5jdGlvbi5n
ZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAgICBt
X3UuZnVuY3Rpb24uaW50cmluc2ljID0gaW50cmluc2ljOworI2VuZGlmCiAjZW5kaWYKICAgICAg
ICAgICAgIG1fbmV4dCA9IDA7CiAgICAgICAgIH0KQEAgLTc4LDYgKzg4LDE1IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yKCkgY29uc3QgeyBBU1NFUlQobV9hdHRyaWJ1dGVzICYgRnVuY3Rpb24pOyByZXR1cm4gbV91
LmZ1bmN0aW9uLmdlbmVyYXRvcjsgfQorICAgICAgICBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9hdHRyaWJ1dGVzICYgRnVu
Y3Rpb24pOworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgcmV0dXJuIG1fdS5mdW5j
dGlvbi5pbnRyaW5zaWM7CisjZWxzZQorICAgICAgICAgICAgcmV0dXJuIERGRzo6Tm9JbnRyaW5z
aWM7CisjZW5kaWYKKyAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIGZ1
bmN0aW9uKCkgY29uc3QgeyBBU1NFUlQobV9hdHRyaWJ1dGVzICYgRnVuY3Rpb24pOyByZXR1cm4g
bV91LmZ1bmN0aW9uLmZ1bmN0aW9uVmFsdWU7IH0KICAgICAgICAgdW5zaWduZWQgY2hhciBmdW5j
dGlvbkxlbmd0aCgpIGNvbnN0IHsgQVNTRVJUKG1fYXR0cmlidXRlcyAmIEZ1bmN0aW9uKTsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fdS5mdW5jdGlvbi5sZW5ndGgpOyB9CkBA
IC0xMDQsNiArMTIzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgaW50cHRy
X3QgbGVuZ3RoOyAvLyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBmdW5jdGlvbgogI2lmIEVOQUJM
RShKSVQpCiAgICAgICAgICAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yOworI2lmIEVO
QUJMRShERkdfSklUKQorICAgICAgICAgICAgICAgIERGRzo6SW50cmluc2ljIGludHJpbnNpYzsK
KyNlbmRpZgogI2VuZGlmCiAgICAgICAgICAgICB9IGZ1bmN0aW9uOwogICAgICAgICAgICAgc3Ry
dWN0IHsK
</data>
<flag name="commit-queue"
          id="104348"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107617</attachid>
            <date>2011-09-16 01:08:08 -0700</date>
            <delta_ts>2011-09-16 01:54:05 -0700</delta_ts>
            <desc>the patch - fix a lot of stuff</desc>
            <filename>mathdotabs_patch_3.diff</filename>
            <type>text/plain</type>
            <size>37888</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUyNzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjUgQEAK
KzIwMTEtMDktMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmxpbmUgTWF0aC5hYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgdGhlIGFiaWxpdHkgdG8gdHJh
Y2sgaW50cmluc2ljIGZ1bmN0aW9ucyB0aHJvdWdob3V0IHRoZQorICAgICAgICBob3N0IGZ1bmN0
aW9uIGluZnJhc3RydWN0dXJlLCBzbyB0aGF0IHRoZSBERkcgY2FuIGVhc2lseSBxdWVyeQorICAg
ICAgICB3aGV0aGVyIG9yIG5vdCBhIGNhbGwncyB0YXJnZXQgaXMgaW50cmluc2ljLCBhbmQgaWYg
c28sIHdoaWNoCisgICAgICAgIGludHJpbnNpYyBpdCBpcy4KKyAgICAgICAgCisgICAgICAgIE9u
IHRvcCBvZiB0aGlzLCBpdCBhZGRzIE1hdGguYWJzIGludHJpbnNpY3MgdG8gREZHLiBDYWxsKE1h
dGguYWJzKQorICAgICAgICBpcyB0cmFuc2Zvcm1lZCBpbnRvIFZhbHVlVG9OdW1iZXI8LUFyaXRo
QWJzIG5vZGVzLiBUaGVzZSBub2RlcworICAgICAgICB0aGVuIGdldCBvcHRpbWl6ZWQgdXNpbmcg
dGhlIHVzdWFsIHRyaWNrcy4KKyAgICAgICAgCisgICAgICAgIEFsc28gaGFkIHRvIG1ha2UgYSBj
b21wbGV0ZWx5IHVucmVsYXRlZCBjaGFuZ2UgdG8KKyAgICAgICAgRGF0ZUluc3RhbmNlQ2FjaGUu
aCBpbiBvcmRlciB0byBmaXggYSBwcmVleGlzdGluZyBhbHBoYWJldGljYWwKKyAgICAgICAgc29y
dGluZyBwcm9ibGVtIGluIEpTR2xvYmFsRGF0YS5oCisgICAgICAgIAorICAgICAgICBUaGlzIHJl
c3VsdHMgaW4gYSBiaWcgd2luIGluIGltYWdpbmctZ2F1c3NpYW4tYmx1cjogNjElIGZhc3Rlcgor
ICAgICAgICB0aGFuIGJlZm9yZS4gVGhlIG5ldCB3aW4gb24gS3Jha2VuIGlzIGFyb3VuZCAxMyUu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGNyZWF0ZV9oYXNoX3RhYmxlOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpp
c0Z1bmN0aW9uQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mRnVu
Y3Rpb25Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR0ludHJpbnNpYy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGVHZW5lcmF0b3I6OmlzRnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZUdlbmVyYXRvcjo6dmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0Z1
bmN0aW9uQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9m
RnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKiBk
ZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJv
cGFnYXRlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBydW50aW1lL0RhdGVJbnN0YW5j
ZUNhY2hlLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUJhc2U6OmludHJpbnNpYyk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1
dGFibGU6OmludHJpbnNpYyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAg
ICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ok5hdGl2
ZUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvTG9v
a3VwLmNwcDoKKyAgICAgICAgKEpTQzo6SGFzaFRhYmxlOjpjcmVhdGVUYWJsZSk6CisgICAgICAg
IChKU0M6OnNldFVwU3RhdGljRnVuY3Rpb25TbG90KToKKyAgICAgICAgKiBydW50aW1lL0xvb2t1
cC5oOgorICAgICAgICAoSlNDOjpIYXNoRW50cnk6OmluaXRpYWxpemUpOgorICAgICAgICAoSlND
OjpIYXNoRW50cnk6OmludHJpbnNpYyk6CisKIDIwMTEtMDktMTUgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgSklUIGRvZXMgbm90IG9wdGltaXplIG1ldGhv
ZF9jaGVjawpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0ZV9oYXNoX3RhYmxlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jcmVhdGVfaGFzaF90YWJsZQkocmV2
aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY3JlYXRlX2hhc2hfdGFibGUJ
KHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsMTEgQEAgc3ViIG91dHB1dCgpIHsKICAgICBw
cmludCAiI2Vsc2VcbiI7CiAgICAgcHJpbnQgIiNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVy
YXRvcilcbiI7CiAgICAgcHJpbnQgIiNlbmRpZlxuIjsKKyAgICBwcmludCAiI2lmIEVOQUJMRShE
RkdfSklUKVxuIjsKKyAgICBwcmludCAiI2RlZmluZSBJTlRSSU5TSUMoaW50cmluc2ljKSAsIGlu
dHJpbnNpY1xuIjsKKyAgICBwcmludCAiI2Vsc2VcbiI7CisgICAgcHJpbnQgIiNkZWZpbmUgSU5U
UklOU0lDKGludHJpbnNpYylcbiI7CisgICAgcHJpbnQgIiNlbmRpZlxuIjsKICAgICBwcmludCAi
XG5zdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZVZhbHVlICR7bmFtZUVudHJpZXN9XFskY291
bnRcXSA9IHtcbiI7CiAgICAgbXkgJGkgPSAwOwogICAgIGZvcmVhY2ggbXkgJGtleSAoQGtleXMp
IHsKQEAgLTI3Miw2ICsyNzcsNyBAQCBzdWIgb3V0cHV0KCkgewogICAgICAgICAgICAgJHNlY29u
ZFZhbHVlID0gIjAiOwogICAgICAgICB9CiAgICAgICAgIG15ICR0aHVua0dlbmVyYXRvciA9ICIw
IjsKKyAgICAgICAgbXkgJGludHJpbnNpYyA9ICJERkc6Ok5vSW50cmluc2ljIjsKICAgICAgICAg
aWYgKCRrZXkgZXEgImNoYXJDb2RlQXQiKSB7CiAgICAgICAgICAgICAkdGh1bmtHZW5lcmF0b3Ig
PSAiY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yIjsKICAgICAgICAgfQpAQCAtMjkwLDYgKzI5Niw3
IEBAIHN1YiBvdXRwdXQoKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoJGtleSBl
cSAiYWJzIikgewogICAgICAgICAgICAgICAgICR0aHVua0dlbmVyYXRvciA9ICJhYnNUaHVua0dl
bmVyYXRvciI7CisgICAgICAgICAgICAgICAgJGludHJpbnNpYyA9ICJERkc6OkFic0ludHJpbnNp
YyI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoJGtleSBlcSAiZmxvb3IiKSB7CiAg
ICAgICAgICAgICAgICAgJHRodW5rR2VuZXJhdG9yID0gImZsb29yVGh1bmtHZW5lcmF0b3IiOwpA
QCAtMzA3LDEwICszMTQsMTAgQEAgc3ViIG91dHB1dCgpIHsKICAgICAgICAgICAgICAgICAkdGh1
bmtHZW5lcmF0b3IgPSAibG9nVGh1bmtHZW5lcmF0b3IiOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIHByaW50ICIgICB7IFwiJGtleVwiLCAkYXR0cnNbJGldLCAoaW50cHRyX3Qp
IiAuICRjYXN0U3RyIC4gIigkZmlyc3RWYWx1ZSksIChpbnRwdHJfdCkkc2Vjb25kVmFsdWUgVEhV
TktfR0VORVJBVE9SKCR0aHVua0dlbmVyYXRvcikgfSxcbiI7CisgICAgICAgIHByaW50ICIgICB7
IFwiJGtleVwiLCAkYXR0cnNbJGldLCAoaW50cHRyX3QpIiAuICRjYXN0U3RyIC4gIigkZmlyc3RW
YWx1ZSksIChpbnRwdHJfdCkkc2Vjb25kVmFsdWUgVEhVTktfR0VORVJBVE9SKCR0aHVua0dlbmVy
YXRvcikgSU5UUklOU0lDKCRpbnRyaW5zaWMpIH0sXG4iOwogICAgICAgICAkaSsrOwogICAgIH0K
LSAgICBwcmludCAiICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9XG4iOworICAg
IHByaW50ICIgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6
Ok5vSW50cmluc2ljKSB9XG4iOwogICAgIHByaW50ICJ9O1xuXG4iOwogICAgIHByaW50ICIjdW5k
ZWYgVEhVTktfR0VORVJBVE9SXG4iOwogICAgIHByaW50ICJleHRlcm4gSlNDX0NPTlNUX0hBU0hU
QUJMRSBIYXNoVGFibGUgJG5hbWUgPVxuIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3
Myw3IEBACiAJCTBGRDgyRTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
ODIxNDFGM0ZDOTAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQb2ludGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFODYxNDFGM0ZGMTAw
MTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5
cGUuY3BwICovOyB9OwogCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovOyB9OworCQkwRkQ4MkVG
NTE0MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZH
SW50cmluc2ljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQ
b3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJ
CTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJE
MDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODEzLDYgKzgxNCw3
IEBACiAJCTBGRDgyRTgyMTQxRjNGQzkwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb3VuZHNDaGVja2VkUG9pbnRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQg
LyogUHJlZGljdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcmVkaWN0ZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJF
OEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludHJpbnNpYy5oOyBwYXRoID0gZGZn
L0RGR0ludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEy
QTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMjcsNiArMjIyOSw3IEBACiAJCTg2
RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAvKiBERkdJbnRy
aW5zaWMuaCAqLywKIAkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnku
Y3BwICovLAogCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICov
LAogCQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICov
LApAQCAtMjQyNiw2ICsyNDI5LDcgQEAKIAkJCQlCQzI1N0RFODBFMUY1MUM1MDAxNkI2QzkgLyog
QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcg
LyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAw
NkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRUY1MTQy
MzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgy
RTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGlvblRyYWNr
ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NjksNiArMTE2OSw1MyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9lbmQpOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2Ugb3BfY2FsbDogeworICAgICAgICAgICAgTm9kZUluZGV4IGNhbGxUYXJnZXQgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpZiAobV9ncmFw
aC5pc0Z1bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ssICptX2dsb2JhbERhdGEsIGNhbGxUYXJn
ZXQpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsgLy8gQXZvaWQgdXNp
bmcgZ290bydzCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IGFyZ0NvdW50
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAg
ICAgICAgICAgIGludCBmaXJzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0IC0gYXJnQ291bnQgLSBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICAgICAgaW50IGxhc3RB
cmcgPSBmaXJzdEFyZyArIGFyZ0NvdW50IC0gMTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBEbyB3ZSBoYXZlIGEgcmVzdWx0PworICAgICAgICAgICAgICAgIGJvb2wgdXNl
c1Jlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsg
Ly8gbWFrZSBjb21waWxlciBoYXBweQorICAgICAgICAgICAgICAgIEluc3RydWN0aW9uKiBwdXRJ
bnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7
CisgICAgICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVj
dGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkgeworICAgICAgICAgICAgICAg
ICAgICByZXN1bHRPcGVyYW5kID0gcHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgICAg
ICAgICAgICAgICAgICB1c2VzUmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChtX2dyYXBoLnZhbHVlT2ZGdW5j
dGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCAqbV9nbG9iYWxEYXRhLCBjYWxsVGFyZ2V0KS0+ZXhl
Y3V0YWJsZSgpLT5pbnRyaW5zaWMoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQWJzSW50cmlu
c2ljOiB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdXNlc1Jlc3VsdCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBleGVjdXRpbmcgYWJz
IGZvciBlZmZlY3QsIHNvIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGRlYWQg
Y29kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCBjYXJlIGFib3V0IHRoZSB0aGlzIGFyZ3VtZW50LiBJZiB3ZSBkb24ndCBoYXZlIGFuCisgICAg
ICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50IHRoZW4gbWFrZSB0aGlzIEpTQ29uc3RhbnQoVW5k
ZWZpbmVkKS4KKyAgICAgICAgICAgICAgICAgICAgaW50IGFic0FyZyA9IGZpcnN0QXJnICsgMTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFic0FyZyA+IGxhc3RBcmcpCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY29uc3RhbnRVbmRlZmluZWQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChyZXN1bHRP
cGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXRUb051bWJlcihhYnNBcmcpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGNhc2UgTm9JbnRyaW5zaWM6CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChoYW5kbGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFzIHRvIGJlIGluc2lkZSBicmFjZXMuCisgICAgICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBh
ZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwpOwogICAgICAgICAg
ICAgYWxpYXNlcy5yZWNvcmRDYWxsKGNhbGwpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Y2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5
NTI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtMjM4LDYgKzIzOCwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4g
YXQobm9kZUluZGV4KS5pc0Jvb2xlYW5Db25zdGFudChjb2RlQmxvY2spOwogICAgIH0KKyAgICBi
b29sIGlzRnVuY3Rpb25Db25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFp
c0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFnZXRKU0Z1bmN0aW9uKGdsb2JhbERhdGEsIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVC
bG9jaywgbm9kZUluZGV4KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KICAgICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFs
dWVzIGZyb20gbm9kZXMuCiAgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0yNTcsNiArMjY1LDEy
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudE5vZGUo
Y29kZUJsb2NrLCBub2RlSW5kZXgpLmdldEJvb2xlYW4oKTsKICAgICB9CisgICAgSlNGdW5jdGlv
biogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIEpT
Q2VsbCogZnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKGdsb2JhbERhdGEsIHZhbHVlT2ZKU0NvbnN0
YW50KGNvZGVCbG9jaywgbm9kZUluZGV4KSk7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbik7Cisg
ICAgICAgIHJldHVybiBhc0Z1bmN0aW9uKGZ1bmN0aW9uKTsKKyAgICB9CiAKICNpZm5kZWYgTkRF
QlVHCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKm9wTmFtZShOb2RlVHlwZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludHJpbnNpYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50cmluc2ljLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludHJpbnNpYy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHSW50cmluc2ljX2gKKyNkZWZpbmUgREZHSW50cmluc2ljX2gKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIEludHJpbnNpYyB7CisgICAgTm9JbnRy
aW5zaWMsCisgICAgQWJzSW50cmluc2ljCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBERkdJbnRyaW5zaWNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk1MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNiwxMCArNDI2LDEyIEBAIHByb3RlY3RlZDoKICAgICBib29sIGlzRG91YmxlQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNEb3VibGVDb25zdGFu
dChub2RlSW5kZXgpOyB9CiAgICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpIHsgcmV0dXJuIG1faml0LmlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAg
IGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9q
aXQuaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KTsgfQorICAgIGJvb2wgaXNGdW5jdGlvbkNv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzRnVuY3Rpb25Db25z
dGFudChub2RlSW5kZXgpOyB9CiAgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC52YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
SW5kZXgpOyB9CiAgICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KSB7IHJldHVybiBtX2ppdC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsg
fQogICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyBy
ZXR1cm4gbV9qaXQudmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wgdmFs
dWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC52
YWx1ZU9mQm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBKU0Z1bmN0aW9uKiB2YWx1
ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC52
YWx1ZU9mRnVuY3Rpb25Db25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgYm9vbCBpc051bGxDb25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKCFpc0NvbnN0YW50
KG5vZGVJbmRleCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDExICsyNTEsMTMgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVy
biBncmFwaCgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KICAg
ICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3Jh
cGgoKS5pc051bWJlckNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAgICAgYm9v
bCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgp
LmlzQm9vbGVhbkNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CisgICAgYm9vbCBp
c0Z1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS5p
c0Z1bmN0aW9uQ29uc3RhbnQoY29kZUJsb2NrKCksICpnbG9iYWxEYXRhKCksIG5vZGVJbmRleCk7
IH0KICAgICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMu
CiAgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJl
dHVybiBncmFwaCgpLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9
CiAgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5k
ZXgpOyB9CiAgICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KSB7IHJldHVybiBncmFwaCgpLnZhbHVlT2ZOdW1iZXJDb25zdGFudChjb2RlQmxvY2soKSwg
bm9kZUluZGV4KTsgfQogICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoY29kZUJs
b2NrKCksIG5vZGVJbmRleCk7IH0KKyAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLnZhbHVlT2ZGdW5jdGlv
bkNvbnN0YW50KGNvZGVCbG9jaygpLCAqZ2xvYmFsRGF0YSgpLCBub2RlSW5kZXgpOyB9CiAKICAg
ICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNr
cyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiBFTkFCTEUoREZHX0pJVF9BU1NFUlQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDYgKzE1
MSw3IEBAIHByaXZhdGU6CiAgICAgbWFjcm8oQXJpdGhNdWwsIE5vZGVSZXN1bHROdW1iZXIpIFwK
ICAgICBtYWNybyhBcml0aERpdiwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIG1hY3JvKEFyaXRo
TW9kLCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhBYnMsIE5vZGVSZXN1bHRO
dW1iZXIpIFwKICAgICAvKiBBcml0aG1ldGljIG9wZXJhdG9ycyBjYWxsIFRvTnVtYmVyIG9uIHRo
ZWlyIG9wZXJhbmRzLiAqL1wKICAgICBtYWNybyhWYWx1ZVRvTnVtYmVyLCBOb2RlUmVzdWx0TnVt
YmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTUsNiArMjE1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKKyAgICAgICAgICAgIFByZWRp
Y3RlZFR5cGUgY2hpbGQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAg
ICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihjaGlsZCkpCisgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oY2hpbGQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgICAgIGNhc2Ug
Q29tcGFyZUxlc3M6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5
NTI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDU3LDYgKzEwNTcsMzIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpbnRlZ2VyUmVzdWx0KGVkeC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNh
c2UgQXJpdGhBYnM6IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5j
aGlsZDEoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihvcDEuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5yc2hpZnQzMihyZXN1bHQuZ3ByKCksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMzEpLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAg
IG1faml0LmFkZDMyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBt
X2ppdC54b3IzMihzY3JhdGNoLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3Vs
dC5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxIDw8IDMxKSkpOworICAgICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbmVn
YXRpdmVaZXJvQ29uc3RhbnQgPSAtMC4wOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZERv
dWJsZSgmbmVnYXRpdmVaZXJvQ29uc3RhbnQsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIG1faml0
LmFuZG5vdERvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIGRvdWJsZVJl
c3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQogCiAgICAgY2FzZSBMb2dpY2FsTm90OiB7CiAgICAgICAgIGlmIChpc0tub3duQm9vbGVhbihu
b2RlLmNoaWxkMSgpKSkgewpAQCAtMTU0NCw2ICsxNTcwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICBjYXNlIENhbGw6CiAgICAgY2Fz
ZSBDb25zdHJ1Y3Q6CisgICAgICAgIAorICAgICAgICAKICAgICAgICAgZW1pdENhbGwobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4NiwxNiArMzY4NiwxNiBAQCBOYXRpdmVFeGVj
dXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiB7CiAgICAgc3RkOjpwYWlyPEhvc3RGdW5j
dGlvblN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1h
cC0+YWRkKGZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwogICAgIGlmICghKmVu
dHJ5LmZpcnN0LT5zZWNvbmQpCi0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9i
YWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGls
ZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0
KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBlbnRyeS5maXJz
dC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9i
YWxEYXRhLCBKSVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwg
ZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KGN0aU5hdGl2ZUNvbnN0cnVjdCgpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIERG
Rzo6Tm9JbnRyaW5zaWMpKTsKICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZC5nZXQoKTsK
IH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcikKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9u
U3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIERGRzo6SW50cmluc2ljIGludHJpbnNpYykKIHsKICAg
ICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0g
bV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJs
ZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkgewogICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY29kZSA9IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJhdG9y
KGdsb2JhbERhdGEpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7Ci0gICAgICAgIGVudHJ5LmZp
cnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmds
b2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25B
c0NvbnN0cnVjdG9yKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxE
YXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9u
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRp
dmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMp
KTsKICAgICB9CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA5NTI3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2RlZmluZSBKSVRTdHVic19oCiAKICNpbmNsdWRlICJDYWxsRGF0YS5oIgor
I2luY2x1ZGUgIkRGR0ludHJpbnNpYy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgi
CkBAIC0yOTcsNyArMjk4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjdGlTdHViKEpTR2xvYmFsRGF0YSosIFRodW5rR2VuZXJhdG9yKTsKIAogICAg
ICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5h
dGl2ZUZ1bmN0aW9uKTsKLSAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1
YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2
ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciwgREZHOjpJbnRyaW5zaWMpOwogCiAgICAgICAgIHZv
aWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRlSW5zdGFuY2VDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZUNhY2hlLmgJKHJldmlzaW9uIDk1MjczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlQ2FjaGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBEYXRlSW5zdGFuY2VDYWNoZV9o
CiAKICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDEzIEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCiAgICAg
bV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVE
OwogfQogCisjaWYgRU5BQkxFKERGR19KSVQpCitERkc6OkludHJpbnNpYyBFeGVjdXRhYmxlQmFz
ZTo6aW50cmluc2ljKCkgY29uc3QKK3sKKyAgICByZXR1cm4gREZHOjpOb0ludHJpbnNpYzsKK30K
KyNlbmRpZgorCiBjbGFzcyBFeGVjdXRhYmxlRmluYWxpemVyIDogcHVibGljIFdlYWtIYW5kbGVP
d25lciB7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUs
IHZvaWQqKQogICAgIHsKQEAgLTcwLDYgKzc3LDEzIEBAIE5hdGl2ZUV4ZWN1dGFibGU6On5OYXRp
dmVFeGVjdXRhYmxlKCkKIHsKIH0KIAorI2lmIEVOQUJMRShERkdfSklUKQorREZHOjpJbnRyaW5z
aWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmluc2ljKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
bnRyaW5zaWM7Cit9CisjZW5kaWYKKwogY29uc3QgQ2xhc3NJbmZvIFNjcmlwdEV4ZWN1dGFibGU6
OnNfaW5mbyA9IHsgIlNjcmlwdEV4ZWN1dGFibGUiLCAmRXhlY3V0YWJsZUJhc2U6OnNfaW5mbywg
MCwgMCB9OwogCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2
YWxFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTUy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gaGFzSklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAgICAgICB9CiAKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKyAgICAgICAgdmlydHVhbCBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMoKSBj
b25zdDsKKyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKSVRDb2RlIG1faml0Q29k
ZUZvckNhbGw7CiAgICAgICAgIEpJVENvZGUgbV9qaXRDb2RlRm9yQ29uc3RydWN0OwpAQCAtMTcz
LDE1ICsxNzcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgRXhlY3V0YWJs
ZUJhc2UgQmFzZTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHN0YXRpYyBOYXRpdmVFeGVj
dXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKKyAgICAg
ICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9u
IGNvbnN0cnVjdG9yLCBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBpZiAoIWNh
bGxUaHVuaykgewogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgKGFsbG9jYXRlQ2Vs
bDxOYXRpdmVFeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGds
b2JhbERhdGEsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICAgICAgZXhlY3V0
YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgSklUQ29kZSgpLCBKSVRDb2RlKCkpOwor
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIEpJ
VENvZGUoKSwgSklUQ29kZSgpLCBpbnRyaW5zaWMpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0
YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5j
dGlvbiwgY29uc3RydWN0b3IpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEsIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBKSVRD
b2RlOjpIb3N0RnVuY3Rpb24oY29uc3RydWN0VGh1bmspKTsKKyAgICAgICAgICAgICAgICBleGVj
dXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24o
Y2FsbFRodW5rKSwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVjdFRodW5rKSwgaW50cmlu
c2ljKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAg
ICAgICB9CkBAIC0yMDQsMTUgKzIwOCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByb3Rl
Y3RlZDoKICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSklUQ29kZSBjYWxsVGh1bmssIEpJVENvZGUgY29uc3RydWN0
VGh1bmspCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKSVRDb2RlIGNhbGxUaHVuaywgSklUQ29kZSBjb25zdHJ1Y3RUaHVuaywgREZHOjpJbnRy
aW5zaWMgaW50cmluc2ljKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBjYWxsVGh1
bms7CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBjb25zdHJ1Y3RUaHVuazsK
ICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGNhbGxUaHVuay5h
ZGRyZXNzRm9yQ2FsbCgpOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2sgPSBjb25zdHJ1Y3RUaHVuay5hZGRyZXNzRm9yQ2FsbCgpOworI2lmIEVOQUJMRShE
RkdfSklUKQorICAgICAgICAgICAgbV9pbnRyaW5zaWMgPSBpbnRyaW5zaWM7CisjZW5kaWYKICAg
ICAgICAgfQogI2VuZGlmCisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICB2
aXJ0dWFsIERGRzo6SW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0OworI2VuZGlmCiAgCiAgICAg
cHJpdmF0ZToKICNpZiBFTkFCTEUoSklUKQpAQCAtMjM1LDYgKzI0Niw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyBQcm9iYWJseSBzaG91bGQgYmUgYSBOYXRpdmVDb25zdHJ1Y3Rvciwg
YnV0IHRoaXMgd2lsbCBjdXJyZW50bHkgcmVxdWlyZSByZXdyaXRpbmcgdGhlIEpJVAogICAgICAg
ICAvLyB0cmFtcG9saW5lLiBJdCBtYXkgYmUgZWFzaWVyIHRvIG1ha2UgTmF0aXZlRnVuY3Rpb24g
YmUgcGFzc2VkICd0aGlzJyBhcyBhIHBhcnQgb2YgdGhlIEFyZ0xpc3QuCiAgICAgICAgIE5hdGl2
ZUZ1bmN0aW9uIG1fY29uc3RydWN0b3I7CisgICAgICAgIAorICAgICAgICBERkc6OkludHJpbnNp
YyBtX2ludHJpbnNpYzsKICAgICB9OwogCiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZSA6IHB1
YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEw
LDkgKzQxMCw5IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEYKIHsK
ICAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24pOwog
fQotTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZl
RnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK05hdGl2ZUV4ZWN1
dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIERGRzo6SW50cmluc2ljIGludHJpbnNpYykK
IHsKLSAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24s
IGdlbmVyYXRvcik7CisgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKHRoaXMs
IGZ1bmN0aW9uLCBnZW5lcmF0b3IsIGludHJpbnNpYyk7CiB9CiAjZWxzZQogTmF0aXZlRXhlY3V0
YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rp
b24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
aAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTAgQEAKICNkZWZpbmUgSlNH
bG9iYWxEYXRhX2gKIAogI2luY2x1ZGUgIkNhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaCIK
LSNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiREZHSW50cmluc2ljLmgiCiAjaW5jbHVkZSAi
RGF0ZUluc3RhbmNlQ2FjaGUuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIkpJVFN0dWJz
LmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgpAQCAtMjE5LDcgKzIyMCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhp
cywgZ2VuZXJhdG9yKTsKICAgICAgICAgfQotICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRI
b3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVy
YXRvciwgREZHOjpJbnRyaW5zaWMpOwogI2VuZGlmCiAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw5IEBAIHZvaWQgSGFzaFRhYmxlOjpjcmVhdGVUYWJsZShKU0dsb2JhbERhdGEKICAgICAgICAg
ZW50cnktPmluaXRpYWxpemUoaWRlbnRpZmllciwgdmFsdWVzW2ldLmF0dHJpYnV0ZXMsIHZhbHVl
c1tpXS52YWx1ZTEsIHZhbHVlc1tpXS52YWx1ZTIKICNpZiBFTkFCTEUoSklUKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIHZhbHVlc1tpXS5nZW5lcmF0b3IKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCB2YWx1ZXNbaV0uaW50cmluc2ljCisjZW5k
aWYKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgIH0KQEAgLTc5LDcg
KzgyLDcgQEAgdm9pZCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdGhpc09iai0+Z2xvYmFsT2JqZWN0KCk7
CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgaWYgKGVudHJ5LT5nZW5lcmF0b3IoKSkKLSAgICAg
ICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgo
KSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5
LT5mdW5jdGlvbigpLCBlbnRyeS0+Z2VuZXJhdG9yKCkpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9u
ID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5m
dW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1l
LCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBl
bnRyeS0+Z2VuZXJhdG9yKCksIGVudHJ5LT5pbnRyaW5zaWMoKSkpOwogICAgICAgICBlbHNlCiAj
ZW5kaWYKICAgICAgICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVu
Y3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rpb24oKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkocmV2aXNpb24gOTUyNzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNiArMjIsNyBAQAogI2RlZmluZSBMb29rdXBfaAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgi
CisjaW5jbHVkZSAiREZHSW50cmluc2ljLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlTbG90LmgiCkBAIC00
NCw2ICs0NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnRwdHJfdCB2YWx1ZTI7CiAj
aWYgRU5BQkxFKEpJVCkKICAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yOworI2lmIEVO
QUJMRShERkdfSklUKQorICAgICAgICBERkc6OkludHJpbnNpYyBpbnRyaW5zaWM7CisjZW5kaWYK
ICNlbmRpZgogICAgIH07CiAKQEAgLTU4LDYgKzYyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgaW5pdGlhbGl6ZShTdHJpbmdJbXBsKiBrZXksIHVuc2lnbmVkIGNoYXIgYXR0cmli
dXRlcywgaW50cHRyX3QgdjEsIGludHB0cl90IHYyCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gMAorI2lmIEVOQUJM
RShERkdfSklUKQorICAgICAgICAgICAgICAgICAgICAgICAgLCBERkc6OkludHJpbnNpYyBpbnRy
aW5zaWMgPSBERkc6Ok5vSW50cmluc2ljCisjZW5kaWYKICNlbmRpZgogICAgICAgICAgICAgICAg
ICAgICAgICAgKQogICAgICAgICB7CkBAIC02Nyw2ICs3NCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgbV91LnN0b3JlLnZhbHVlMiA9IHYyOwogI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgICAgICBtX3UuZnVuY3Rpb24uZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworI2lmIEVOQUJMRShE
RkdfSklUKQorICAgICAgICAgICAgbV91LmZ1bmN0aW9uLmludHJpbnNpYyA9IGludHJpbnNpYzsK
KyNlbmRpZgogI2VuZGlmCiAgICAgICAgICAgICBtX25leHQgPSAwOwogICAgICAgICB9CkBAIC03
OCw2ICs4OCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcigpIGNvbnN0IHsgQVNTRVJUKG1fYXR0cmlidXRlcyAm
IEZ1bmN0aW9uKTsgcmV0dXJuIG1fdS5mdW5jdGlvbi5nZW5lcmF0b3I7IH0KKyAgICAgICAgREZH
OjpJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKG1fYXR0cmlidXRlcyAmIEZ1bmN0aW9uKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAg
ICAgICAgIHJldHVybiBtX3UuZnVuY3Rpb24uaW50cmluc2ljOworI2Vsc2UKKyAgICAgICAgICAg
IHJldHVybiBERkc6Ok5vSW50cmluc2ljOworI2VuZGlmCisgICAgICAgIH0KICNlbmRpZgogICAg
ICAgICBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbigpIGNvbnN0IHsgQVNTRVJUKG1fYXR0cmlidXRl
cyAmIEZ1bmN0aW9uKTsgcmV0dXJuIG1fdS5mdW5jdGlvbi5mdW5jdGlvblZhbHVlOyB9CiAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgZnVuY3Rpb25MZW5ndGgoKSBjb25zdCB7IEFTU0VSVChtX2F0dHJp
YnV0ZXMgJiBGdW5jdGlvbik7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX3Uu
ZnVuY3Rpb24ubGVuZ3RoKTsgfQpAQCAtMTA0LDYgKzEyMyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgICAgIGludHB0cl90IGxlbmd0aDsgLy8gbnVtYmVyIG9mIGFyZ3VtZW50cyBm
b3IgZnVuY3Rpb24KICNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgICAgIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcjsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgICAgICBERkc6
OkludHJpbnNpYyBpbnRyaW5zaWM7CisjZW5kaWYKICNlbmRpZgogICAgICAgICAgICAgfSBmdW5j
dGlvbjsKICAgICAgICAgICAgIHN0cnVjdCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTI3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE3IEBACisyMDExLTA5LTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgREZHIEpJVCBzaG91bGQgaW5saW5lIE1hdGguYWJzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODIyNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEphdmFTY3JpcHRDb3JlL2RmZyB0byBp
bmNsdWRlIHBhdGggcGF0aC4gQ2hhbmdlZCB0aGUgYmluZGluZ3MKKyAgICAgICAgc2NyaXB0cyB0
byBoYW5kbGUgdGhlIHByZXNlbmNlIG9mIGludHJpbnNpY3MuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToK
KyAgICAgICAgKEdlbmVyYXRlSGFzaFRhYmxlKToKKwogMjAxMS0wOS0xNiAgTGVvIFlhbmcgIDxs
ZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgW1F0XSBDcmFzaCB3aGVuIGRy
YWdnaW5nIGdvb2dsZSBtYXBzLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1
MjczKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDYgKzY5LDcgQEAgU0VUKFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vYXNzZW1ibGVyIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
Ynl0ZWNvZGUiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9ieXRlY29tcGlsZXIiCisgICAg
IiR7SkFWQVNDUklQVENPUkVfRElSfS9kZmciCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9o
ZWFwIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGVidWdnZXIiCiAgICAgIiR7SkFWQVND
UklQVENPUkVfRElSfS9pbnRlcnByZXRlciIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA5NTI3MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTM2LDYgKzI5MzYsMTEgQEAgc3ViIEdlbmVyYXRlSGFzaFRhYmxlCiAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIjZWxzZVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpXG4iKTsKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiNlbmRpZlxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgRU5BQkxF
KERGR19KSVQpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNkZWZpbmUgSU5UUklOU0lD
KGludHJpbnNpYykgLCBpbnRyaW5zaWNcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiI2Vs
c2VcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiI2RlZmluZSBJTlRSSU5TSUMoaW50cmlu
c2ljKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpOwogICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG5zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgJG5hbWVFbnRyaWVz
XFtcXSA9XG5ce1xuIik7CiAgICAgJGkgPSAwOwogICAgIGZvcmVhY2ggbXkgJGtleSAoQHska2V5
c30pIHsKQEAgLTI5NTUsMTMgKzI5NjAsMTMgQEAgc3ViIEdlbmVyYXRlSGFzaFRhYmxlCiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAkdGFyZ2V0VHlwZSA9ICJzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4iOwogICAgICAgICB9Ci0gICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHsgXCIka2V5XCIsIEAkc3BlY2lhbHNbJGldLCAoaW50cHRyX3QpIiAuICR0
YXJnZXRUeXBlIC4gIihAJHZhbHVlMVskaV0pLCAoaW50cHRyX3QpQCR2YWx1ZTJbJGldIFRIVU5L
X0dFTkVSQVRPUigwKSB9LFxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHsg
XCIka2V5XCIsIEAkc3BlY2lhbHNbJGldLCAoaW50cHRyX3QpIiAuICR0YXJnZXRUeXBlIC4gIihA
JHZhbHVlMVskaV0pLCAoaW50cHRyX3QpQCR2YWx1ZTJbJGldIFRIVU5LX0dFTkVSQVRPUigwKSBJ
TlRSSU5TSUMoREZHOjpOb0ludHJpbnNpYykgfSxcbiIpOwogICAgICAgICBpZiAoJGNvbmRpdGlv
bmFsKSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIik7CiAgICAg
ICAgIH0KICAgICAgICAgKyskaTsKICAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
eyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6
Ok5vSW50cmluc2ljKSB9XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn07XG5cbiIpOwog
ICAgIHB1c2goQGltcGxDb250ZW50LCAiI3VuZGVmIFRIVU5LX0dFTkVSQVRPUlxuIik7CiAgICAg
bXkgJGNvbXBhY3RTaXplTWFzayA9ICRudW1FbnRyaWVzIC0gMTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDk1Mjc1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDktMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBERkcgSklUIHNob3VsZCBpbmxpbmUgTWF0aC5hYnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSmF2YVNjcmlwdENv
cmUvZGZnIHRvIGluY2x1ZGUgcGF0aCBwYXRoLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisKIDIwMTEtMDktMTUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZW5hbWUgRU5BQkxFKERBVEFCQVNFKSB0byBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDog
U291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL1dlYktpdDIvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAgU0VUKFdlYktpdDJf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYXNzZW1ibGVy
IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvZGUiCiAgICAgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS9ieXRlY29tcGlsZXIiCisgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9kZmci
CiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9jb2xsZWN0b3IvaGFuZGxlcyIKICAgICAiJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2hlYXAiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnRl
cnByZXRlciIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTI3NSkKKysrIFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDktMTYgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBERkcgSklUIHNob3VsZCBp
bmxpbmUgTWF0aC5hYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY4MjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgSmF2YVNjcmlwdENvcmUvZGZnIHRvIGluY2x1ZGUgcGF0aCBwYXRoLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisKIDIwMTEtMDktMTQgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIFdlYkNvcmVWaWV3RmFj
dG9yeSBhbmQgaXRzIFdlYlZpZXdGYWN0b3J5IHN1YmNsYXNzCkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBTRVQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2Fzc2VtYmxlciIKICAgICAiJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2J5dGVjb2RlIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNv
bXBpbGVyIgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGZnIgogICAgICIke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaGVhcCIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2RlYnVnZ2VyIgog
ICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW50ZXJwcmV0ZXIiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107625</attachid>
            <date>2011-09-16 01:54:05 -0700</date>
            <delta_ts>2011-09-16 07:43:59 -0700</delta_ts>
            <desc>the patch - refactored</desc>
            <filename>mathdotabs_patch_4.diff</filename>
            <type>text/plain</type>
            <size>40669</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUyNzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjUgQEAK
KzIwMTEtMDktMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBpbmxpbmUgTWF0aC5hYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgdGhlIGFiaWxpdHkgdG8gdHJh
Y2sgaW50cmluc2ljIGZ1bmN0aW9ucyB0aHJvdWdob3V0IHRoZQorICAgICAgICBob3N0IGZ1bmN0
aW9uIGluZnJhc3RydWN0dXJlLCBzbyB0aGF0IHRoZSBERkcgY2FuIGVhc2lseSBxdWVyeQorICAg
ICAgICB3aGV0aGVyIG9yIG5vdCBhIGNhbGwncyB0YXJnZXQgaXMgaW50cmluc2ljLCBhbmQgaWYg
c28sIHdoaWNoCisgICAgICAgIGludHJpbnNpYyBpdCBpcy4KKyAgICAgICAgCisgICAgICAgIE9u
IHRvcCBvZiB0aGlzLCBpdCBhZGRzIE1hdGguYWJzIGludHJpbnNpY3MgdG8gREZHLiBDYWxsKE1h
dGguYWJzKQorICAgICAgICBpcyB0cmFuc2Zvcm1lZCBpbnRvIFZhbHVlVG9OdW1iZXI8LUFyaXRo
QWJzIG5vZGVzLiBUaGVzZSBub2RlcworICAgICAgICB0aGVuIGdldCBvcHRpbWl6ZWQgdXNpbmcg
dGhlIHVzdWFsIHRyaWNrcy4KKyAgICAgICAgCisgICAgICAgIEFsc28gaGFkIHRvIG1ha2UgYSBj
b21wbGV0ZWx5IHVucmVsYXRlZCBjaGFuZ2UgdG8KKyAgICAgICAgRGF0ZUluc3RhbmNlQ2FjaGUu
aCBpbiBvcmRlciB0byBmaXggYSBwcmVleGlzdGluZyBhbHBoYWJldGljYWwKKyAgICAgICAgc29y
dGluZyBwcm9ibGVtIGluIEpTR2xvYmFsRGF0YS5oCisgICAgICAgIAorICAgICAgICBUaGlzIHJl
c3VsdHMgaW4gYSBiaWcgd2luIGluIGltYWdpbmctZ2F1c3NpYW4tYmx1cjogNjElIGZhc3Rlcgor
ICAgICAgICB0aGFuIGJlZm9yZS4gVGhlIG5ldCB3aW4gb24gS3Jha2VuIGlzIGFyb3VuZCAxMyUu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGNyZWF0ZV9oYXNoX3RhYmxlOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpp
c0Z1bmN0aW9uQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mRnVu
Y3Rpb25Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR0ludHJpbnNpYy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGVHZW5lcmF0b3I6OmlzRnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZUdlbmVyYXRvcjo6dmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0Z1
bmN0aW9uQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9m
RnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKiBk
ZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJv
cGFnYXRlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBydW50aW1lL0RhdGVJbnN0YW5j
ZUNhY2hlLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUJhc2U6OmludHJpbnNpYyk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1
dGFibGU6OmludHJpbnNpYyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAg
ICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ok5hdGl2
ZUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvTG9v
a3VwLmNwcDoKKyAgICAgICAgKEpTQzo6SGFzaFRhYmxlOjpjcmVhdGVUYWJsZSk6CisgICAgICAg
IChKU0M6OnNldFVwU3RhdGljRnVuY3Rpb25TbG90KToKKyAgICAgICAgKiBydW50aW1lL0xvb2t1
cC5oOgorICAgICAgICAoSlNDOjpIYXNoRW50cnk6OmluaXRpYWxpemUpOgorICAgICAgICAoSlND
OjpIYXNoRW50cnk6OmludHJpbnNpYyk6CisKIDIwMTEtMDktMTUgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgSklUIGRvZXMgbm90IG9wdGltaXplIG1ldGhv
ZF9jaGVjawpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0ZV9oYXNoX3RhYmxlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jcmVhdGVfaGFzaF90YWJsZQkocmV2
aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY3JlYXRlX2hhc2hfdGFibGUJ
KHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsMTEgQEAgc3ViIG91dHB1dCgpIHsKICAgICBw
cmludCAiI2Vsc2VcbiI7CiAgICAgcHJpbnQgIiNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVy
YXRvcilcbiI7CiAgICAgcHJpbnQgIiNlbmRpZlxuIjsKKyAgICBwcmludCAiI2lmIEVOQUJMRShE
RkdfSklUKVxuIjsKKyAgICBwcmludCAiI2RlZmluZSBJTlRSSU5TSUMoaW50cmluc2ljKSAsIGlu
dHJpbnNpY1xuIjsKKyAgICBwcmludCAiI2Vsc2VcbiI7CisgICAgcHJpbnQgIiNkZWZpbmUgSU5U
UklOU0lDKGludHJpbnNpYylcbiI7CisgICAgcHJpbnQgIiNlbmRpZlxuIjsKICAgICBwcmludCAi
XG5zdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZVZhbHVlICR7bmFtZUVudHJpZXN9XFskY291
bnRcXSA9IHtcbiI7CiAgICAgbXkgJGkgPSAwOwogICAgIGZvcmVhY2ggbXkgJGtleSAoQGtleXMp
IHsKQEAgLTI3Miw2ICsyNzcsNyBAQCBzdWIgb3V0cHV0KCkgewogICAgICAgICAgICAgJHNlY29u
ZFZhbHVlID0gIjAiOwogICAgICAgICB9CiAgICAgICAgIG15ICR0aHVua0dlbmVyYXRvciA9ICIw
IjsKKyAgICAgICAgbXkgJGludHJpbnNpYyA9ICJERkc6Ok5vSW50cmluc2ljIjsKICAgICAgICAg
aWYgKCRrZXkgZXEgImNoYXJDb2RlQXQiKSB7CiAgICAgICAgICAgICAkdGh1bmtHZW5lcmF0b3Ig
PSAiY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yIjsKICAgICAgICAgfQpAQCAtMjkwLDYgKzI5Niw3
IEBAIHN1YiBvdXRwdXQoKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoJGtleSBl
cSAiYWJzIikgewogICAgICAgICAgICAgICAgICR0aHVua0dlbmVyYXRvciA9ICJhYnNUaHVua0dl
bmVyYXRvciI7CisgICAgICAgICAgICAgICAgJGludHJpbnNpYyA9ICJERkc6OkFic0ludHJpbnNp
YyI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoJGtleSBlcSAiZmxvb3IiKSB7CiAg
ICAgICAgICAgICAgICAgJHRodW5rR2VuZXJhdG9yID0gImZsb29yVGh1bmtHZW5lcmF0b3IiOwpA
QCAtMzA3LDEwICszMTQsMTAgQEAgc3ViIG91dHB1dCgpIHsKICAgICAgICAgICAgICAgICAkdGh1
bmtHZW5lcmF0b3IgPSAibG9nVGh1bmtHZW5lcmF0b3IiOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIHByaW50ICIgICB7IFwiJGtleVwiLCAkYXR0cnNbJGldLCAoaW50cHRyX3Qp
IiAuICRjYXN0U3RyIC4gIigkZmlyc3RWYWx1ZSksIChpbnRwdHJfdCkkc2Vjb25kVmFsdWUgVEhV
TktfR0VORVJBVE9SKCR0aHVua0dlbmVyYXRvcikgfSxcbiI7CisgICAgICAgIHByaW50ICIgICB7
IFwiJGtleVwiLCAkYXR0cnNbJGldLCAoaW50cHRyX3QpIiAuICRjYXN0U3RyIC4gIigkZmlyc3RW
YWx1ZSksIChpbnRwdHJfdCkkc2Vjb25kVmFsdWUgVEhVTktfR0VORVJBVE9SKCR0aHVua0dlbmVy
YXRvcikgSU5UUklOU0lDKCRpbnRyaW5zaWMpIH0sXG4iOwogICAgICAgICAkaSsrOwogICAgIH0K
LSAgICBwcmludCAiICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9XG4iOworICAg
IHByaW50ICIgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6
Ok5vSW50cmluc2ljKSB9XG4iOwogICAgIHByaW50ICJ9O1xuXG4iOwogICAgIHByaW50ICIjdW5k
ZWYgVEhVTktfR0VORVJBVE9SXG4iOwogICAgIHByaW50ICJleHRlcm4gSlNDX0NPTlNUX0hBU0hU
QUJMRSBIYXNoVGFibGUgJG5hbWUgPVxuIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3
Myw3IEBACiAJCTBGRDgyRTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
ODIxNDFGM0ZDOTAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQb2ludGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFODYxNDFGM0ZGMTAw
MTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5
cGUuY3BwICovOyB9OwogCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovOyB9OworCQkwRkQ4MkVG
NTE0MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZH
SW50cmluc2ljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQ
b3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJ
CTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJE
MDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODEzLDYgKzgxNCw3
IEBACiAJCTBGRDgyRTgyMTQxRjNGQzkwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb3VuZHNDaGVja2VkUG9pbnRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQg
LyogUHJlZGljdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcmVkaWN0ZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJF
OEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludHJpbnNpYy5oOyBwYXRoID0gZGZn
L0RGR0ludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEy
QTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMjcsNiArMjIyOSw3IEBACiAJCTg2
RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAvKiBERkdJbnRy
aW5zaWMuaCAqLywKIAkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnku
Y3BwICovLAogCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICov
LAogCQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICov
LApAQCAtMjQyNiw2ICsyNDI5LDcgQEAKIAkJCQlCQzI1N0RFODBFMUY1MUM1MDAxNkI2QzkgLyog
QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcg
LyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAw
NkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRUY1MTQy
MzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgy
RTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGlvblRyYWNr
ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJERkdT
Y29yZUJvYXJkLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00OSw2ICs1
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3BhcnNlRmFpbGVkKGZhbHNlKQogICAgICAgICAs
IG1fY29uc3RhbnRVbmRlZmluZWQoVUlOVF9NQVgpCiAgICAgICAgICwgbV9jb25zdGFudE51bGwo
VUlOVF9NQVgpCisgICAgICAgICwgbV9jb25zdGFudE5hTihVSU5UX01BWCkKICAgICAgICAgLCBt
X2NvbnN0YW50MShVSU5UX01BWCkKICAgICAgICAgLCBtX2NvbnN0YW50cyhjb2RlQmxvY2stPm51
bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSkKICAgICAgICAgLCBtX251bUFyZ3VtZW50cyhjb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycykKQEAgLTY0LDYgKzY2LDggQEAgcHVibGljOgogICAgIGJv
b2wgcGFyc2UoKTsKIAogcHJpdmF0ZToKKyAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9u
cy4KKyAgICBib29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRP
cGVyYW5kLCBJbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcpOwogICAgIC8vIFBh
cnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KICAgICBi
b29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpOwogICAgIC8vIFNldHVwIHByZWRlY2Vzc29y
IGxpbmtzIGluIHRoZSBncmFwaCdzIEJhc2ljQmxvY2tzLgpAQCAtMzU2LDYgKzM2MCwzNCBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50MSk7CiAgICAg
fQogICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBEb3VibGVDb25zdGFudCB3aXRo
IHRoZSB2YWx1ZSBOYU4uCisgICAgTm9kZUluZGV4IGNvbnN0YW50TmFOKCkKKyAgICB7CisgICAg
ICAgIEpTVmFsdWUgbmFuID0ganNOYU4oKTsKKyAgICAgICAgCisgICAgICAgIC8vIEhhcyBtX2Nv
bnN0YW50TmFOIGJlZW4gc2V0IHVwIHlldD8KKyAgICAgICAgaWYgKG1fY29uc3RhbnROYU4gPT0g
VUlOVF9NQVgpIHsKKyAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgY29uc3RhbnQgcG9vbCBmb3Ig
dGhlIHZhbHVlIE5hTiwgaWYgd2UgZmluZCBpdCwgd2UgY2FuIGp1c3QgcmV1c2UgdGhpcyEKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRzID0gbV9jb2RlQmxvY2stPm51bWJl
ck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGZvciAobV9jb25zdGFudE5hTiA9
IDA7IG1fY29uc3RhbnROYU4gPCBudW1iZXJPZkNvbnN0YW50czsgKyttX2NvbnN0YW50TmFOKSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB0ZXN0TWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50TmFOKTsKKyAgICAgICAg
ICAgICAgICBpZiAoSlNWYWx1ZTo6ZW5jb2RlKHRlc3RNZSkgPT0gSlNWYWx1ZTo6ZW5jb2RlKG5h
bikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnRO
YU4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgdGhlIHZhbHVlIG5hbiB0
byB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnRzLCBhbmQgYWRkIGEgY29ycmVzcG9uZGluZyBzbG90
IGluIG1fY29uc3RhbnRzLgorICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9
PSBudW1iZXJPZkNvbnN0YW50cyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3Rh
bnQobmFuKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2st
Pm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBt
X2NvbnN0YW50TmFOIG11c3QgcmVmZXIgdG8gYW4gZW50cnkgaW4gdGhlIENvZGVCbG9jaydzIGNv
bnN0YW50IHBvb2wgdGhhdCBoYXMgdGhlIHZhbHVlIG5hbi4KKyAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3Rh
bnROYU4pLmlzRG91YmxlKCkpOworICAgICAgICBBU1NFUlQoaXNuYW4obV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudE5hTikuYXNE
b3VibGUoKSkpOworICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50TmFOKTsK
KyAgICB9CisgICAgCiAgICAgQ29kZU9yaWdpbiBjdXJyZW50Q29kZU9yaWdpbigpCiAgICAgewog
ICAgICAgICByZXR1cm4gQ29kZU9yaWdpbihtX2N1cnJlbnRJbmRleCk7CkBAIC01MDYsNiArNTM4
LDcgQEAgcHJpdmF0ZToKICAgICAvLyBjb25zdGFudCBwb29sLCBhcyBuZWNlc3NhcnkuCiAgICAg
dW5zaWduZWQgbV9jb25zdGFudFVuZGVmaW5lZDsKICAgICB1bnNpZ25lZCBtX2NvbnN0YW50TnVs
bDsKKyAgICB1bnNpZ25lZCBtX2NvbnN0YW50TmFOOwogICAgIHVuc2lnbmVkIG1fY29uc3RhbnQx
OwogCiAgICAgLy8gQSBjb25zdGFudCBpbiB0aGUgY29uc3RhbnQgcG9vbCBtYXkgYmUgcmVwcmVz
ZW50ZWQgYnkgbW9yZSB0aGFuIG9uZQpAQCAtNTY5LDYgKzYwMiwzMiBAQCBwcml2YXRlOgogICAg
IG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKICAgICByZXR1cm4gIW1f
cGFyc2VGYWlsZWQKIAorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvb2wg
dXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludCBm
aXJzdEFyZywgaW50IGxhc3RBcmcpCit7CisgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKKyAgICBj
YXNlIEFic0ludHJpbnNpYzogeworICAgICAgICBpZiAoIXVzZXNSZXN1bHQpIHsKKyAgICAgICAg
ICAgIC8vIFRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgZXhlY3V0aW5nIGFicyBmb3IgZWZmZWN0
LCBzbyB0aGlzCisgICAgICAgICAgICAvLyBpcyBkZWFkIGNvZGUuCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBh
Ym91dCB0aGUgdGhpcyBhcmd1bWVudC4gSWYgd2UgZG9uJ3QgaGF2ZSBhIGZpcnN0CisgICAgICAg
IC8vIGFyZ3VtZW50IHRoZW4gbWFrZSB0aGlzIEpTQ29uc3RhbnQoTmFOKS4KKyAgICAgICAgaW50
IGFic0FyZyA9IGZpcnN0QXJnICsgMTsKKyAgICAgICAgaWYgKGFic0FyZyA+IGxhc3RBcmcpCisg
ICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY29uc3RhbnROYU4oKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoQWJzLCBn
ZXRUb051bWJlcihhYnNBcmcpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGludHJpbnNpYyA9PSBOb0ludHJpbnNp
Yyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiB7CiAgICAgLy8gTm8gbmVlZCB0byByZXNl
dCBzdGF0ZSBpbml0aWFsbHksIHNpbmNlIGl0IGhhcyBiZWVuIHNldCBieSB0aGUgY29uc3RydWN0
b3IuCkBAIC0xMTY5LDYgKzEyMjgsMzAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfZW5kKTsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBjYWxsVGFy
Z2V0ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
aWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCAqbV9nbG9iYWxEYXRh
LCBjYWxsVGFyZ2V0KSkgeworICAgICAgICAgICAgICAgIGludCBhcmdDb3VudCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgICAgICBp
bnQgZmlyc3RBcmcgPSByZWdpc3Rlck9mZnNldCAtIGFyZ0NvdW50IC0gUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgICAgIGludCBsYXN0QXJnID0gZmlyc3RB
cmcgKyBhcmdDb3VudCAtIDE7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
RG8gd2UgaGF2ZSBhIHJlc3VsdD8KKyAgICAgICAgICAgICAgICBib29sIHVzZXNSZXN1bHQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzdWx0T3BlcmFuZCA9IDA7IC8vIG1ha2UgY29t
cGlsZXIgaGFwcHkKKyAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24g
PSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICAg
ICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
T3BlcmFuZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgICAgICAg
ICAgdXNlc1Jlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIERGRzo6SW50cmluc2ljIGludHJpbnNpYyA9IG1fZ3JhcGgudmFs
dWVPZkZ1bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ssICptX2dsb2JhbERhdGEsIGNhbGxUYXJn
ZXQpLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwg
aW50cmluc2ljLCBmaXJzdEFyZywgbGFzdEFyZykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
TkVYVF9PUENPREUoKSBoYXMgdG8gYmUgaW5zaWRlIGJyYWNlcy4KKyAgICAgICAgICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY2FsbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZENhbGwoaW50
ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCk7CiAgICAgICAgICAgICBhbGlhc2Vz
LnJlY29yZENhbGwoY2FsbCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk1MjczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzgsNiArMjM4LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhdChub2RlSW5k
ZXgpLmlzQm9vbGVhbkNvbnN0YW50KGNvZGVCbG9jayk7CiAgICAgfQorICAgIGJvb2wgaXNGdW5j
dGlvbkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBpZiAoIWlzSlNDb25zdGFu
dChub2RlSW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWdl
dEpTRnVuY3Rpb24oZ2xvYmFsRGF0YSwgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrLCBub2Rl
SW5kZXgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJvbSBu
b2Rlcy4KICAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2Nr
LCBOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKQEAgLTI1Nyw2ICsyNjUsMTIgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50Tm9kZShjb2RlQmxvY2ss
IG5vZGVJbmRleCkuZ2V0Qm9vbGVhbigpOwogICAgIH0KKyAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9m
RnVuY3Rpb25Db25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgSlNDZWxsKiBmdW5j
dGlvbiA9IGdldEpTRnVuY3Rpb24oZ2xvYmFsRGF0YSwgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJs
b2NrLCBub2RlSW5kZXgpKTsKKyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKKyAgICAgICAgcmV0
dXJuIGFzRnVuY3Rpb24oZnVuY3Rpb24pOworICAgIH0KIAogI2lmbmRlZiBOREVCVUcKICAgICBz
dGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW50cmluc2ljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnRyaW5zaWMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW50cmluc2ljLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdJbnRyaW5zaWNfaAorI2RlZmluZSBERkdJbnRyaW5zaWNfaAorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2VudW0gSW50cmluc2ljIHsKKyAgICBOb0ludHJpbnNpYywKKyAg
ICBBYnNJbnRyaW5zaWMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIERGR0ludHJpbnNpY19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2
LDEwICs0MjYsMTIgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0RvdWJsZUNvbnN0YW50KG5vZGVJbmRl
eCk7IH0KICAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyBy
ZXR1cm4gbV9qaXQuaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgYm9vbCBpc0Jv
b2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0Jvb2xl
YW5Db25zdGFudChub2RlSW5kZXgpOyB9CisgICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNGdW5jdGlvbkNvbnN0YW50KG5vZGVJ
bmRleCk7IH0KICAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCk7IH0K
ICAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsg
cmV0dXJuIG1faml0LnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgSlNW
YWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2pp
dC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgYm9vbCB2YWx1ZU9mQm9vbGVh
bkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZCb29s
ZWFuQ29uc3RhbnQobm9kZUluZGV4KTsgfQorICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlv
bkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZGdW5j
dGlvbkNvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBib29sIGlzTnVsbENvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIWlzQ29uc3RhbnQobm9kZUluZGV4
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJl
dmlzaW9uIDk1MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsMTEgKzI1MSwxMyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0RvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCku
aXNEb3VibGVDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNO
dW1iZXJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzTnVt
YmVyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KICAgICBib29sIGlzQm9vbGVh
bkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkuaXNCb29sZWFu
Q29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzRnVuY3Rpb25D
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzRnVuY3Rpb25D
b25zdGFudChjb2RlQmxvY2soKSwgKmdsb2JhbERhdGEoKSwgbm9kZUluZGV4KTsgfQogICAgIC8v
IEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJvbSBub2Rlcy4KICAgICBKU1Zh
bHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBo
KCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KICAgICBpbnQz
Ml90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdy
YXBoKCkudmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KICAg
ICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0
dXJuIGdyYXBoKCkudmFsdWVPZk51bWJlckNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgp
OyB9CiAgICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
IHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkJvb2xlYW5Db25zdGFudChjb2RlQmxvY2soKSwgbm9k
ZUluZGV4KTsgfQorICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQo
Y29kZUJsb2NrKCksICpnbG9iYWxEYXRhKCksIG5vZGVJbmRleCk7IH0KIAogICAgIC8vIFRoZXNl
IG1ldGhvZHMgSklUIGdlbmVyYXRlIGR5bmFtaWMsIGRlYnVnLW9ubHkgY2hlY2tzIC0gYWtpbiB0
byBBU1NFUlRzLgogI2lmIEVOQUJMRShERkdfSklUX0FTU0VSVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNiArMTUxLDcgQEAgcHJp
dmF0ZToKICAgICBtYWNybyhBcml0aE11bCwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIG1hY3Jv
KEFyaXRoRGl2LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhNb2QsIE5vZGVS
ZXN1bHROdW1iZXIpIFwKKyAgICBtYWNybyhBcml0aEFicywgTm9kZVJlc3VsdE51bWJlcikgXAog
ICAgIC8qIEFyaXRobWV0aWMgb3BlcmF0b3JzIGNhbGwgVG9OdW1iZXIgb24gdGhlaXIgb3BlcmFu
ZHMuICovXAogICAgIG1hY3JvKFZhbHVlVG9OdW1iZXIsIE5vZGVSZXN1bHROdW1iZXIgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw2ICsyMTUs
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcml0aEFiczogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBj
aGlsZCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICBpZiAoaXNT
dHJvbmdQcmVkaWN0aW9uKGNoaWxkKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihjaGlsZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICAgICAgY2FzZSBDb21wYXJlTGVz
czoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1MjczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNTcsNiArMTA1NywzMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIGludGVnZXJSZXN1bHQoZWR4LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcml0aEFi
czogeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSkg
eworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIG1faml0LnJzaGlmdDMyKHJlc3VsdC5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQuYWRk
MzIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LnhvcjMy
KHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEgPDwgMzEpKSk7CisgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOworICAgICAgICAKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVplcm9D
b25zdGFudCA9IC0wLjA7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkRG91YmxlKCZuZWdh
dGl2ZVplcm9Db25zdGFudCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgbV9qaXQuYW5kbm90RG91
YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3Vs
dC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBj
YXNlIExvZ2ljYWxOb3Q6IHsKICAgICAgICAgaWYgKGlzS25vd25Cb29sZWFuKG5vZGUuY2hpbGQx
KCkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY4NiwxNiArMzY4NiwxNiBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRU
aHVua3M6Omhvc3RGdW5jdGlvCiB7CiAgICAgc3RkOjpwYWlyPEhvc3RGdW5jdGlvblN0dWJNYXA6
Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0
aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwogICAgIGlmICghKmVudHJ5LmZpcnN0LT5z
ZWNvbmQpCi0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRp
dmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNh
bGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9z
dEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNl
dCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKSVQ6
OmNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNv
bnN0cnVjdCgpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIERGRzo6Tm9JbnRyaW5z
aWMpKTsKICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZC5nZXQoKTsKIH0KIAotTmF0aXZl
RXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IsIERGRzo6SW50cmluc2ljIGludHJpbnNpYykKIHsKICAgICBzdGQ6OnBhaXI8
SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rp
b25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAg
aWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZSA9IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGdsb2JhbERhdGEp
IDogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7Ci0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQu
c2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNv
ZGUsIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9y
KSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVF
eGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3Qo
KSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMpKTsKICAgICB9CiAg
ICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2RlZmluZSBKSVRTdHVic19oCiAKICNpbmNsdWRlICJDYWxsRGF0YS5oIgorI2luY2x1ZGUgIkRG
R0ludHJpbnNpYy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1
ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCkBAIC0yOTcsNyAr
Mjk4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
dGlTdHViKEpTR2xvYmFsRGF0YSosIFRodW5rR2VuZXJhdG9yKTsKIAogICAgICAgICBOYXRpdmVF
eGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9u
KTsKLSAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERh
dGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IpOworICAgICAgICBOYXRpdmVFeGVj
dXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uLCBU
aHVua0dlbmVyYXRvciwgREZHOjpJbnRyaW5zaWMpOwogCiAgICAgICAgIHZvaWQgY2xlYXJIb3N0
RnVuY3Rpb25TdHVicygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlSW5zdGFuY2VDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGVJbnN0YW5jZUNhY2hlLmgJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBEYXRlSW5zdGFuY2VDYWNoZV9oCiAKICNpbmNsdWRl
IDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUw
LDEzIEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCiAgICAgbV9udW1QYXJhbWV0
ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogfQogCisjaWYg
RU5BQkxFKERGR19KSVQpCitERkc6OkludHJpbnNpYyBFeGVjdXRhYmxlQmFzZTo6aW50cmluc2lj
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gREZHOjpOb0ludHJpbnNpYzsKK30KKyNlbmRpZgorCiBj
bGFzcyBFeGVjdXRhYmxlRmluYWxpemVyIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAg
dmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqKQogICAg
IHsKQEAgLTcwLDYgKzc3LDEzIEBAIE5hdGl2ZUV4ZWN1dGFibGU6On5OYXRpdmVFeGVjdXRhYmxl
KCkKIHsKIH0KIAorI2lmIEVOQUJMRShERkdfSklUKQorREZHOjpJbnRyaW5zaWMgTmF0aXZlRXhl
Y3V0YWJsZTo6aW50cmluc2ljKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRyaW5zaWM7Cit9
CisjZW5kaWYKKwogY29uc3QgQ2xhc3NJbmZvIFNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsg
IlNjcmlwdEV4ZWN1dGFibGUiLCAmRXhlY3V0YWJsZUJhc2U6OnNfaW5mbywgMCwgMCB9OwogCiBj
b25zdCBDbGFzc0luZm8gRXZhbEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2YWxFeGVjdXRhYmxl
IiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1Niw2ICsxNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaGFz
SklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAgICAgICB9CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICAgICAgdmlydHVhbCBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdDsKKyNlbmRp
ZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKSVRDb2RlIG1faml0Q29kZUZvckNhbGw7CiAg
ICAgICAgIEpJVENvZGUgbV9qaXRDb2RlRm9yQ29uc3RydWN0OwpAQCAtMTczLDE1ICsxNzcsMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgRXhlY3V0YWJsZUJhc2UgQmFzZTsK
IAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2FsbFRo
dW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbnN0
cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKKyAgICAgICAgc3RhdGljIE5h
dGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9y
LCBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHsKICAgICAgICAgICAgIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBpZiAoIWNhbGxUaHVuaykgewog
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgKGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVj
dXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIGZ1
bmN0aW9uLCBjb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSwgSklUQ29kZSgpLCBKSVRDb2RlKCkpOworICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIEpJVENvZGUoKSwgSklU
Q29kZSgpLCBpbnRyaW5zaWMpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBleGVjdXRhYmxlID0gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFs
RGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3Ry
dWN0b3IpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEsIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBKSVRDb2RlOjpIb3N0RnVu
Y3Rpb24oY29uc3RydWN0VGh1bmspKTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY2FsbFRodW5rKSwg
SklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVjdFRodW5rKSwgaW50cmluc2ljKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CkBAIC0y
MDQsMTUgKzIwOCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByb3RlY3RlZDoKICNpZiBF
TkFCTEUoSklUKQotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSklUQ29kZSBjYWxsVGh1bmssIEpJVENvZGUgY29uc3RydWN0VGh1bmspCisgICAg
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKSVRDb2Rl
IGNhbGxUaHVuaywgSklUQ29kZSBjb25zdHJ1Y3RUaHVuaywgREZHOjpJbnRyaW5zaWMgaW50cmlu
c2ljKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBjYWxsVGh1bms7CiAgICAgICAg
ICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBjb25zdHJ1Y3RUaHVuazsKICAgICAgICAgICAg
IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGNhbGxUaHVuay5hZGRyZXNzRm9yQ2Fs
bCgpOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBj
b25zdHJ1Y3RUaHVuay5hZGRyZXNzRm9yQ2FsbCgpOworI2lmIEVOQUJMRShERkdfSklUKQorICAg
ICAgICAgICAgbV9pbnRyaW5zaWMgPSBpbnRyaW5zaWM7CisjZW5kaWYKICAgICAgICAgfQogI2Vu
ZGlmCisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICB2aXJ0dWFsIERGRzo6
SW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0OworI2VuZGlmCiAgCiAgICAgcHJpdmF0ZToKICNp
ZiBFTkFCTEUoSklUKQpAQCAtMjM1LDYgKzI0Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAvLyBQcm9iYWJseSBzaG91bGQgYmUgYSBOYXRpdmVDb25zdHJ1Y3RvciwgYnV0IHRoaXMgd2ls
bCBjdXJyZW50bHkgcmVxdWlyZSByZXdyaXRpbmcgdGhlIEpJVAogICAgICAgICAvLyB0cmFtcG9s
aW5lLiBJdCBtYXkgYmUgZWFzaWVyIHRvIG1ha2UgTmF0aXZlRnVuY3Rpb24gYmUgcGFzc2VkICd0
aGlzJyBhcyBhIHBhcnQgb2YgdGhlIEFyZ0xpc3QuCiAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIG1f
Y29uc3RydWN0b3I7CisgICAgICAgIAorICAgICAgICBERkc6OkludHJpbnNpYyBtX2ludHJpbnNp
YzsKICAgICB9OwogCiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRh
YmxlQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEwLDkgKzQxMCw5IEBA
IE5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEYKIHsKICAgICByZXR1cm4g
aml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24pOwogfQotTmF0aXZlRXhl
Y3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK05hdGl2ZUV4ZWN1dGFibGUqIEpTR2xv
YmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IsIERGRzo6SW50cmluc2ljIGludHJpbnNpYykKIHsKLSAgICByZXR1
cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24sIGdlbmVyYXRvcik7
CisgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBn
ZW5lcmF0b3IsIGludHJpbnNpYyk7CiB9CiAjZWxzZQogTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9i
YWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24g
OTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTAgQEAKICNkZWZpbmUgSlNHbG9iYWxEYXRhX2gK
IAogI2luY2x1ZGUgIkNhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSAiREZHSW50cmluc2ljLmgiCiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNl
Q2FjaGUuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiSGVh
cC5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVk
ZSAiSlNWYWx1ZS5oIgpAQCAtMjE5LDcgKzIyMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhpcywgZ2VuZXJhdG9y
KTsKICAgICAgICAgfQotICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24o
TmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJs
ZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciwgREZHOjpJ
bnRyaW5zaWMpOwogI2VuZGlmCiAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5j
dGlvbihOYXRpdmVGdW5jdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xvb2t1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTG9va3VwLmNwcAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Mb29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBAIHZvaWQg
SGFzaFRhYmxlOjpjcmVhdGVUYWJsZShKU0dsb2JhbERhdGEKICAgICAgICAgZW50cnktPmluaXRp
YWxpemUoaWRlbnRpZmllciwgdmFsdWVzW2ldLmF0dHJpYnV0ZXMsIHZhbHVlc1tpXS52YWx1ZTEs
IHZhbHVlc1tpXS52YWx1ZTIKICNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHZhbHVlc1tpXS5nZW5lcmF0b3IKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCB2YWx1ZXNbaV0uaW50cmluc2ljCisjZW5kaWYKICNlbmRpZgog
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgIH0KQEAgLTc5LDcgKzgyLDcgQEAgdm9p
ZCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gdGhpc09iai0+Z2xvYmFsT2JqZWN0KCk7CiAjaWYgRU5BQkxF
KEpJVCkKICAgICAgICAgaWYgKGVudHJ5LT5nZW5lcmF0b3IoKSkKLSAgICAgICAgICAgIGZ1bmN0
aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlO
YW1lLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigp
LCBlbnRyeS0+Z2VuZXJhdG9yKCkpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlv
bjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVj
dHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9i
YWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBlbnRyeS0+Z2VuZXJh
dG9yKCksIGVudHJ5LT5pbnRyaW5zaWMoKSkpOwogICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgo
KSwgcHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Mb29rdXAuaAkocmV2aXNpb24gOTUyNzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBA
QAogI2RlZmluZSBMb29rdXBfaAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAi
REZHSW50cmluc2ljLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlTbG90LmgiCkBAIC00NCw2ICs0NSw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnRwdHJfdCB2YWx1ZTI7CiAjaWYgRU5BQkxFKEpJ
VCkKICAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yOworI2lmIEVOQUJMRShERkdfSklU
KQorICAgICAgICBERkc6OkludHJpbnNpYyBpbnRyaW5zaWM7CisjZW5kaWYKICNlbmRpZgogICAg
IH07CiAKQEAgLTU4LDYgKzYyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaW5p
dGlhbGl6ZShTdHJpbmdJbXBsKiBrZXksIHVuc2lnbmVkIGNoYXIgYXR0cmlidXRlcywgaW50cHRy
X3QgdjEsIGludHB0cl90IHYyCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gMAorI2lmIEVOQUJMRShERkdfSklUKQor
ICAgICAgICAgICAgICAgICAgICAgICAgLCBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMgPSBERkc6
Ok5vSW50cmluc2ljCisjZW5kaWYKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgKQog
ICAgICAgICB7CkBAIC02Nyw2ICs3NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
bV91LnN0b3JlLnZhbHVlMiA9IHYyOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICBtX3Uu
ZnVuY3Rpb24uZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworI2lmIEVOQUJMRShERkdfSklUKQorICAg
ICAgICAgICAgbV91LmZ1bmN0aW9uLmludHJpbnNpYyA9IGludHJpbnNpYzsKKyNlbmRpZgogI2Vu
ZGlmCiAgICAgICAgICAgICBtX25leHQgPSAwOwogICAgICAgICB9CkBAIC03OCw2ICs4OCwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcigpIGNvbnN0IHsgQVNTRVJUKG1fYXR0cmlidXRlcyAmIEZ1bmN0aW9uKTsg
cmV0dXJuIG1fdS5mdW5jdGlvbi5nZW5lcmF0b3I7IH0KKyAgICAgICAgREZHOjpJbnRyaW5zaWMg
aW50cmluc2ljKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fYXR0cmli
dXRlcyAmIEZ1bmN0aW9uKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgIHJldHVy
biBtX3UuZnVuY3Rpb24uaW50cmluc2ljOworI2Vsc2UKKyAgICAgICAgICAgIHJldHVybiBERkc6
Ok5vSW50cmluc2ljOworI2VuZGlmCisgICAgICAgIH0KICNlbmRpZgogICAgICAgICBOYXRpdmVG
dW5jdGlvbiBmdW5jdGlvbigpIGNvbnN0IHsgQVNTRVJUKG1fYXR0cmlidXRlcyAmIEZ1bmN0aW9u
KTsgcmV0dXJuIG1fdS5mdW5jdGlvbi5mdW5jdGlvblZhbHVlOyB9CiAgICAgICAgIHVuc2lnbmVk
IGNoYXIgZnVuY3Rpb25MZW5ndGgoKSBjb25zdCB7IEFTU0VSVChtX2F0dHJpYnV0ZXMgJiBGdW5j
dGlvbik7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX3UuZnVuY3Rpb24ubGVu
Z3RoKTsgfQpAQCAtMTA0LDYgKzEyMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
ICAgIGludHB0cl90IGxlbmd0aDsgLy8gbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24K
ICNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cjsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgICAgICBERkc6OkludHJpbnNpYyBp
bnRyaW5zaWM7CisjZW5kaWYKICNlbmRpZgogICAgICAgICAgICAgfSBmdW5jdGlvbjsKICAgICAg
ICAgICAgIHN0cnVjdCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTI3NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEx
LTA5LTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgREZHIEpJ
VCBzaG91bGQgaW5saW5lIE1hdGguYWJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02ODIyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGVkIEphdmFTY3JpcHRDb3JlL2RmZyB0byBpbmNsdWRlIHBhdGgg
cGF0aC4gQ2hhbmdlZCB0aGUgYmluZGluZ3MKKyAgICAgICAgc2NyaXB0cyB0byBoYW5kbGUgdGhl
IHByZXNlbmNlIG9mIGludHJpbnNpY3MuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdl
bmVyYXRlSGFzaFRhYmxlKToKKwogMjAxMS0wOS0xNiAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3Jj
aG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgW1F0XSBDcmFzaCB3aGVuIGRyYWdnaW5nIGdvb2ds
ZSBtYXBzLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1MjczKQorKysgU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcg
QEAgU0VUKFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vYXNzZW1ibGVyIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvZGUiCiAg
ICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9ieXRlY29tcGlsZXIiCisgICAgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS9kZmciCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9oZWFwIgogICAgICIk
e0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGVidWdnZXIiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElS
fS9pbnRlcnByZXRlciIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA5NTI3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTM2LDYgKzI5MzYsMTEgQEAgc3ViIEdlbmVyYXRlSGFzaFRhYmxlCiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIjZWxzZVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZGVmaW5lIFRI
VU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNl
bmRpZlxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgRU5BQkxFKERGR19KSVQpXG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNkZWZpbmUgSU5UUklOU0lDKGludHJpbnNpYykg
LCBpbnRyaW5zaWNcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiI2Vsc2VcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiI2RlZmluZSBJTlRSSU5TSUMoaW50cmluc2ljKVxuIik7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG5zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgJG5hbWVFbnRyaWVzXFtcXSA9XG5ce1xu
Iik7CiAgICAgJGkgPSAwOwogICAgIGZvcmVhY2ggbXkgJGtleSAoQHska2V5c30pIHsKQEAgLTI5
NTUsMTMgKzI5NjAsMTMgQEAgc3ViIEdlbmVyYXRlSGFzaFRhYmxlCiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAkdGFyZ2V0VHlwZSA9ICJzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4iOwogICAgICAgICB9Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHsgXCIka2V5XCIsIEAkc3BlY2lhbHNbJGldLCAoaW50cHRyX3QpIiAuICR0YXJnZXRUeXBlIC4g
IihAJHZhbHVlMVskaV0pLCAoaW50cHRyX3QpQCR2YWx1ZTJbJGldIFRIVU5LX0dFTkVSQVRPUigw
KSB9LFxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHsgXCIka2V5XCIsIEAk
c3BlY2lhbHNbJGldLCAoaW50cHRyX3QpIiAuICR0YXJnZXRUeXBlIC4gIihAJHZhbHVlMVskaV0p
LCAoaW50cHRyX3QpQCR2YWx1ZTJbJGldIFRIVU5LX0dFTkVSQVRPUigwKSBJTlRSSU5TSUMoREZH
OjpOb0ludHJpbnNpYykgfSxcbiIpOwogICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIik7CiAgICAgICAgIH0KICAgICAg
ICAgKyskaTsKICAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgeyAwLCAwLCAwLCAw
IFRIVU5LX0dFTkVSQVRPUigwKSB9XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB7
IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6Ok5vSW50cmluc2lj
KSB9XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn07XG5cbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50LCAiI3VuZGVmIFRIVU5LX0dFTkVSQVRPUlxuIik7CiAgICAgbXkgJGNvbXBhY3RT
aXplTWFzayA9ICRudW1FbnRyaWVzIC0gMTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1Mjc1
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTEtMDktMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBERkcgSklUIHNob3VsZCBpbmxpbmUgTWF0aC5hYnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSmF2YVNjcmlwdENvcmUvZGZnIHRvIGlu
Y2x1ZGUgcGF0aCBwYXRoLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisKIDIwMTEtMDkt
MTUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW5hbWUgRU5B
QkxFKERBVEFCQVNFKSB0byBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDk1MjczKQorKysgU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAgU0VUKFdlYktpdDJfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYXNzZW1ibGVyIgogICAgICIke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvZGUiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9i
eXRlY29tcGlsZXIiCisgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9kZmciCiAgICAgIiR7SkFW
QVNDUklQVENPUkVfRElSfS9jb2xsZWN0b3IvaGFuZGxlcyIKICAgICAiJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2hlYXAiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnRlcnByZXRlciIKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCShyZXZpc2lvbiA5NTI3NSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDktMTYgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBERkcgSklUIHNob3VsZCBpbmxpbmUgTWF0aC5h
YnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjI3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQg
SmF2YVNjcmlwdENvcmUvZGZnIHRvIGluY2x1ZGUgcGF0aCBwYXRoLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisKIDIwMTEtMDktMTQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIFdlYkNvcmVWaWV3RmFjdG9yeSBhbmQgaXRz
IFdlYlZpZXdGYWN0b3J5IHN1YmNsYXNzCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDk1MjczKQorKysgU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQCBTRVQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2Fzc2VtYmxlciIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2J5dGVjb2RlIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvbXBpbGVyIgorICAg
ICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGZnIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
aGVhcCIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2RlYnVnZ2VyIgogICAgICIke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vaW50ZXJwcmV0ZXIiCg==
</data>
<flag name="review"
          id="104360"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>