<?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>68335</bug_id>
          
          <creation_ts>2011-09-18 23:15:49 -0700</creation_ts>
          <short_desc>DFG speculation failures should act as additional value profiles</short_desc>
          <delta_ts>2011-09-19 15:27:01 -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>
          
          <blocked>68329</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>469246</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 23:15:49 -0700</bug_when>
    <thetext>We want to support reoptimizing code if speculation failures appear to be frequent.  But to do so, we need to track why code is failing speculation, so that we don&apos;t make the mistake of making the same incorrect speculation in the future.  Currently, the OSR exit code has no such tracking; it will promptly forget why code failed OSR.

This is particularly bad in the following code:

function foo(a,b) {
    for (var i = 0; i &lt; 100000; ++i) {
        a += b;
    }
    return a;
}

print(foo(1,10000000));

foo() is always called with integer arguments.  But it will fail speculation on the addition &quot;a += b&quot; because of an overflow.  Even after OSR when running in the old JIT code, the value profiler won&apos;t catch this because the only value profiling sites in foo() are for the arguments.  In general, code that fails speculation on integer arithmetic will have no way of recovering: the old JIT will correctly reperform the arithmetic using doubles, but will never record that it had done so.

The solution is either to beef up the amount of value profiling that the old JIT performs - for example profiling the results of arithmetic ops - or to record where and why DFG code is failing speculation, and at what rate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469248</commentid>
    <comment_count>1</comment_count>
      <attachid>107807</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 23:18:56 -0700</bug_when>
    <thetext>Created attachment 107807
work in progress

This is still a work in progress, and has known problems: https://bugs.webkit.org/show_bug.cgi?id=68335</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469249</commentid>
    <comment_count>2</comment_count>
      <attachid>107807</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 23:19:29 -0700</bug_when>
    <thetext>Comment on attachment 107807
work in progress

Ooops, pasted a patch on the wrong bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469251</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 23:36:16 -0700</bug_when>
    <thetext>The best way to do this might actually be to have slow case counters in the old JIT.

There are three cases of speculation failure:

1) We speculate on a value that was loaded from memory, was the result of a call, or was passed as an argument.  These are all things that the old JIT already profiles.  If speculation failures occur due to those cases, then all it takes is to let the old JIT warm itself up again, and the rerun the DFG.  The DFG::Propagator should take care to propagate the predictions from those profiles to all uses, even if they go through local or global variable accesses.

2) We speculate that a particular operation behaves a certain way: for example we speculate that an integer arithmetic does not overflow, or that an integer multiplication does not yield zero.  This only occurs in the case of integer speculation.  The old JIT will take the fast path for integer arithmetic except if it fails to behave in exactly the way that the DFG JIT would have speculated.  Thus, counting the number of slow path executions suffices to tell us that such a speculation would be unwise.

3) We speculate that the code is not crazy: for example we speculate that op_convert_this takes a cell as its input, and that this cell is not a string.  We will currently experience pathologies because the DFG has no facility to compile the code any other way, other than to perform the speculation.  This is a separate probem, since the DFG would have been able to realize that it should not speculate non-string-cell on ConvertThis if it just looked at the predictions.  Even if it did not do this, a slow path counter in the old JIT would catch this case!

I will think about this a bit more, but it seems like slow case counters are the way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469301</commentid>
    <comment_count>4</comment_count>
      <attachid>107823</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-19 02:48:50 -0700</bug_when>
    <thetext>Created attachment 107823
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469309</commentid>
    <comment_count>5</comment_count>
      <attachid>107828</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-19 03:35:15 -0700</bug_when>
    <thetext>Created attachment 107828
the patch

This is now a win instead of a loss.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;CarefulArith&quot; at /Volumes/Data/pizlo/senary/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              CarefulArith                                  
SunSpider:
   3d-cube                                7.6707+-0.1484    ?     7.6733+-0.1334       ?
   3d-morph                               7.3894+-0.1137          7.3828+-0.1431       
   3d-raytrace                            7.5342+-0.2006    ?     7.6385+-0.1796       ? might be 1.0139x slower
   access-binary-trees                    2.3883+-0.0700          2.3290+-0.0696         might be 1.0255x faster
   access-fannkuch                       11.5046+-0.1685    ?    11.5155+-0.2161       ?
   access-nbody                           3.9088+-0.1078    ?     3.9422+-0.0874       ?
   access-nsieve                          2.6796+-0.0546          2.6248+-0.0471         might be 1.0209x faster
   bitops-3bit-bits-in-byte               1.7100+-0.0330          1.6965+-0.0259       
   bitops-bits-in-byte                    2.8467+-0.0819    ?     2.8854+-0.0682       ? might be 1.0136x slower
   bitops-bitwise-and                     3.6884+-0.0598          3.6508+-0.0799         might be 1.0103x faster
   bitops-nsieve-bits                     5.3210+-0.1023    ?     5.3410+-0.1064       ?
   controlflow-recursive                  2.0924+-0.0730          2.0055+-0.0508         might be 1.0433x faster
   crypto-aes                             7.1066+-0.3143          6.8911+-0.3292         might be 1.0313x faster
   crypto-md5                             2.8268+-0.0868    ?     2.8406+-0.0730       ?
   crypto-sha1                            2.2441+-0.0588    ?     2.2576+-0.0545       ?
   date-format-tofte                     10.2087+-0.1888    ?    10.5143+-0.2890       ? might be 1.0299x slower
   date-format-xparb                      8.5579+-0.1966    ?     8.8230+-0.2043       ? might be 1.0310x slower
   math-cordic                            6.1892+-0.1063          6.1612+-0.0862       
   math-partial-sums                      7.6945+-0.3189          7.3158+-0.1287         might be 1.0518x faster
   math-spectral-norm                     2.6537+-0.0516          2.5877+-0.0562         might be 1.0255x faster
   regexp-dna                            10.8771+-0.1977         10.8093+-0.1862       
   string-base64                          5.7514+-0.1539          5.7447+-0.1340       
   string-fasta                           7.0485+-0.1578          6.9804+-0.1471       
   string-tagcloud                       11.6758+-0.1512    ?    11.7351+-0.2206       ?
   string-unpack-code                    18.5442+-0.2653         18.2784+-0.2714         might be 1.0145x faster
   string-validate-input                  6.4478+-0.1534    ?     6.4600+-0.1284       ?

   &lt;arithmetic&gt;                           6.4062+-0.0309          6.3879+-0.0236       
   &lt;geometric&gt;                            5.3178+-0.0243          5.2916+-0.0192       
   &lt;harmonic&gt;                             4.3772+-0.0325          4.3417+-0.0284       

                                            TipOfTree              CarefulArith                                  
V8:
   crypto                                83.1693+-0.6166    ^    74.3636+-0.6450       ^ definitely 1.1184x faster
   deltablue                            241.0632+-2.0985        240.5850+-2.2448       
   earley-boyer                          96.3423+-0.5503         96.2938+-0.4649       
   raytrace                              68.6738+-0.4872    !    69.7420+-0.4037       ! definitely 1.0156x slower
   regexp                               106.1911+-0.4768        106.1558+-0.4123       
   richards                             217.1715+-0.8134    ?   217.6257+-1.0068       ?
   splay                                 99.4481+-0.5696         99.3026+-0.3885       

   &lt;arithmetic&gt;                         130.2942+-0.3502    ^   129.1527+-0.3620       ^ definitely 1.0088x faster
   &lt;geometric&gt;                          117.2219+-0.2083    ^   115.5814+-0.2118       ^ definitely 1.0142x faster
   &lt;harmonic&gt;                           107.3689+-0.2022    ^   105.3933+-0.2000       ^ definitely 1.0187x faster

                                            TipOfTree              CarefulArith                                  
Kraken:
   ai-astar                             629.2795+-3.0913        627.9005+-2.5983       
   audio-beat-detection                 469.9773+-2.0664    ^   462.7418+-1.4188       ^ definitely 1.0156x faster
   audio-dft                            420.2076+-2.6332    ?   426.9679+-4.2427       ? might be 1.0161x slower
   audio-fft                            361.7542+-1.2142    !   364.1869+-1.0514       ! definitely 1.0067x slower
   audio-oscillator                     311.2696+-0.8523    !   318.0720+-1.6896       ! definitely 1.0219x slower
   imaging-darkroom                     411.9517+-0.7872    !   417.4208+-1.5802       ! definitely 1.0133x slower
   imaging-desaturate                   218.6913+-0.7069    ^   216.9134+-0.6400       ^ definitely 1.0082x faster
   imaging-gaussian-blur                589.3157+-1.7928    ^   586.1567+-0.7324       ^ definitely 1.0054x faster
   json-parse-financial                  48.1661+-0.2949    !    49.6449+-0.2307       ! definitely 1.0307x slower
   json-stringify-tinderbox              68.0875+-0.3727         67.9741+-0.3485       
   stanford-crypto-aes                  142.2783+-0.5305    ?   142.3321+-0.8114       ?
   stanford-crypto-ccm                  110.5747+-0.6112        109.8949+-0.4929       
   stanford-crypto-pbkdf2               390.5863+-1.8163    !   401.1321+-2.9775       ! definitely 1.0270x slower
   stanford-crypto-sha256-iterative     147.4190+-0.6451    !   148.9498+-0.4688       ! definitely 1.0104x slower

   &lt;arithmetic&gt;                         308.5399+-0.3431    !   310.0206+-0.2831       ! definitely 1.0048x slower
   &lt;geometric&gt;                          240.8205+-0.3138    !   242.3024+-0.2427       ! definitely 1.0062x slower
   &lt;harmonic&gt;                           171.4876+-0.4060    !   173.0798+-0.3425       ! definitely 1.0093x slower

                                            TipOfTree              CarefulArith                                  
All benchmarks:
   &lt;arithmetic&gt;                         114.8549+-0.1224    !   115.1158+-0.0940       ! definitely 1.0023x slower
   &lt;geometric&gt;                           26.2457+-0.0715         26.1669+-0.0582       
   &lt;harmonic&gt;                             7.7217+-0.0560          7.6600+-0.0491</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469640</commentid>
    <comment_count>6</comment_count>
      <attachid>107909</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-19 13:26:57 -0700</bug_when>
    <thetext>Created attachment 107909
the patch - attempt to make Windows happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469738</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-19 15:27:01 -0700</bug_when>
    <thetext>Landed in r95484.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107807</attachid>
            <date>2011-09-18 23:18:56 -0700</date>
            <delta_ts>2011-09-18 23:19:29 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>recomp_patch_1.diff</filename>
            <type>text/plain</type>
            <size>39403</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHN1cHBvcnQgY29udGludW91cyBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXT1JLIElOIFBST0dSRVNT
LiBUaGlzIHN0aWxsIGhhcyBrbm93biBwcm9ibGVtczoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzM1CisgICAgICAgIAorICAgICAgICBJIHdpbGwg
Zml4IHRob3NlIHNlcGFyYXRlbHkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpqZXR0
aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVFbnRyeSk6Cisg
ICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3Rz
KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cyk6
CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAv
Q29uc2VydmF0aXZlUm9vdHMuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwOjpqZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtS
b290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OkpldHRpc29uZWRDb2RlQmxvY2tzKToK
KyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6On5KZXR0aXNvbmVkQ29kZUJsb2Nr
cyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjphZGRDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcyk6CisgICAgICAg
IChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MpOgor
ICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6dHJhY2VDb2RlQmxvY2tzKToKKyAg
ICAgICAgKiBoZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6bWFyayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNU
SU9OKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpq
ZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpqZXR0aXNv
bk9wdGltaXplZENvZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlz
b25PcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0
aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRp
c29uT3B0aW1pemVkQ29kZUZvcik6CisKIDIwMTEtMDktMTggIERhbiBCZXJuc3RlaW4gIDxtaXR6
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmVkIFByb2ZpbGVyU2VydmVyLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk1Mzk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDYgKzc0LDggQEAKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8q
IFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICov
OyB9OwogCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRThFMTQyMDdB
NTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQkwRkQ4MkVGNTE0MjMwNzVC
MDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50cmluc2lj
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZE
ODJGMkIxNDI2Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAx
NzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0
dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxv
Y2tzLmNwcCAqLzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3
NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5j
cHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4
OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAt
ODEzLDYgKzgxNSw4IEBACiAJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRU
eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU4RTE0MjA3QTUxMDAx
NzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZhbHVlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHSW50cmluc2ljLmg7IHBhdGggPSBkZmcvREZHSW50cmluc2lj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5
NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQx
MjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NB
bGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlF
MTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MjEsNiArMTYyNSw4IEBACiAJCTE0MkUzMTJBMTM0RkYw
QTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9j
a3MuY3BwICovLAorCQkJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5oICovLAogCQkJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyLmggKi8sCiAJCQkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmggKi8sCiAJCQkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmNwcCAqLywKQEAgLTI0MjMsNiArMjQyOSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFD
NTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1
NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQx
NDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkQ4MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHND
aGVja2VkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTMwOTcsNiArMzEwNCw3IEBA
CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyog
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFOTAxNDIw
N0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQ4MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyOCw2ICsxNDI4LDggQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9zb3VyY2VPZmZzZXQo
c291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1ib2xUYWJsZShzeW1UYWIpCiAgICAgLCBtX2FsdGVy
bmF0aXZlKGFsdGVybmF0aXZlKQorICAgICwgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKDAp
CisgICAgLCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXIoMCkKICAgICAsIG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyKDApCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKQEAgLTE5MzUsNiArMTkz
NywyNyBAQCBib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGCiAgICAgICAg
IHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCh0aGlzKTsKICAgICBy
ZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDYWxsKHRoaXMpOwogfQorCit2b2lkIFBy
b2dyYW1Db2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NF
UlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKGdsb2JhbERh
dGEpOworfQorCit2b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK3sKKyAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKKyAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2Fz
dDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRD
b2RlKGdsb2JhbERhdGEpOworfQorCit2b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBK
SVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7
CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoZ2xvYmFsRGF0YSwgbV9pc0NvbnN0cnVjdG9yID8g
Q29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKK30KICNlbmRpZgogCiAjaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw5ICszNjAsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVX
aXRoQXJpdHlDaGVjazsKICAgICAgICAgfQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkg
eyByZXR1cm4gbV9qaXRDb2RlOyB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRK
SVRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsg
fQogICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENv
ZGUuaml0VHlwZSgpOyB9CiAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFi
bGVNZW1vcnkoKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9
CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwg
U2NvcGVDaGFpbk5vZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0ds
b2JhbERhdGEmKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgp
ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAg
ICAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTY0NywyMyArNjQ5LDM1IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBhcyB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBD
b2RlQmxvY2sgY29uc3RydWN0b3IuCiAgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBmdW5jdGlv
bnMgYXJlIHByb3ZpZGVkIHRvIHN1cHBvcnQgY2FsbGluZwotICAgICAgICAvLyBvcHRpbWl6ZUFm
dGVyV2FybVVwKCkgZnJvbSBKSVQtZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgIC8vIG9wdGltaXpl
WFlaKCkgbWV0aG9kcyBmcm9tIEpJVC1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgc3RhdGljIGlu
dDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpbnQz
Ml90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gLTEwMDA7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGludDMy
X3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gLTUwMDA7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlu
dDMyX3QqIGFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuICZtX2V4ZWN1dGVDb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2V4ZWN1dGVDb3VudGVyKTsgfQorCiAgICAgICAgIC8vIENh
bGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlLiBU
aGlzIGlzCiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24gdHJpZ2dl
cnMgYXJlIHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGlu
ZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gMDsKKyAgICAgICAgICAg
IG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9u
KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBwcmV2ZW50
IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0CkBAIC02ODcsNiAr
NzAxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9
IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICAgICAgfQogICAgICAg
ICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2Vy
IHRvIGZpcmUgb25seSBhZnRlcgorICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgorICAgICAg
ICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9leGVjdXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBjYXVzZSBh
biBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIHNvb24sIGJ1dAogICAgICAgICAvLyBub3Qg
bmVjZXNzYXJpbHkgdGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNlIGlmIG9wdGltaXphdGlv
bgogICAgICAgICAvLyBzdWNjZWVkcy4gU3VjY2Vzc2Z1bHkgb3B0aW1pemF0aW9uIG1lYW5zIHRo
YXQgYWxsIGNhbGxzIGFyZQpAQCAtNzEwLDkgKzczMSw0NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAtMTAwOwogICAgICAgICB9CiAgICAgICAgIAor
ICAgICAgICBpbnQzMl90IGV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRl
Q291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIHNwZWN1bGF0aXZlIEpJVCB0cmFj
a3MgaXRzIHN1Y2Nlc3MgcmF0ZSwgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgLy8gZGVjaWRlIHdo
ZW4gdG8gcmVvcHRpbWl6ZS4gSXQncyBpbnRlcmVzdGluZyB0byBub3RlIHRoYXQgdGhlc2UKKyAg
ICAgICAgLy8gY291bnRlcnMgbWF5IG92ZXJmbG93IHdpdGhvdXQgYW55IHByb3RlY3Rpb24uIFRo
ZSBzdWNjZXNzCisgICAgICAgIC8vIGNvdW50ZXIgd2lsbCBvdmVyZmxvdyBiZWZvcmUgdGhlIGZh
aWwgb25lIGRvZXMsIGJlY3Vhc2UgdGhlCisgICAgICAgIC8vIGZhaWwgb25lIGlzIHVzZWQgYXMg
YSB0cmlnZ2VyIHRvIHJlb3B0aW1pemUuIFNvIHRoZSB3b3JzdCBjYXNlCisgICAgICAgIC8vIGlz
IHRoYXQgdGhlIHN1Y2Nlc3MgY291bnRlciBvdmVyZmxvd3MgYW5kIHdlIHJlb3B0aW1pemUgd2l0
aG91dAorICAgICAgICAvLyBuZWVkaW5nIHRvLiBCdXQgdGhpcyBpcyBoYXJtbGVzcy4gSWYgYSBt
ZXRob2QgcmVhbGx5IGRpZAorICAgICAgICAvLyBleGVjdXRlIDJeMzIgdGltZXMgdGhlbiBjb21w
aWxpbmcgaXQgYWdhaW4gcHJvYmFibHkgd29uJ3QgaHVydAorICAgICAgICAvLyBhbnlvbmUuCisg
ICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKys7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVpbnQzMl90IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMy
X3Qgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyOyB9CisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXIpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKTsgfQorICAgICAgICAKICAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3
aGljaCB0aGUgSklUIHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAx
OyB9CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJl
dHVybigpIHsgcmV0dXJuIDE1OyB9CisKKyAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSBy
YXRpbyB3ZSB3YW50LgorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZGVzaXJlZFN1Y2Nlc3NGYWls
UmF0aW8oKSB7IHJldHVybiAxMDsgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG51bWJlciBv
ZiBmYWlsdXJlcyB0aGF0IHRyaWdnZXJzIHRoZSB1c2Ugb2YgdGhlIHJhdGlvLgorICAgICAgICBz
dGF0aWMgdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSB7IHJldHVybiAxMDsgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91bGRSZW9wdGltaXplTm93KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRTdWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2
ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpOworICAgICAgICB9
CiAgICAgICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgYm9vbCBzaG91
bGRPcHRpbWl6ZU5vdygpOwpAQCAtODEwLDYgKzg2OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBPd25QdHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7CiAKICAgICAgICAg
aW50MzJfdCBtX2V4ZWN1dGVDb3VudGVyOworICAgICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZl
U3VjY2Vzc0NvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVGYWlsQ291bnRl
cjsKICAgICAgICAgdWludDhfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKIAogICAgICAg
ICBzdHJ1Y3QgUmFyZURhdGEgewpAQCAtODY4LDYgKzkyOCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2lmIEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBD
b2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxl
V2l0aERGRygpOwogI2VuZGlmCkBAIC04OTQsNiArOTU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
aWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENv
ZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVX
aXRoREZHKCk7CiAjZW5kaWYKQEAgLTkyMSw2ICs5ODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29k
ZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdp
dGhERkcoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk1Mzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0MDgsOSBA
QCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgLy8gICAgICAg
ICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5
IGlzCiAgICAgLy8gICAgICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgogICAgIC8vCisgICAg
Ly8gICAgIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3Qg
cmVzdWx0IGluIHRoZSBjb2RlCisgICAgLy8gICAgICAgICBydW5uaW5nIGluIGEgaG90IGxvb3As
IHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8vCiAgICAg
Ly8gICAgIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRl
ciB0bwogICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRo
aXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgogICAgIC8vICAgICAoYSkgYW5kIChiKSwg
c2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9y
CkBAIC00MTUsMTEgKzQxOCw0MCBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVX
aXRoT1NSCiAgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxv
b3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKICAgICAvLyAgICAgYmVjb21lIG5vbi1u
ZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkK
ICAgICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9s
ZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJp
bmcgKGEpIGFuZCAoYikuIFRoaXMgaGV1cmlzdGljIG1heSBuZWVkIHRvIGJlCi0gICAgLy8gICAg
IHJldGhvdWdodCBpbiB0aGUgZnV0dXJlLCBwYXJ0aWN1bGFybHkgaWYgd2Ugc3VwcG9ydCByZW9w
dGltaXppbmcgY29kZQotICAgIC8vICAgICB3aXRoIG5ldyB2YWx1ZSBwcm9maWxlcyBnYXRoZXJl
ZCBmcm9tIGNvZGUgdGhhdCBkaWQgT1NSIGV4aXQuCisgICAgLy8gICAgIGdvb2Qgam9iIG9mIGVu
c3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCisg
ICAgLy8gICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUg
ZXhlY3V0ZSBjb3VudGVyLgorICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1i
ZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQorICAgIC8vICAgICBs
YXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyBy
YXRlKSwgYW5kIGlmCisgICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBu
dW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCisgICAgLy8gICAgIGNvdW50ZXIg
dG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vICAgICBjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCisgICAgCisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIGxvYWQzMihBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291
bnRlcigpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSwgR1BS
SW5mbzo6cmVnVDEpOworICAgIGFkZDMyKEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
YWRkMzIoSW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgc3RvcmUzMihHUFJJbmZvOjpy
ZWdUMiwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSkpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyKCkpKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVy
bmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgSnVtcCBmZXdGYWlscyA9IGJy
YW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEltbTMyKENvZGVCbG9jazo6bGFy
Z2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOworICAgIG11bDMyKEltbTMyKENvZGVCbG9jazo6ZGVz
aXJlZFN1Y2Nlc3NGYWlsUmF0aW8oKSksIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7
CiAgICAgCi0gICAgc3RvcmUzMihJbW0zMihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291
bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKSwgY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCktPmFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkpOworICAgIEp1bXAgbG93RmFpbFJhdGUg
PSBicmFuY2gzMihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSk7
CisgICAgCisgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgIHN0b3Jl
MzIoSW1tMzIoQ29kZUJsb2NrOjpjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9u
KCkpLCBBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNv
dW50ZXIoKSkpOworICAgIEp1bXAgZG9uZUFkanVzdGluZyA9IGp1bXAoKTsKKyAgICAKKyAgICBm
ZXdGYWlscy5saW5rKHRoaXMpOworICAgIGxvd0ZhaWxSYXRlLmxpbmsodGhpcyk7CisgICAgCisg
ICAgc3RvcmUzMihJbW0zMihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigpKSk7CisgICAgCisgICAgZG9uZUFkanVz
dGluZy5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIDEyKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhl
IGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCkBAIC00ODEsNiArNTEz
LDggQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKICAgICAvLyBib3RoIG5vcm1h
bCByZXR1cm4gY29kZSBhbmQgd2hlbiBqdW1waW5nIHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyKS4K
ICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVnVDIpOwogICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMiwgUmVnaXN0ZXJGaWxlOjpS
ZXR1cm5QQyk7CisgICAgCisgICAgYWRkUHRyKEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoY29k
ZUJsb2NrKCktPmFkZHJlc3NPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOwogfQogCiB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3Ig
ZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmlu
ZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMAorI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZF
UkJPU0UgMQogLy8gRW1pdCBsb2dnaW5nIGZvciBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIGF0
IGV2ZXJ5IG5vZGUsIG5vdCBqdXN0IG5vZGVzIHRoYXQKIC8vIGFjdHVhbGx5IGhhcyBzcGVjdWxh
dGlvbiBjaGVja3MuCiAjZGVmaW5lIEVOQUJMRV9ERkdfVkVSQk9TRV9WQUxVRV9SRUNPVkVSSUVT
IDAKQEAgLTUwLDcgKzUwLDcgQEAKIC8vIEVtaXQgYSBicmVha3BvaW50IGludG8gdGhlIHNwZWN1
bGF0aW9uIGZhaWx1cmUgY29kZS4KICNkZWZpbmUgRU5BQkxFX0RGR19KSVRfQlJFQUtfT05fU1BF
Q1VMQVRJT05fRkFJTFVSRSAwCiAvLyBMb2cgZXZlcnkgc3BlY3VsYXRpb24gZmFpbHVyZS4KLSNk
ZWZpbmUgRU5BQkxFX0RGR19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMAorI2RlZmluZSBF
TkFCTEVfREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSAxCiAvLyBEaXNhYmxlIHRoZSBE
RkcgSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRmb3JtLmghCiAjZGVmaW5lIERGR19E
RUJVR19MT0NBTF9ESVNCQUxFIDAKIC8vIEVuYWJsZSBPU1IgZW50cnkgZnJvbSBiYXNlbGluZSBK
SVQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZl
Um9vdHMuY3BwCShyZXZpc2lvbiA5NTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKKyNp
bmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogaW5s
aW5lIGJvb2wgaXNQb2ludGVyQWxpZ25lZCh2b2lkKiBwKQpAQCAtMzMsNiArMzUsMjcgQEAgaW5s
aW5lIGJvb2wgaXNQb2ludGVyQWxpZ25lZCh2b2lkKiBwKQogICAgIHJldHVybiAhKChpbnRwdHJf
dCkocCkgJiAoc2l6ZW9mKGNoYXIqKSAtIDEpKTsKIH0KIAorQ29uc2VydmF0aXZlUm9vdHM6OkNv
bnNlcnZhdGl2ZVJvb3RzKGNvbnN0IE1hcmtlZEJsb2NrU2V0KiBibG9ja3MsIEpldHRpc29uZWRD
b2RlQmxvY2tzKiBjb2RlQmxvY2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQorICAg
ICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQorICAgICwgbV9i
bG9ja3MoYmxvY2tzKQorICAgICwgbV9jb2RlQmxvY2tzKGNvZGVCbG9ja3MpCit7CisgICAgaWYg
KCFtX2NvZGVCbG9ja3MpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgSmV0dGlzb25lZENv
ZGVCbG9ja3Mgc3RydWN0dXJlLCBzbyB0aGF0IENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoKQorICAg
ICAgICAvLyBkb2Vzbid0IGhhdmUgdG8gZG8gYW55IG51bGwgY2hlY2tzIG9uIG1fY29kZUJsb2Nr
cy4KKyAgICAgICAgbV9teUNvZGVCbG9ja3MgPSBhZG9wdFB0cihuZXcgSmV0dGlzb25lZENvZGVC
bG9ja3MoKSk7CisgICAgICAgIG1fY29kZUJsb2NrcyA9IG1fbXlDb2RlQmxvY2tzLmdldCgpOwor
ICAgIH0KK30KKworQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCit7Cisg
ICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsK
K30KKwogdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z3JvdygpCiB7CiAgICAgc2l6ZV90IG5ld0Nh
cGFjaXR5ID0gbV9jYXBhY2l0eSA9PSBpbmxpbmVDYXBhY2l0eSA/IG5vbklubGluZUNhcGFjaXR5
IDogbV9jYXBhY2l0eSAqIDI7CkBAIC00Niw2ICs2OSw4IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9v
dHM6Omdyb3coKQogCiBpbmxpbmUgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIHAs
IFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIpCiB7CisgICAgbV9jb2RlQmxvY2tzLT5tYXJrKHApOwor
ICAgIAogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3Io
cCk7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oY2FuZGlk
YXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxvY2tzLT5zZXQoKS5j
b250YWlucyhjYW5kaWRhdGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywx
MSArMzMsMTIgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKZXR0
aXNvbmVkQ29kZUJsb2NrczsKIGNsYXNzIEhlYXA7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3Rz
IHsKIHB1YmxpYzoKLSAgICBDb25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCop
OworICAgIENvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0IE1hcmtlZEJsb2NrU2V0KiwgSmV0dGlzb25l
ZENvZGVCbG9ja3MqIGNvZGVCbG9ja3MgPSAwKTsKICAgICB+Q29uc2VydmF0aXZlUm9vdHMoKTsK
IAogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQpOwpAQCAtNTYsMjMgKzU3LDEx
IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBzaXplX3QgbV9jYXBhY2l0eTsK
ICAgICBjb25zdCBNYXJrZWRCbG9ja1NldCogbV9ibG9ja3M7CisgICAgSmV0dGlzb25lZENvZGVC
bG9ja3MqIG1fY29kZUJsb2NrczsKKyAgICBPd25QdHI8SmV0dGlzb25lZENvZGVCbG9ja3M+IG1f
bXlDb2RlQmxvY2tzOwogICAgIEpTQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBhY2l0eV07
CiB9OwogCi1pbmxpbmUgQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0
IE1hcmtlZEJsb2NrU2V0KiBibG9ja3MpCi0gICAgOiBtX3Jvb3RzKG1faW5saW5lUm9vdHMpCi0g
ICAgLCBtX3NpemUoMCkKLSAgICAsIG1fY2FwYWNpdHkoaW5saW5lQ2FwYWNpdHkpCi0gICAgLCBt
X2Jsb2NrcyhibG9ja3MpCi17Ci19Ci0KLWlubGluZSBDb25zZXJ2YXRpdmVSb290czo6fkNvbnNl
cnZhdGl2ZVJvb3RzKCkKLXsKLSAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQotICAg
ICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkg
KiBzaXplb2YoSlNDZWxsKikpOwotfQotCiBpbmxpbmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3Rz
OjpzaXplKCkKIHsKICAgICByZXR1cm4gbV9zaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDk1Mzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Niw2ICs0ODYsMTEgQEAgdm9pZCBIZWFw
OjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdAogICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJml0LT5maXJzdCk7CiB9CiAKK3ZvaWQgSGVhcDo6amV0dGlzb25Db2RlQmxvY2soUGFz
c093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBtX2NvZGVCbG9ja3MuYWRkQ29k
ZUJsb2NrKGNvZGVCbG9jayk7Cit9CisKIHZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0VmVjdG9yKFZl
Y3RvcjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9yKQogewogICAgIG1fdGVtcFNvcnRpbmdW
ZWN0b3JzLmFwcGVuZCh0ZW1wVmVjdG9yKTsKQEAgLTU0OCwxMCArNTUzLDEyIEBAIHZvaWQgSGVh
cDo6bWFya1Jvb3RzKCkKICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOwog
CiAgICAgdm9pZCogZHVtbXk7Ci0KKyAgICAKKyAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrcygp
OworICAgIAogICAgIC8vIFdlIGdhdGhlciBjb25zZXJ2YXRpdmUgcm9vdHMgYmVmb3JlIGNsZWFy
aW5nIG1hcmsgYml0cyBiZWNhdXNlIGNvbnNlcnZhdGl2ZQogICAgIC8vIGdhdGhlcmluZyB1c2Vz
IHRoZSBtYXJrIGJpdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgdmFsaWQu
Ci0gICAgQ29uc2VydmF0aXZlUm9vdHMgbWFjaGluZVRocmVhZFJvb3RzKCZtX2Jsb2Nrcyk7Cisg
ICAgQ29uc2VydmF0aXZlUm9vdHMgbWFjaGluZVRocmVhZFJvb3RzKCZtX2Jsb2NrcywgJm1fY29k
ZUJsb2Nrcyk7CiAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyht
YWNoaW5lVGhyZWFkUm9vdHMsICZkdW1teSk7CiAKICAgICBDb25zZXJ2YXRpdmVSb290cyByZWdp
c3RlckZpbGVSb290cygmbV9ibG9ja3MpOwpAQCAtNTYxLDcgKzU2OCw3IEBAIHZvaWQgSGVhcDo6
bWFya1Jvb3RzKCkKIAogICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gbV9zbG90VmlzaXRvcjsK
ICAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKHZpc2l0b3IpOwotCisgICAgCiAg
ICAgdmlzaXRvci5hcHBlbmQobWFjaGluZVRocmVhZFJvb3RzKTsKICAgICB2aXNpdG9yLmRyYWlu
KCk7CiAKQEAgLTU4NSw2ICs1OTIsOCBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAKICAgICBt
X2hhbmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CiAgICAgdmlzaXRvci5kcmFpbigp
OworICAgIAorICAgIG1fY29kZUJsb2Nrcy50cmFjZUNvZGVCbG9ja3ModmlzaXRvcik7CiAKICAg
ICAvLyBXZWFrIGhhbmRsZXMgbXVzdCBiZSBtYXJrZWQgbGFzdCwgYmVjYXVzZSB0aGVpciBvd25l
cnMgdXNlIHRoZSBzZXQgb2YKICAgICAvLyBvcGFxdWUgcm9vdHMgdG8gZGV0ZXJtaW5lIHJlYWNo
YWJpbGl0eS4KQEAgLTY4MCw2ICs2ODksNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dn
bGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAgICAgCiAgICAg
cmVzZXRBbGxvY2F0b3IoKTsKKyAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRDb2RlQmxv
Y2tzKCk7CiAKICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgewogICAgICAgICBzd2Vl
cCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gOTUzOTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkhhbmRsZUhlYXAuaCIKICNpbmNsdWRlICJIYW5kbGVT
dGFjay5oIgorI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiTWFy
a2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUgIk5ld1Nw
YWNlLmgiCkBAIC05OCw2ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
cHJvdGVjdChKU1ZhbHVlKTsKICAgICAgICAgYm9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7IC8vIFRy
dWUgd2hlbiB0aGUgcHJvdGVjdCBjb3VudCBkcm9wcyB0byAwLgorICAgICAgICAKKyAgICAgICAg
dm9pZCBqZXR0aXNvbkNvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKTsK
IAogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBzaXplX3QgY2FwYWNpdHkoKTsKQEAg
LTIwNyw2ICsyMTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU2xvdFZpc2l0b3IgbV9z
bG90VmlzaXRvcjsKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhlYXA7CiAgICAgICAgIEhh
bmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CisgICAgICAgIEpldHRpc29uZWRDb2RlQmxvY2tzIG1f
Y29kZUJsb2NrczsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworSmV0dGlzb25lZENvZGVCbG9ja3M6OkpldHRpc29uZWRDb2Rl
QmxvY2tzKCkgeyB9CisKK0pldHRpc29uZWRDb2RlQmxvY2tzOjp+SmV0dGlzb25lZENvZGVCbG9j
a3MoKQoreworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0g
bV9tYXAuYmVnaW4oKTsKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBl
bmQgPSBtX21hcC5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0
ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgZGVsZXRl
IGl0ZXItPmZpcnN0OworfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjphZGRDb2RlQmxv
Y2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQobV9tYXAu
ZmluZChjb2RlQmxvY2suZ2V0KCkpID09IG1fbWFwLmVuZCgpKTsKKyAgICAKKyAgICBtX21hcC5h
ZGQoY29kZUJsb2NrLmxlYWtQdHIoKSwgZmFsc2UpOworfQorCit2b2lkIEpldHRpc29uZWRDb2Rl
QmxvY2tzOjpjbGVhck1hcmtzKCkKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+Ojpp
dGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBi
b29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVC
bG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CisgICAgICAgIGl0ZXItPnNlY29uZCA9IGZhbHNlOworfQorCit2b2lkIEpldHRpc29uZWRDb2Rl
QmxvY2tzOjpkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKQoreworICAgIFZlY3RvcjxDb2RlQmxv
Y2sqPiB0b1JlbW92ZTsKKyAgICAKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVy
YXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29s
Pjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9j
ayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
KyAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
aXRlci0+Zmlyc3QpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbV9tYXAucmVtb3ZlKHRvUmVtb3ZlW2ld
KTsKKyAgICAgICAgZGVsZXRlIHRvUmVtb3ZlW2ldOworICAgIH0KK30KKwordm9pZCBKZXR0aXNv
bmVkQ29kZUJsb2Nrczo6dHJhY2VDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikK
K3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFw
LmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0g
bV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRv
ciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPmZpcnN0
LT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2Rl
QmxvY2tzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0
aXNvbmVkQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBKZXR0aXNvbmVkQ29kZUJs
b2Nrc19oCisjZGVmaW5lIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKworI2luY2x1ZGUgPHd0Zi9G
YXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsgLy8gT25seSBtYWxsb2MnZCBpbiBDb25zZXJ2YXRpdmVSb290
cworcHVibGljOgorICAgIEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgfkpldHRp
c29uZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgdm9pZCBhZGRDb2RlQmxvY2soUGFzc093blB0
cjxDb2RlQmxvY2s+KTsKKyAgICAKKyAgICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICAKKyAgICB2
b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgSGFzaE1h
cDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoc3RhdGljX2Nh
c3Q8Q29kZUJsb2NrKj4oY2FuZGlkYXRlQ29kZUJsb2NrKSk7CisgICAgICAgIGlmIChpdGVyID09
IG1fbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpdGVyLT5zZWNvbmQg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29kZUJsb2Nrcygp
OworICAgIAorICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7CisKK3ByaXZh
dGU6CisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgdG8gdXNlIGFuIE93blB0cjxDb2RlQmxvY2s+
IGhlcmUgYnV0IHRoYXQgd291bGQKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3b3JrLgor
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD4gbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA5NTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUo
SklUKQogCiAvLyBWZXJib3NlIGxvZ2dpbmcgZm9yIE9TUi1yZWxhdGVkIGNvZGUuCi0jZGVmaW5l
IEVOQUJMRV9KSVRfVkVSQk9TRV9PU1IgMAorI2RlZmluZSBFTkFCTEVfSklUX1ZFUkJPU0VfT1NS
IDEKIAogLy8gV2UndmUgcnVuIGludG8gc29tZSBwcm9ibGVtcyB3aGVyZSBjaGFuZ2luZyB0aGUg
c2l6ZSBvZiB0aGUgY2xhc3MgSklUIGxlYWRzIHRvCiAvLyBwZXJmb3JtYW5jZSBmbHVjdHVhdGlv
bnMuICBUcnkgZm9yY2luZyBhbGlnbm1lbnQgaW4gYW4gYXR0ZW1wdCB0byBzdGFiYWxpemUgdGhp
cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5
NTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTE0LDcgKzE5MTQsMjMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3B0aW1pemVfZnJvbQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gc3RhY2tGcmFtZS5hcmdzWzBd
LmludDMyKCk7CiAKLSAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQo
KSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJFbnRlcmVkIG9w
dGltaXplX2Zyb21fbG9vcCB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJWRcbiIsIGNvZGVCbG9jay0+
ZXhlY3V0ZUNvdW50ZXIoKSk7CisjZW5kaWYKKworICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGlt
aXplZFJlcGxhY2VtZW50KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAg
ICBwcmludGYoIkNvbnNpZGVyaW5nIGxvb3AgT1NSIGludG8gJXAoJXApIHdpdGggc3VjY2Vzcy9m
YWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CisjZW5kaWYKKyAg
ICAgICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkT3B0aW1pemVOb3coKSkg
eworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIlRyaWdn
ZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiBsb29wKS5cbiIsIGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgY29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpLT5qZXR0aXNvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghY29kZUJsb2NrLT5z
aG91bGRPcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAg
ICAgICAgIHByaW50ZigiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZvciAlcCAoaW4gbG9vcCkgYmVj
YXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxuIiwgY29kZUJsb2NrKTsKQEAgLTE5NjAs
NiArMTk3NiwyNCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAg
ICAgcHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gbG9vcCBzdWNjZWVkZWQsIE9TUiBmYWlsZWQu
XG4iLCBjb2RlQmxvY2spOwogI2VuZGlmCiAKKyAgICAvLyBDb3VudCB0aGUgT1NSIGZhaWx1cmUg
YXMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlLiBJZiB0aGlzIGhhcHBlbnMgYSBsb3QsIHRoZW4KKyAg
ICAvLyByZW9wdGltaXplLgorICAgIGNvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvbkZhaWx1cmUo
KTsKKyAgICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiRW5jb3Vu
dGVyZWQgbG9vcCBPU1IgZmFpbHVyZSBpbnRvICVwKCVwKSB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8l
dS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBs
YWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisKKyAgICBpZiAo
Y29kZUJsb2NrLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gQ29kZUJsb2NrOjpsYXJnZUZh
aWxDb3VudFRocmVzaG9sZCgpCisgICAgICAgICYmIGNvZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6
ZU5vdygpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJU
cmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBPU1IgZmFp
bCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CisjZW5kaWYKKyAg
ICAgICAgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5qZXR0aXNvbihjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSk7CisgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gT1NSIGZhaWxlZCB0aGlzIHRpbWUsIGJ1dCBp
dCBtaWdodCBzdWNjZWVkIG5leHQgdGltZSEgTGV0IHRoZSBjb2RlIHJ1biBhIGJpdAogICAgIC8v
IGxvbmdlciBhbmQgdGhlbiB0cnkgYWdhaW4uCiAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVy
V2FybVVwKCk7CkBAIC0xOTcyLDggKzIwMDYsMjQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemVfZnJvbQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwogICAgIAotICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkp
CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1p
emVfZnJvbV9yZXQgd2l0aCBleGVjdXRlQ291bnRlciA9ICVkXG4iLCBjb2RlQmxvY2stPmV4ZWN1
dGVDb3VudGVyKCkpOworI2VuZGlmCisKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJp
bnRmKCJSZXR1cm5pbmcgZnJvbSBvbGQgSklUIGNhbGwgZnJhbWUgd2l0aCBvcHRpbWl6ZWQgcmVw
bGFjZW1lbnQgJXAoJXApLCB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIsIGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVOb3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2Yg
JXAoJXApIChpbiByZXR1cm4pLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCkpOworI2VuZGlmCisgICAgICAgICAgICBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPmpldHRp
c29uKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3B0
aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICAKICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
MTggQEAgREZHOjpJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmlucwogfQogI2VuZGlm
CiAKKy8vIFV0aWxpdHkgbWV0aG9kIHVzZWQgZm9yIGpldHRpc29uaW5nIGNvZGUgYmxvY2tzLgor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgT3duUHRyPFQ+JiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJU
KGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBPd25QdHI8VD4gY29kZUJsb2Nr
VG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgY29kZUJsb2NrID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5yZWxlYXNlQWx0ZXJuYXRpdmUo
KSk7CisgICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAg
IGdsb2JhbERhdGEuaGVhcC5qZXR0aXNvbkNvZGVCbG9jayhzdGF0aWNfcG9pbnRlcl9jYXN0PENv
ZGVCbG9jaz4oY29kZUJsb2NrVG9KZXR0aXNvbi5yZWxlYXNlKCkpKTsKK30KKwogY29uc3QgQ2xh
c3NJbmZvIFNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIlNjcmlwdEV4ZWN1dGFibGUiLCAm
RXhlY3V0YWJsZUJhc2U6OnNfaW5mbywgMCwgMCB9OwogCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4
ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2YWxFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6
OnNfaW5mbywgMCwgMCB9OwpAQCAtMjExLDYgKzIyMywxMyBAQCBKU09iamVjdCogRXZhbEV4ZWN1
dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgRXZhbEV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7
CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJsb2NrKTsKKyAg
ICBtX2ppdENvZGVGb3JDYWxsID0gbV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCk7CisgICAg
QVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworfQorCiB2b2lkIEV2YWxF
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7CkBAIC0zMzAsNiArMzQ5LDEz
IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICByZXR1cm4g
MDsKIH0KIAordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxE
YXRhLCBtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIG1faml0Q29kZUZvckNhbGwgPSBtX3Byb2dy
YW1Db2RlQmxvY2stPmdldEpJVENvZGUoKTsKKyAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayk7Cit9CisKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnVubGlua0NhbGxz
KCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtNTMzLDYgKzU1OSwyMCBAQCBKU09iamVjdCogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX2Nv
ZGVCbG9ja0ZvckNhbGwpOworICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNh
bGwtPmdldEpJVENvZGUoKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBt
X2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpOworfQorCit2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxE
YXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0
ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVENvZGUoKTsKKyAgICBtX2ppdENvZGVG
b3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRK
SVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKK30KKwogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk1Mzk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsK
IAogICAgICAgICBFdmFsQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAgICAgICAgIHsK
QEAgLTM5Miw2ICszOTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7
CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERh
dGEmKTsKIAogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAg
ICAgICAgIHsKQEAgLTQ3NSw2ICs0NzksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMgPSAwKTsKKyAgICAgICAg
CisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEm
KTsKIAogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgICAgIHsK
QEAgLTQ5OCw2ICs1MDQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKik7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29k
ZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICBib29sIGlzR2VuZXJhdGVk
Rm9yQ29uc3RydWN0KCkgY29uc3QKICAgICAgICAgewpAQCAtNTM4LDYgKzU0NiwxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3Ry
dWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAg
dm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKSAKKyAgICAgICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENv
ZGVGb3JDYWxsKGdsb2JhbERhdGEpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICAgICAgamV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KGdsb2JhbERhdGEpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yKENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107823</attachid>
            <date>2011-09-19 02:48:50 -0700</date>
            <delta_ts>2011-09-19 03:35:15 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>carefularith_patch_1.diff</filename>
            <type>text/plain</type>
            <size>29293</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU0MDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAK
KzIwMTEtMDktMTkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc3BlY3VsYXRpb24gZmFpbHVyZXMgc2hvdWxkIGFjdCBhcyBhZGRpdGlvbmFsIHZhbHVlIHBy
b2ZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODMzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBhZGRzIHNsb3ctY2FzZSBjb3VudGVycyB0byB0aGUgb2xkIEpJVC4gSXQgYWxz
byBlbnN1cmVzIHRoYXQKKyAgICAgICAgbmVnYXRpdmUgemVybyBpbiBtdWx0aXBseSBpcyBoYW5k
bGVkIGNhcmVmdWxseS4gVGhlIG9sZCBKSVQKKyAgICAgICAgcHJldmlvdXNseSB0b29rIHNsb3cg
cGF0aCBpZiB0aGUgcmVzdWx0IG9mIGEgbXVsdGlwbHkgd2FzIHplcm8sCisgICAgICAgIHdoaWNo
LCB3aXRob3V0IGFueSBjaGFuZ2VzLCB3b3VsZCBjYXVzZSB0aGUgREZHIHRvIHRoaW5rIHRoYXQK
KyAgICAgICAgZXZlcnkgc3VjaCBtdWx0aXBseSBwcm9kdWNlZCBhIGRvdWJsZSByZXN1bHQuCisg
ICAgICAgIAorICAgICAgICBSaWdodCBub3cgdGhpcyBpcyBuZXV0cmFsIG9uIFN1blNwaWRlciwg
YnV0IHByb2R1Y2VzIGEgMSUKKyAgICAgICAgc2xvdy1kb3duIG9uIFY4IGFuZCBLcmFrZW4uIFdp
bGwgaW52ZXN0aWdhdGUgZnVydGhlci4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRSYXJlQ2FzZVByb2ZpbGVzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcyk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6Cisg
ICAgICAgIChKU0M6OlJhcmVDYXNlUHJvZmlsZTo6UmFyZUNhc2VQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6Z2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlU2FmZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHUFJU
ZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeSk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OmNsb2JiZXJzV29ybGQpOgorICAgICAgICAoSlNDOjpERkc6OlBy
b3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ip
OgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua0R1bW15U2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Bvc3RfZGVjKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3ByZV9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9w
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfYWRkKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5oOgorICAg
ICAgICAoSlNDOjpKSVQ6OmFkZFNsb3dDYXNlKToKKwogMjAxMS0wOS0xOSAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gRml4IGRpc3Rj
aGVjayBidWlsZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDk1NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5ODQsNiArMTk4NCwxNiBAQCBi
b29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogfQogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCit2b2lkIENvZGVCbG9jazo6cmVzZXRSYXJlQ2FzZVByb2ZpbGVz
KCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZTbG93Q2FzZVByb2Zp
bGVzKCk7ICsraSkKKyAgICAgICAgc2xvd0Nhc2VQcm9maWxlKGkpLT5tX2NvdW50ZXIgPSAwOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVzKCk7ICsraSkKKyAgICAgICAgc3BlY2lhbEZhc3RDYXNlUHJvZmlsZShpKS0+bV9jb3VudGVy
ID0gMDsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKIHZv
aWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiB7CkBAIC0yMDAyLDYgKzIwMTIsMTEg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKICAgICAgICAgcHJvZmlsZS0+
ZHVtcChzdGRlcnIpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAgICAgfQorICAg
IGZwcmludGYoc3RkZXJyLCAiU2xvd0Nhc2VQcm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlNsb3dDYXNlUHJvZmlsZXMoKTsgKytp
KSB7CisgICAgICAgIFNsb3dDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShp
KTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+
bV9ieXRlY29kZU9mZnNldCwgcHJvZmlsZS0+bV9jb3VudGVyKTsKKyAgICB9CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw2ICs0ODgsNDUgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIGFkZFNsb3dDYXNlUHJv
ZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc2xvd0Nh
c2VQcm9maWxlcy5hcHBlbmQoUmFyZUNhc2VQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAg
ICAgICAgICByZXR1cm4gJm1fc2xvd0Nhc2VQcm9maWxlcy5sYXN0KCk7CisgICAgICAgIH0KKyAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTbG93Q2FzZVByb2ZpbGVzKCkgeyByZXR1cm4gbV9zbG93
Q2FzZVByb2ZpbGVzLnNpemUoKTsgfQorICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHNsb3dDYXNl
UHJvZmlsZShpbnQgaW5kZXgpIHsgcmV0dXJuICZtX3Nsb3dDYXNlUHJvZmlsZXNbaW5kZXhdOyB9
CisgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogc2xvd0Nhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gV1RG
OjpnZW5lcmljQmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50LCBnZXRSYXJlQ2FzZVBy
b2ZpbGVCeXRlY29kZU9mZnNldD4obV9zbG93Q2FzZVByb2ZpbGVzLCBtX3Nsb3dDYXNlUHJvZmls
ZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyB1aW50MzJfdCBzbG93Q2FzZVRocmVzaG9sZCgpIHsgcmV0dXJuIDEwMDsgfQorICAg
ICAgICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHNsb3dDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyID49IHNsb3dDYXNlVGhyZXNob2xkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogYWRkU3BlY2lhbEZhc3RD
YXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
c3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVDYXNlUHJvZmlsZShieXRlY29kZU9m
ZnNldCkpOworICAgICAgICAgICAgcmV0dXJuICZtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLmxh
c3QoKTsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlNwZWNpYWxGYXN0Q2Fz
ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcy5zaXplKCk7IH0K
KyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGludCBpbmRl
eCkgeyByZXR1cm4gJm1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXNbaW5kZXhdOyB9CisgICAgICAg
IFJhcmVDYXNlUHJvZmlsZSogc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KGludCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6
Z2VuZXJpY0JpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludCwgZ2V0UmFyZUNhc2VQcm9m
aWxlQnl0ZWNvZGVPZmZzZXQ+KG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZh
c3RDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNlKGludCBieXRlY29k
ZU9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9
IHNsb3dDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3Vu
dGVyOworICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFs
RmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50
ZXI7CisgICAgICAgICAgICByZXR1cm4gKHNsb3dDYXNlQ291bnQgLSBzcGVjaWFsRmFzdENhc2VD
b3VudCkgPj0gc2xvd0Nhc2VUaHJlc2hvbGQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCByZXNldFJhcmVDYXNlUHJvZmlsZXMoKTsKICNlbmRpZgogCiAgICAgICAgIHVuc2ln
bmVkIGdsb2JhbFJlc29sdmVJbmZvQ291bnQoKSBjb25zdApAQCAtNzkxLDYgKzgzMCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CisgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSYXJlQ2FzZVByb2ZpbGUsIDg+IG1fc2xvd0Nhc2VQcm9maWxl
czsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJhcmVDYXNlUHJvZmlsZSwgOD4gbV9zcGVjaWFs
RmFzdENhc2VQcm9maWxlczsKICNlbmRpZgogCiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9q
dW1wVGFyZ2V0czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgJKHJldmlzaW9uIDk1NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksNiArMzU5LDI0IEBA
IGlubGluZSBpbnQgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQKIHsKICAgICByZXR1cm4g
dmFsdWVQcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0OwogfQorCisvLyBUaGlzIGlzIGEgbWluaSB2
YWx1ZSBwcm9maWxlIHRvIGNhdGNoIHBhdGhvbG9naWVzLiBJdCBpcyBhIGNvdW50ZXIgdGhhdCBn
ZXRzCisvLyBpbmNyZW1lbnRlZCB3aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCBvbiBhbnkgaW5z
dHJ1Y3Rpb24uCitzdHJ1Y3QgUmFyZUNhc2VQcm9maWxlIHsKKyAgICBSYXJlQ2FzZVByb2ZpbGUo
aW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpCisgICAgICAgICwgbV9jb3VudGVyKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBp
bnQgbV9ieXRlY29kZU9mZnNldDsKKyAgICB1aW50MzJfdCBtX2NvdW50ZXI7Cit9OworCitpbmxp
bmUgaW50IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KFJhcmVDYXNlUHJvZmlsZSog
cmFyZUNhc2VQcm9maWxlKQoreworICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGUtPm1fYnl0ZWNv
ZGVPZmZzZXQ7Cit9CiAjZW5kaWYKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk1NDAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Myw2ICsxOTMsOSBAQCBwcml2YXRlOgogICAgICAgICBpZiAobm9kZS5vcCA9PSBVSW50
MzJUb051bWJlcikKICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwogCisgICAgICAg
IGlmIChub2RlLm9wID09IFVJbnQzMlRvTnVtYmVyU2FmZSkKKyAgICAgICAgICAgIHJldHVybiBu
b2RlLmNoaWxkMSgpOworCiAgICAgICAgIC8vIENoZWNrIGZvciBudW1lcmljIGNvbnN0YW50cyBi
b3hlZCBhcyBKU1ZhbHVlcy4KICAgICAgICAgaWYgKG5vZGUub3AgPT0gSlNDb25zdGFudCkgewog
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVPZkpTQ29uc3RhbnQoaW5kZXgpOwpAQCAtNTE4
LDYgKzUyMSwzMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KG5v
ZGVJbmRleCwgbV9jdXJyZW50SW5kZXgpOwogICAgIH0KKyAgICAKKyAgICBOb2RlVHlwZSBtYWtl
U2FmZShOb2RlVHlwZSBvcCkKKyAgICB7CisgICAgICAgIGlmICghbV9wcm9maWxlZEJsb2NrLT5s
aWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpCisgICAgICAgICAgICByZXR1cm4g
b3A7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJp
bnRmKCJNYWtpbmcgJXMgQCVsdSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50
ZXIgaXMgYXQgJXVcbiIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2dyYXBoLnNpemUoKSwgbV9jdXJy
ZW50SW5kZXgsIG1fcHJvZmlsZWRCbG9jay0+c2xvd0Nhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIpOworI2VuZGlmCisgICAgICAgIAorICAgICAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAg
ICByZXR1cm4gVUludDMyVG9OdW1iZXJTYWZlOworICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAg
ICAgICAgICAgcmV0dXJuIEFyaXRoQWRkU2FmZTsKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAg
ICAgICAgICAgIHJldHVybiBBcml0aFN1YlNhZmU7CisgICAgICAgIGNhc2UgQXJpdGhNdWw6Cisg
ICAgICAgICAgICByZXR1cm4gQXJpdGhNdWxTYWZlOworICAgICAgICBjYXNlIFZhbHVlQWRkOgor
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlQWRkU2FmZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFBoYW50b207
IC8vIEhhdmUgdG8gcmV0dXJuIHNvbWV0aGluZy4KKyAgICAgICAgfQorICAgIH0KIAogICAgIEpT
R2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBA
IC03ODcsMTEgKzgxNiwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAweDFm
KQogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKEJpdFVSU2hpZnQsIG9w
MSwgb3AyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIG9wMSk7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGFkZFRvR3JhcGgobWFrZVNhZmUoVUludDMyVG9OdW1iZXIpLCBvcDEpOwogICAg
ICAgICAgICAgfSAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IG9wdGltaXplIGF0
IHRoaXMgc3RhZ2U7IHNoaWZ0ICYgcG90ZW50aWFsbHkgcmVib3ggYXMgYSBkb3VibGUuCiAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChCaXRVUlNoaWZ0LCBvcDEsIG9wMik7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChVSW50MzJUb051bWJlciwgcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKG1ha2VTYWZlKFVJbnQzMlRv
TnVtYmVyKSwgcmVzdWx0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHQsIFByZWRpY3RJbnQzMik7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF91cnNoaWZ0KTsKQEAgLTgwMyw3ICs4MzIsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBz
cmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9k
ZUluZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVByZWRp
Y3RJbnQzMihvcCk7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRoQWRk
LCBvcCwgb25lKCkpKTsKKyAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3JhcGgobWFrZVNh
ZmUoQXJpdGhBZGQpLCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3By
ZV9pbmMpOwogICAgICAgICB9CiAKQEAgLTgxMyw3ICs4NDIsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRU
b051bWJlcihzcmNEc3QpOwogICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wKTsKICAg
ICAgICAgICAgIHNldChyZXN1bHQsIG9wKTsKLSAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRv
R3JhcGgoQXJpdGhBZGQsIG9wLCBvbmUoKSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRk
VG9HcmFwaChtYWtlU2FmZShBcml0aEFkZCksIG9wLCBvbmUoKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcG9zdF9pbmMpOwogICAgICAgICB9CiAKQEAgLTgyMSw3ICs4NTAsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNp
Z25lZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAg
ICAgTm9kZUluZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWts
eVByZWRpY3RJbnQzMihvcCk7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFy
aXRoU3ViLCBvcCwgb25lKCkpKTsKKyAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3JhcGgo
bWFrZVNhZmUoQXJpdGhTdWIpLCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX3ByZV9kZWMpOwogICAgICAgICB9CiAKQEAgLTgzMSw3ICs4NjAsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggb3Ag
PSBnZXRUb051bWJlcihzcmNEc3QpOwogICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9w
KTsKICAgICAgICAgICAgIHNldChyZXN1bHQsIG9wKTsKLSAgICAgICAgICAgIHNldChzcmNEc3Qs
IGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBvbmUoKSkpOworICAgICAgICAgICAgc2V0KHNyY0Rz
dCwgYWRkVG9HcmFwaChtYWtlU2FmZShBcml0aFN1YiksIG9wLCBvbmUoKSkpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfcG9zdF9kZWMpOwogICAgICAgICB9CiAKQEAgLTg0Nyw5ICs4NzYs
OSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAobV9ncmFwaFtvcDFdLmhhc051bWJlclJlc3VsdCgpICYmIG1fZ3JhcGhbb3AyXS5oYXNO
dW1iZXJSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFkZCwgdG9OdW1iZXIob3AxKSwgdG9OdW1iZXIo
b3AyKSkpOworICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCBhZGRUb0dyYXBoKG1ha2VTYWZlKEFyaXRoQWRkKSwgdG9OdW1iZXIob3AxKSwgdG9OdW1i
ZXIob3AyKSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKFZhbHVlQWRkLCBvcDEsIG9wMikp
OworICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBh
ZGRUb0dyYXBoKG1ha2VTYWZlKFZhbHVlQWRkKSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2FkZCk7CiAgICAgICAgIH0KIApAQCAtODYwLDE0ICs4ODksMTQgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIHdl
YWtseVByZWRpY3RJbnQzMihvcDEpOwogICAgICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQz
MihvcDIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3AyKSk7CisgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChtYWtl
U2FmZShBcml0aFN1YiksIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9z
dWIpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9tdWw6IHsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDEgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoTXVsLCBvcDEsIG9wMikpOworICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgobWFrZVNh
ZmUoQXJpdGhNdWwpLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbXVs
KTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk1NDAxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWNvbnN0
IGRvdWJsZSB0d29Ub1RoZTMyID0gKGRvdWJsZSkweDEwMDAwMDAwMHVsbDsKK2NvbnN0IGRvdWJs
ZSBKSVRDb2RlR2VuZXJhdG9yOjp0d29Ub1RoZTMyID0gKGRvdWJsZSkweDEwMDAwMDAwMHVsbDsK
IAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjbGVhckdlbmVyYXRpb25JbmZvKCkKIHsKQEAgLTE5
ODksNiArMTk4OSwxNiBAQCBHUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJh
CiAgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7CiB9CiAKK0dQUlRlbXBvcmFyeTo6
R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kJiBvcDEpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVn
KQoreworICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dw
ciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBt
X2ppdC0+YWxsb2NhdGUoKTsKK30KKwogR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29k
ZUdlbmVyYXRvciogaml0LCBJbnRlZ2VyT3BlcmFuZCYgb3AxKQogICAgIDogbV9qaXQoaml0KQog
ICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NTQwMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OCw3ICs2OCw4IEBAIHByb3RlY3RlZDoKICAgICB9OwogICAgIAogICAgIGVudW0gVXNl
Q2hpbGRyZW5Nb2RlIHsgQ2FsbFVzZUNoaWxkcmVuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkgfTsKLQorICAgIAorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdHdvVG9UaGUzMjsKIAogcHVi
bGljOgogICAgIEdQUlJlZyBmaWxsSW50ZWdlcihOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVy
bkZvcm1hdCk7CkBAIC0xMTczLDYgKzExNzQsNyBAQCBwdWJsaWM6CiAgICAgR1BSVGVtcG9yYXJ5
KEpJVENvZGVHZW5lcmF0b3IqLCBHUFJSZWcgc3BlY2lmaWMpOwogICAgIEdQUlRlbXBvcmFyeShK
SVRDb2RlR2VuZXJhdG9yKiwgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1w
b3JhcnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kJiwgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQmKTsKKyAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvcios
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCYpOwogICAgIEdQUlRlbXBvcmFyeShKSVRDb2Rl
R2VuZXJhdG9yKiwgSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdl
bmVyYXRvciosIEludGVnZXJPcGVyYW5kJiwgSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1w
b3JhcnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZUNlbGxPcGVyYW5kJik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDExICsx
NDcsMTUgQEAgcHJpdmF0ZToKICAgICBtYWNybyhWYWx1ZVRvSW50MzIsIE5vZGVSZXN1bHRJbnQz
MiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICAvKiBVc2VkIHRvIGJveCB0aGUgcmVzdWx0IG9m
IFVSU2hpZnQgbm9kZXMgKHJlc3VsdCBoYXMgcmFuZ2UgMC4uMl4zMi0xKS4gKi9cCiAgICAgbWFj
cm8oVUludDMyVG9OdW1iZXIsIE5vZGVSZXN1bHROdW1iZXIpIFwKKyAgICBtYWNybyhVSW50MzJU
b051bWJlclNhZmUsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9y
IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQXJpdGhBZGQsIE5vZGVSZXN1
bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0aFN1YiwgTm9kZVJlc3VsdE51bWJlcikgXAogICAg
IG1hY3JvKEFyaXRoTXVsLCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhBZGRT
YWZlLCBOb2RlUmVzdWx0TnVtYmVyKSAvKiBTYWZlIHZhcmlhbnRzIGFyZSB0aG9zZSB0aGF0IGFy
ZSBrbm93biB0byB0YWtlIG9sZCBKSVQgc2xvdyBwYXRoICovXAorICAgIG1hY3JvKEFyaXRoU3Vi
U2FmZSwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoTXVsU2FmZSwgTm9kZVJl
c3VsdE51bWJlcikgXAogICAgIG1hY3JvKEFyaXRoRGl2LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAg
ICAgbWFjcm8oQXJpdGhNb2QsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0aEFi
cywgTm9kZVJlc3VsdE51bWJlcikgXApAQCAtMTY2LDYgKzE3MCw3IEBAIHByaXZhdGU6CiAgICAg
XAogICAgIC8qIEFkZCBvZiB2YWx1ZXMgbWF5IGVpdGhlciBiZSBhcml0aG1ldGljLCBvciByZXN1
bHQgaW4gc3RyaW5nIGNvbmNhdGVuYXRpb24uICovXAogICAgIG1hY3JvKFZhbHVlQWRkLCBOb2Rl
UmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1h
Y3JvKFZhbHVlQWRkU2FmZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVN
aWdodENsb2JiZXIpIFwKICAgICBcCiAgICAgLyogUHJvcGVydHkgYWNjZXNzLiAqL1wKICAgICAv
KiBQdXRCeVZhbEFsaWFzIGluZGljYXRlcyBhICdwdXQnIGFsaWFzZXMgYSBwcmlvciB3cml0ZSB0
byB0aGUgc2FtZSBwcm9wZXJ0eS4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk1NDAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1
MywzMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFyaXRoQWRkU2FmZToKKyAgICAgICAgY2FzZSBBcml0aFN1YlNh
ZmU6CisgICAgICAgIGNhc2UgQXJpdGhNdWxTYWZlOgorICAgICAgICBjYXNlIFVJbnQzMlRvTnVt
YmVyU2FmZTogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVk
aWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBWYWx1ZUFkZFNhZmU6IHsKKyAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07Cisg
ICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxk
MigpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihs
ZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpKQor
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGlj
dGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIShsZWZ0ICYgUHJlZGljdE51bWJlcikgfHwgIShyaWdodCAmIFByZWRpY3ROdW1i
ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGxlZnQgb3IgcmlnaHQgaXMgZGVmaW5pdGVs
eSBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFN0cmluZywgU3Ry
b25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0U3Ry
aW5nIHwgUHJlZGljdEludDMyIHwgUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAogICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAg
ICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKQEAgLTQ0MSw2ICs0NjUsMjUgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcml0aEFkZFNhZmU6CisgICAgICAgIGNhc2UgQXJpdGhTdWJTYWZlOgorICAgICAgICBjYXNl
IEFyaXRoTXVsU2FmZTogeworICAgICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZUFkZFNhZmU6IHsKKyAg
ICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEo
KV07CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2Rl
LmNoaWxkMigpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGlj
dGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpICYmIGlzTnVtYmVyUHJlZGlj
dGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAg
ICAgdG9Eb3VibGUobm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgdG9Eb3VibGUobm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC01OTYsNiArNjM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6Cisg
ICAgICAgIGNhc2UgVmFsdWVBZGRTYWZlOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAg
ICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CkBA
IC03NTAsNiArNzk0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAg
ICAgY2FzZSBBcml0aE1heDoKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAgIGNhc2Ug
QXJpdGhBZGRTYWZlOgorICAgICAgICBjYXNlIEFyaXRoU3ViU2FmZToKKyAgICAgICAgY2FzZSBB
cml0aE11bFNhZmU6CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTU0MDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODQwLDYgKzg0MCwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCwgb3AxLmZvcm1hdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyU2FmZTogeworICAgICAgICAvLyBXZSBrbm93IHRoYXQg
dGhpcyBzb21ldGltZXMgcHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVy
eQorICAgICAgICAvLyB0aW1lLiBUaGlzIGF0IGxlYXN0IGFsbG93cyBzdWJzZXF1ZW50IGNvZGUg
dG8gbm90IGhhdmUgd2VpcmQgY29uZGl0aW9uYWxzLgorICAgICAgICAKKyAgICAgICAgSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gb3AxLmdw
cigpOworICAgICAgICBGUFJSZWcgb3V0cHV0RlBSID0gcmVzdWx0LmZwcigpOworICAgICAgICAK
KyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIG91dHB1dEZQUik7
CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0R1BSLCBUcnVz
dGVkSW1tMzIoMCkpOworICAgICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29s
dXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIG91dHB1dEZQUik7CisgICAgICAgIHBvc2l0aXZlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChvdXRwdXRGUFIsIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBWYWx1ZVRv
SW50MzI6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwpAQCAtOTE2LDcgKzkzNiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQorICAgICAgICAK
KyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNhZmUgY2FzZXMuCisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIFZhbHVlQWRkU2FmZToKKyAgICBjYXNlIEFyaXRoQWRkU2FmZTogewogICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkp
KSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwpAQCAtOTMwLDcgKzk1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAgICAgICBBU1NFUlQob3AgPT0g
VmFsdWVBZGQgfHwgb3AgPT0gVmFsdWVBZGRTYWZlKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtOTcyLDcgKzk5NywxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLQorICAgICAgICAKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNhZmUgY2Fz
ZS4KKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWJTYWZlOiB7CiAgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpAQCAtMTAwMyw3ICsxMDMyLDExIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNhZmUg
Y2FzZS4KKyAgICB9CiAKKyAgICBjYXNlIEFyaXRoTXVsU2FmZTogewogICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwpAQCAtMTA4Nyw4ICsxMTIwLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQXJpdGhNaW46
CiAgICAgY2FzZSBBcml0aE1heDogewogICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkgewotICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBt
X2ppdC5icmFuY2gzMihvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiA6
IE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgb3AxLmdwcigpLCBvcDIuZ3ByKCkpOwpAQCAt
MTgzNiw3ICsxODY5LDcgQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZh
bAogICAgICAgICAKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAg
ICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgIGlmIChub2Rl
UHRyLT5vcCA9PSBVSW50MzJUb051bWJlciB8fCBub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJl
clNhZmUpIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGls
ZDEoKTsKICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwog
ICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxS
ZWdpc3RlcigpXTsKQEAgLTE4NjcsNiArMTkwMCw3IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRp
dmVKSVQ6OmNvbXB1dGVWYWwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5kZXgg
PSBpbmZvLm5vZGVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgICAgIGNhc2UgVUludDMy
VG9OdW1iZXJTYWZlOgogICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4ID0g
aW5mby5ub2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9u
IDk1NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MTMsNiArNDEzLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBtX2J5dGVjb2RlT2Zmc2V0OwogI2VuZGlm
CiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNC
ZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIAorI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzbG93Q2FzZVByb2ZpbGUgPSBtX2NvZGVC
bG9jay0+YWRkU2xvd0Nhc2VQcm9maWxlKG1fYnl0ZWNvZGVPZmZzZXQpOworI2VuZGlmCiAKICAg
ICAgICAgc3dpdGNoIChtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rp
b24tPnUub3Bjb2RlKSkgewogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfYWRkKQpAQCAt
NDg1LDYgKzQ4OSwxMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAg
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBm
aXJzdFRvICE9IGl0ZXItPnRvLCJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2Ug
Y29kZWdlbi4iKTsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvID09IChpdGVy
IC0gMSktPnRvLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OworICAgICAgICAKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgICAgIGFkZDMyKElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnNsb3dDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7Cisj
ZW5kaWYKIAogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsNiArMjk1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKICAgICAg
ICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wTGlzdCk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKIApAQCAtOTcyLDYgKzk3MywxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKICAgICAgICAgICAgICsr
aXRlcjsKICAgICAgICAgfQorICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKKyAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAg
fQogICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBpbnQgdlJlZyk7CiAKICAgICAgICAgSnVtcCBjaGVja1N0cnVjdHVy
ZShSZWdpc3RlcklEIHJlZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiA5NTQwMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyNyw3ICs2MjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wb3N0X2RlYyhJbnN0cnVj
dGlvbiogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBt
b3ZlKHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50
ZWdlcihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoWmVybywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBU
cnVzdGVkSW1tMzIoMSksIHJlZ1QxKSk7CiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVj
ayhyZWdUMSwgcmVnVDEpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdU
MSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwpAQCAtNjc2LDcgKzY3Niw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3ByZV9kZWMoSW5zdHJ1Y3Rpb24qIGMKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIo
WmVybywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1
YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CiAgICAgZW1pdEZhc3RBcml0
aEludFRvSW1tTm9DaGVjayhyZWdUMCwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjRHN0KTsKIH0KQEAgLTc4NCw4ICs3ODQsMjkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVCaW5h
cnlBcml0aE9wKE9wY29kZUlEIAogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVy
ZmxvdywgcmVnVDEsIHJlZ1QwKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJ
RCA9PSBvcF9tdWwpOworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICAgICAgLy8gV2Ug
d2FudCB0byBiZSBhYmxlIHRvIG1lYXN1cmUgaWYgdGhpcyBpcyB0YWtpbmcgdGhlIHNsb3cgY2Fz
ZSBqdXN0CisgICAgICAgIC8vIGJlY2F1c2Ugb2YgbmVnYXRpdmUgemVyby4gSWYgdGhpcyBwcm9k
dWNlcyBwb3NpdGl2ZSB6ZXJvLCB0aGVuIHdlCisgICAgICAgIC8vIGRvbid0IHdhbnQgdGhlIHNs
b3cgY2FzZSB0byBiZSB0YWtlbiBiZWNhdXNlIHRoYXQgd2lsbCB0aHJvdyBvZmYKKyAgICAgICAg
Ly8gc3BlY3VsYXRpdmUgY29tcGlsYXRpb24uCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoTXVsMzIoT3ZlcmZsb3csIHJlZ1QxLCByZWdUMikp
OworICAgICAgICBKdW1wTGlzdCBkb25lOworICAgICAgICBkb25lLmFwcGVuZChicmFuY2hUZXN0
MzIoTm9uWmVybywgcmVnVDIpKTsKKyAgICAgICAgSnVtcCBuZWdhdGl2ZVplcm8gPSBicmFuY2gz
MihMZXNzVGhhbiwgcmVnVDAsIEltbTMyKDApKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoYnJhbmNo
MzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMSwgSW1tMzIoMCkpKTsKKyAgICAgICAgbmVnYXRp
dmVaZXJvLmxpbmsodGhpcyk7CisgICAgICAgIC8vIFdlIG9ubHkgZ2V0IGhlcmUgaWYgd2UgaGF2
ZSBhIGdlbnVpbmUgbmVnYXRpdmUgemVyby4gUmVjb3JkIHRoaXMsCisgICAgICAgIC8vIHNvIHRo
YXQgdGhlIHNwZWN1bGF0aXZlIEpJVCBrbm93cyB0aGF0IHdlIGZhaWxlZCBzcGVjdWxhdGlvbgor
ICAgICAgICAvLyBiZWNhdXNlIG9mIGEgbmVnYXRpdmUgemVyby4KKyAgICAgICAgYWRkMzIoSW1t
MzIoMSksIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2stPmFkZFNwZWNpYWxGYXN0Q2FzZVBy
b2ZpbGUobV9ieXRlY29kZU9mZnNldCktPm1fY291bnRlcikpOworICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUocmVnVDIs
IHJlZ1QwKTsKKyNlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaE11bDMyKE92ZXJmbG93
LCByZWdUMSwgcmVnVDApKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QwKSk7CisjZW5kaWYKICAgICB9CiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVj
ayhyZWdUMCwgcmVnVDApOwogfQpAQCAtODg3LDYgKzkwOCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2FkZChJbnN0cnVjdGlvbiogY3VycmUKICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBPcGVyYW5k
VHlwZXM6OmZyb21JbnQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CiAKICAgICBp
ZiAoIXR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpIHx8ICF0eXBlcy5zZWNvbmQoKS5taWdo
dEJlTnVtYmVyKCkpIHsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2FkZCk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KG9wMSwgcmVnVDIpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIsIHJlZ1Qy
KTsKQEAgLTkxNyw4ICs5MzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChJbnN0cnVj
dGlvbiogYwogICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CiAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gT3BlcmFuZFR5cGVzOjpmcm9tSW50KGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwogCi0gICAgaWYgKCF0eXBlcy5maXJzdCgpLm1p
Z2h0QmVOdW1iZXIoKSB8fCAhdHlwZXMuc2Vjb25kKCkubWlnaHRCZU51bWJlcigpKQorICAgIGlm
ICghdHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkgfHwgIXR5cGVzLnNlY29uZCgpLm1pZ2h0
QmVOdW1iZXIoKSkgeworICAgICAgICBsaW5rRHVtbXlTbG93Q2FzZShpdGVyKTsKICAgICAgICAg
cmV0dXJuOworICAgIH0KIAogICAgIGJvb2wgb3AxSGFzSW1tZWRpYXRlSW50RmFzdENhc2UgPSBp
c09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpOwogICAgIGJvb2wgb3AySGFzSW1tZWRp
YXRlSW50RmFzdENhc2UgPSAhb3AxSGFzSW1tZWRpYXRlSW50RmFzdENhc2UgJiYgaXNPcGVyYW5k
Q29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA5NTQwMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTks
NiArMjk5LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAKICAg
ICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcFZlY3RvcltpXSwgbV9i
eXRlY29kZU9mZnNldCkpOwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZSgpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAgCisgICAgbV9z
bG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoSnVtcCgpLCBtX2J5dGVjb2RlT2Zmc2V0KSk7
Cit9CisKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVs
YXRpdmVPZmZzZXQpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVk
KS0xKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107828</attachid>
            <date>2011-09-19 03:35:15 -0700</date>
            <delta_ts>2011-09-19 13:26:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>carefularith_patch_2.diff</filename>
            <type>text/plain</type>
            <size>37455</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU0MDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAK
KzIwMTEtMDktMTkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc3BlY3VsYXRpb24gZmFpbHVyZXMgc2hvdWxkIGFjdCBhcyBhZGRpdGlvbmFsIHZhbHVlIHBy
b2ZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODMzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBhZGRzIHNsb3ctY2FzZSBjb3VudGVycyB0byB0aGUgb2xkIEpJVC4gSXQgYWxz
byBlbnN1cmVzIHRoYXQKKyAgICAgICAgbmVnYXRpdmUgemVybyBpbiBtdWx0aXBseSBpcyBoYW5k
bGVkIGNhcmVmdWxseS4gVGhlIG9sZCBKSVQKKyAgICAgICAgcHJldmlvdXNseSB0b29rIHNsb3cg
cGF0aCBpZiB0aGUgcmVzdWx0IG9mIGEgbXVsdGlwbHkgd2FzIHplcm8sCisgICAgICAgIHdoaWNo
LCB3aXRob3V0IGFueSBjaGFuZ2VzLCB3b3VsZCBjYXVzZSB0aGUgREZHIHRvIHRoaW5rIHRoYXQK
KyAgICAgICAgZXZlcnkgc3VjaCBtdWx0aXBseSBwcm9kdWNlZCBhIGRvdWJsZSByZXN1bHQuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIG9sZCBKSVQncyBo
YW5kbGluZyBvZiBkZWNyZW1lbnRzLiBJdAorICAgICAgICB3b3VsZCB0YWtlIHRoZSBzbG93IHBh
dGggaWYgdGhlIHJlc3VsdCB3YXMgemVybywgYnV0IG5vdCBpZiBpdAorICAgICAgICB1bmRlcmZs
b3dlZC4KKyAgICAgICAgCisgICAgICAgIEJ5IGl0c2VsZiwgdGhpcyB3b3VsZCBiZSBhIDElIHNs
b3ctZG93biBvbiBWOCBhbmQgS3Jha2VuLiBCdXQgdGhlbgorICAgICAgICBJIHdyb3RlIG9wdGlt
aXphdGlvbnMgaW4gdGhlIERGRyB0aGF0IHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbmV3CisgICAg
ICAgIGluZm9ybWF0aW9uLiBJdCdzIG5vIGxvbmdlciB0aGUgY2FzZSB0aGF0IGV2ZXJ5IG11bHRp
cGx5IG5lZWRzIHRvCisgICAgICAgIGRvIGEgY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm87IGl0IG9u
bHkgaGFwcGVucyBpZiB0aGUgbmVnYXRpdmUKKyAgICAgICAgemVybyBpcyBpZ25vcmVkLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyByZXN1bHRzIGluIGEgMTIlIHNwZWVkLXVwIG9uIHY4LWNyeXB0
bywgZm9yIGEgMS40JSBnZW9tZWFuCisgICAgICAgIHNwZWVkLXVwIGluIFY4LiBJdCdzIG1vc3Rs
eSBuZXV0cmFsIG9uIEtyYWtlbi4gSSBjYW4gc2VlIGFuCisgICAgICAgIDAuNSUgc2xvdy1kb3du
IGFuZCBpdCBhcHBlYXJzIHRvIGJlIHNpZ25pZmljYW50LgorCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldFJhcmVDYXNlUHJv
ZmlsZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6UmFyZUNhc2VQcm9maWxlOjpSYXJlQ2FzZVByb2ZpbGUp
OgorICAgICAgICAoSlNDOjpnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldCk6CisgICAg
ICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6dG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
Om1ha2VTYWZlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KToKKyAgICAgICAgKiBkZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3Bh
Z2F0ZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHVwTm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2xvYmJlcnNXb3JsZCk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVS
ZWNvdmVyeUZvcik6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAg
KEpTQzo6SklUOjpsaW5rRHVtbXlTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0
aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcG9zdF9kZWMpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHJlX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUJp
bmFyeUFyaXRoT3ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9hZGQpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRo
b2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6YWRkU2xvd0Nhc2UpOgorCiAyMDExLTA5LTE5ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBGaXggZGlzdGNoZWNrIGJ1aWxkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4NCw2ICsx
OTg0LDE2IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB9CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKK3ZvaWQgQ29kZUJsb2NrOjpyZXNldFJhcmVD
YXNlUHJvZmlsZXMoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlNs
b3dDYXNlUHJvZmlsZXMoKTsgKytpKQorICAgICAgICBzbG93Q2FzZVByb2ZpbGUoaSktPm1fY291
bnRlciA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mU3BlY2lhbEZh
c3RDYXNlUHJvZmlsZXMoKTsgKytpKQorICAgICAgICBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGkp
LT5tX2NvdW50ZXIgPSAwOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9Q
Uk9GSUxFKQogdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKIHsKQEAgLTIwMDIs
NiArMjAxMiwxMSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgICAg
ICBwcm9maWxlLT5kdW1wKHN0ZGVycik7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsK
ICAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJTbG93Q2FzZVByb2ZpbGUgZm9yICVwOlxuIiwg
dGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mU2xvd0Nhc2VQcm9m
aWxlcygpOyArK2kpIHsKKyAgICAgICAgU2xvd0Nhc2VQcm9maWxlKiBwcm9maWxlID0gc2xvd0Nh
c2VQcm9maWxlKGkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4i
LCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOworICAgIH0K
IH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiA5NTQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDYgKzQ4OCw0NSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogYWRk
U2xvd0Nhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9zbG93Q2FzZVByb2ZpbGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0ZWNvZGVPZmZz
ZXQpKTsKKyAgICAgICAgICAgIHJldHVybiAmbV9zbG93Q2FzZVByb2ZpbGVzLmxhc3QoKTsKKyAg
ICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlNsb3dDYXNlUHJvZmlsZXMoKSB7IHJl
dHVybiBtX3Nsb3dDYXNlUHJvZmlsZXMuc2l6ZSgpOyB9CisgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogc2xvd0Nhc2VQcm9maWxlKGludCBpbmRleCkgeyByZXR1cm4gJm1fc2xvd0Nhc2VQcm9maWxl
c1tpbmRleF07IH0KKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzbG93Q2FzZVByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQsIGdl
dFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3Nsb3dDYXNlUHJvZmlsZXMsIG1fc2xv
d0Nhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGljIHVpbnQzMl90IHNsb3dDYXNlVGhyZXNob2xkKCkgeyByZXR1cm4g
MTAwOyB9CisgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zm
c2V0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2xvd0Nhc2VQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXIgPj0gc2xvd0Nhc2VUaHJlc2hv
bGQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBhZGRT
cGVjaWFsRmFzdENhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcy5hcHBlbmQoUmFyZUNhc2VQcm9maWxl
KGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgICAgICAgICByZXR1cm4gJm1fc3BlY2lhbEZhc3RDYXNl
UHJvZmlsZXMubGFzdCgpOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3Bl
Y2lhbEZhc3RDYXNlUHJvZmlsZXMoKSB7IHJldHVybiBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVz
LnNpemUoKTsgfQorICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGUoaW50IGluZGV4KSB7IHJldHVybiAmbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlc1tpbmRleF07
IH0KKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpnZW5lcmljQmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50LCBnZXRS
YXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldD4obV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcywg
bV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2Uo
aW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBzbG93
Q2FzZUNvdW50ID0gc2xvd0Nhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpLT5tX2NvdW50ZXI7CisgICAgICAgICAgICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3Vu
dCA9IHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCktPm1fY291bnRlcjsKKyAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCAtIHNwZWNp
YWxGYXN0Q2FzZUNvdW50KSA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIHJlc2V0UmFyZUNhc2VQcm9maWxlcygpOwogI2VuZGlmCiAKICAg
ICAgICAgdW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluZm9Db3VudCgpIGNvbnN0CkBAIC03OTEsNiAr
ODMwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklM
RVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9m
aWxlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJhcmVDYXNlUHJvZmlsZSwgOD4gbV9zbG93
Q2FzZVByb2ZpbGVzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmFyZUNhc2VQcm9maWxlLCA4
PiBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzOwogI2VuZGlmCiAKICAgICAgICAgVmVjdG9yPHVu
c2lnbmVkPiBtX2p1bXBUYXJnZXRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw2
ICszNTksMjQgQEAgaW5saW5lIGludCBnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldAogewog
ICAgIHJldHVybiB2YWx1ZVByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQ7CiB9CisKKy8vIFRoaXMg
aXMgYSBtaW5pIHZhbHVlIHByb2ZpbGUgdG8gY2F0Y2ggcGF0aG9sb2dpZXMuIEl0IGlzIGEgY291
bnRlciB0aGF0IGdldHMKKy8vIGluY3JlbWVudGVkIHdoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRo
IG9uIGFueSBpbnN0cnVjdGlvbi4KK3N0cnVjdCBSYXJlQ2FzZVByb2ZpbGUgeworICAgIFJhcmVD
YXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRlY29kZU9mZnNl
dChieXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX2NvdW50ZXIoMCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGludCBtX2J5dGVjb2RlT2Zmc2V0OworICAgIHVpbnQzMl90IG1fY291bnRlcjsK
K307CisKK2lubGluZSBpbnQgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQoUmFyZUNh
c2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUpCit7CisgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmls
ZS0+bV9ieXRlY29kZU9mZnNldDsKK30KICNlbmRpZgogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTU0MDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChub2Rl
Lm9wID09IFVJbnQzMlRvTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7
CiAKKyAgICAgICAgaWYgKG5vZGUub3AgPT0gVUludDMyVG9OdW1iZXJTYWZlKQorICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CisKICAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMg
Y29uc3RhbnRzIGJveGVkIGFzIEpTVmFsdWVzLgogICAgICAgICBpZiAobm9kZS5vcCA9PSBKU0Nv
bnN0YW50KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFudChpbmRl
eCk7CkBAIC00ODMsNyArNDg2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGVQdHItPm9wKSB7CiAgICAgICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICAgICAgY2Fz
ZSBBcml0aFN1YjoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAgICAgICAgICBjYXNl
IEFyaXRoTXVsSWdub3JlWmVybzoKKyAgICAgICAgICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVn
WmVybzoKKyAgICAgICAgICAgIGNhc2UgQXJpdGhNdWxQb3NzaWJseU5lZ1plcm86CisgICAgICAg
ICAgICBjYXNlIEFyaXRoTXVsU2FmZToKICAgICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAg
ICAgICAgICAgICAgbV9yZXVzYWJsZU5vZGVTdGFjay5hcHBlbmQoJm1fZ3JhcGhbbm9kZVB0ci0+
Y2hpbGQxKCldKTsKICAgICAgICAgICAgICAgICBtX3JldXNhYmxlTm9kZVN0YWNrLmFwcGVuZCgm
bV9ncmFwaFtub2RlUHRyLT5jaGlsZDIoKV0pOwpAQCAtNTE4LDYgKzUyNCw1MiBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KG5vZGVJbmRleCwgbV9jdXJyZW50SW5k
ZXgpOwogICAgIH0KKyAgICAKKyAgICBOb2RlVHlwZSBtYWtlU2FmZShOb2RlVHlwZSBvcCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZSht
X2N1cnJlbnRJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gb3A7CisgICAgICAgIAorI2lmIEVO
QUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJNYWtpbmcgJXMgQCVsdSBz
YWZlIGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXVcbiIsIEdyYXBo
OjpvcE5hbWUob3ApLCBtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1fcHJvZmlsZWRC
bG9jay0+c2xvd0Nhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5t
X2NvdW50ZXIpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAg
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gVUludDMyVG9OdW1i
ZXJTYWZlOworICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICAgICAgcmV0dXJuIEFyaXRo
QWRkU2FmZTsKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgICAgIHJldHVybiBBcml0
aFN1YlNhZmU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIGluaXRpYWxpemUgQXJp
dGhNdWwgdG8gQXJpdGhNdWxJZ25vcmVaZXJvIGFuZCBwdXNoIGl0IHRvd2FyZHMKKyAgICAgICAg
ICAgIC8vIHNhZmVyIHZhcmlhbnRzIGFzIHdlIGxlYXJuIG1vcmUuIEZpcnN0IHdlIHR1cm4gaXQg
aW50byBQb3NzaWJseU5lZ1plcm8KKyAgICAgICAgICAgIC8vIGlmIHdlIHNlZSB0aGF0IGl0IGhh
ZCBiZWVuIC0wIGR1cmluZyBvbGQgSklUIGV4ZWN1dGlvbi4KKyAgICAgICAgY2FzZSBBcml0aE11
bElnbm9yZVplcm86CisgICAgICAgICAgICByZXR1cm4gQXJpdGhNdWxQb3NzaWJseU5lZ1plcm87
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgICAgIHJldHVy
biBWYWx1ZUFkZFNhZmU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBQaGFudG9tOyAvLyBIYXZlIHRvIHJldHVy
biBzb21ldGhpbmcuCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldFRy
dWVSZXN1bHQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9n
cmFwaFtub2RlSW5kZXhdLm9wKSB7CisgICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgor
ICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTcGVjTm90TmVnWmVy
bzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWda
ZXJvOgorICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTYWZlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgIH0KIAogICAgIEpTR2xv
YmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC03
ODcsMTEgKzgzOSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAweDFmKQog
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKEJpdFVSU2hpZnQsIG9wMSwg
b3AyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGFkZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIG9wMSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGFkZFRvR3JhcGgobWFrZVNhZmUoVUludDMyVG9OdW1iZXIpLCBvcDEpOwogICAgICAg
ICAgICAgfSAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IG9wdGltaXplIGF0IHRo
aXMgc3RhZ2U7IHNoaWZ0ICYgcG90ZW50aWFsbHkgcmVib3ggYXMgYSBkb3VibGUuCiAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChCaXRVUlNoaWZ0LCBvcDEsIG9wMik7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChVSW50MzJUb051bWJlciwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKG1ha2VTYWZlKFVJbnQzMlRvTnVt
YmVyKSwgcmVzdWx0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHQsIFByZWRpY3RJbnQzMik7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF91cnNoaWZ0KTsKQEAgLTgwMyw3ICs4NTUsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNE
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJ
bnQzMihvcCk7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRoQWRkLCBv
cCwgb25lKCkpKTsKKyAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3JhcGgobWFrZVNhZmUo
QXJpdGhBZGQpLCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3ByZV9p
bmMpOwogICAgICAgICB9CiAKQEAgLTgxMyw3ICs4NjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRUb051
bWJlcihzcmNEc3QpOwogICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wKTsKICAgICAg
ICAgICAgIHNldChyZXN1bHQsIG9wKTsKLSAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3Jh
cGgoQXJpdGhBZGQsIG9wLCBvbmUoKSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRkVG9H
cmFwaChtYWtlU2FmZShBcml0aEFkZCksIG9wLCBvbmUoKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcG9zdF9pbmMpOwogICAgICAgICB9CiAKQEAgLTgyMSw3ICs4NzMsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25l
ZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAg
Tm9kZUluZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVBy
ZWRpY3RJbnQzMihvcCk7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRo
U3ViLCBvcCwgb25lKCkpKTsKKyAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3JhcGgobWFr
ZVNhZmUoQXJpdGhTdWIpLCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3ByZV9kZWMpOwogICAgICAgICB9CiAKQEAgLTgzMSw3ICs4ODMsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBn
ZXRUb051bWJlcihzcmNEc3QpOwogICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wKTsK
ICAgICAgICAgICAgIHNldChyZXN1bHQsIG9wKTsKLSAgICAgICAgICAgIHNldChzcmNEc3QsIGFk
ZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBvbmUoKSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwg
YWRkVG9HcmFwaChtYWtlU2FmZShBcml0aFN1YiksIG9wLCBvbmUoKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfcG9zdF9kZWMpOwogICAgICAgICB9CiAKQEAgLTg0Nyw5ICs4OTksOSBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtvcDFdLmhhc051bWJlclJlc3VsdCgpICYmIG1fZ3JhcGhbb3AyXS5oYXNOdW1i
ZXJSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFkZCwgdG9OdW1iZXIob3AxKSwgdG9OdW1iZXIob3Ay
KSkpOworICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBhZGRUb0dyYXBoKG1ha2VTYWZlKEFyaXRoQWRkKSwgdG9OdW1iZXIob3AxKSwgdG9OdW1iZXIo
b3AyKSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKFZhbHVlQWRkLCBvcDEsIG9wMikpOwor
ICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRU
b0dyYXBoKG1ha2VTYWZlKFZhbHVlQWRkKSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2FkZCk7CiAgICAgICAgIH0KIApAQCAtODYwLDE0ICs5MTIsMTQgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIHdlYWts
eVByZWRpY3RJbnQzMihvcDEpOwogICAgICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihv
cDIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3AyKSk7CisgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChtYWtlU2Fm
ZShBcml0aFN1YiksIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9tdWw6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCBvcDEgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoTXVsLCBvcDEsIG9wMikpOworICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgobWFrZVNhZmUo
QXJpdGhNdWxJZ25vcmVaZXJvKSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX211bCk7CiAgICAgICAgIH0KIApAQCAtMTAwMiw3ICsxMDU0LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6
IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlID0gZ2V0VHJ1ZVJlc3VsdChnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgd2Vha2x5UHJlZGljdEFycmF5KGJhc2UpOwogICAgICAg
ICAgICAgd2Vha2x5UHJlZGljdEludDMyKHByb3BlcnR5KTsKIApAQCAtMTA1OSw3ICsxMTExLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1
ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGVJbmRleCB2YWx1ZSA9IGdldFRydWVSZXN1bHQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllciA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBib29sIGRpcmVj
dCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CkBAIC0xMDgwLDcgKzExMzIsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX3B1dF9nbG9iYWxfdmFyOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
dmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBOb2RlSW5kZXggdmFsdWUgPSBnZXRUcnVlUmVzdWx0KGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEdsb2JhbFZhciwgT3BJ
bmZvKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9wdXRfZ2xvYmFsX3Zhcik7CiAgICAgICAgIH0KQEAgLTEzNjIsOCAr
MTQxNCwxNSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8
fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhpKTsKIAogICAgICAgICAgICAg
Tm9kZSogcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsKLSAgICAgICAgICAgIGlmIChw
aGlOb2RlLT5yZWZDb3VudCgpKQorICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09
IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFueSBsaXZlIFNldExvY2FsIHNo
b3VsZCBlbnN1cmUgdGhhdCBpdCBnZXRzIHRoZSB0cnVlIHZhbHVlLgorICAgICAgICAgICAgICAg
ICAgICAvLyBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IEFyaXRoTXVscyBkaXN0aW5ndWlzaCBi
ZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIHplcm8gYW5kIHBvc2l0aXZl
IHplcm8uCisgICAgICAgICAgICAgICAgICAgIGdldFRydWVSZXN1bHQobV9ncmFwaFt2YWx1ZUlu
UHJlZGVjZXNzb3JdLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpID09IE5vTm9kZSkgewogICAgICAgICAgICAg
ICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY29uc3QgZG91YmxlIHR3b1RvVGhl
MzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOworY29uc3QgZG91YmxlIEpJVENvZGVHZW5lcmF0
b3I6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOwogCiB2b2lkIEpJVENvZGVH
ZW5lcmF0b3I6OmNsZWFyR2VuZXJhdGlvbkluZm8oKQogewpAQCAtNzI5LDcgKzcyOSwxMCBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlQmFzCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBBcml0aE11bDogeworICAgIGNhc2UgQXJpdGhNdWxJ
Z25vcmVaZXJvOgorICAgIGNhc2UgQXJpdGhNdWxQb3NzaWJseU5lZ1plcm86CisgICAgY2FzZSBB
cml0aE11bFNwZWNOb3ROZWdaZXJvOgorICAgIGNhc2UgQXJpdGhNdWxTYWZlOiB7CiAgICAgICAg
IG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZs
b3csIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUikpOwogICAgICAgICBvdmVyZmxvdy5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsK
ICAgICAgICAgYnJlYWs7CkBAIC04MjAsNyArODIzLDEwIEBAIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVCYXMKICAgICAgICAgbV9qaXQuc3ViRG91YmxlKHRtcDJGUFIsIHRt
cDFGUFIpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgIGNhc2UgQXJpdGhNdWw6
CisgICAgY2FzZSBBcml0aE11bElnbm9yZVplcm86CisgICAgY2FzZSBBcml0aE11bFBvc3NpYmx5
TmVnWmVybzoKKyAgICBjYXNlIEFyaXRoTXVsU3BlY05vdE5lZ1plcm86CisgICAgY2FzZSBBcml0
aE11bFNhZmU6CiAgICAgICAgIG1faml0Lm11bERvdWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE5ODksNiArMTk5NSwxNiBAQCBHUFJUZW1w
b3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhCiAgICAgICAgIG1fZ3ByID0gbV9qaXQt
PmFsbG9jYXRlKCk7CiB9CiAKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5l
cmF0b3IqIGppdCwgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kJiBvcDEpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQoreworICAgIGlmIChtX2ppdC0+Y2Fu
UmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3By
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKK30KKwog
R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBJbnRlZ2Vy
T3BlcmFuZCYgb3AxKQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9ncHIoSW52YWxpZEdQUlJl
ZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiA5NTQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw4IEBAIHByb3Rl
Y3RlZDoKICAgICB9OwogICAgIAogICAgIGVudW0gVXNlQ2hpbGRyZW5Nb2RlIHsgQ2FsbFVzZUNo
aWxkcmVuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkgfTsKLQorICAgIAorICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgdHdvVG9UaGUzMjsKIAogcHVibGljOgogICAgIEdQUlJlZyBmaWxsSW50
ZWdlcihOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7CkBAIC0xMTczLDYgKzEx
NzQsNyBAQCBwdWJsaWM6CiAgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBHUFJS
ZWcgc3BlY2lmaWMpOwogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvcios
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kJiwgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmKTsKKyAg
ICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCYpOwogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgSW50ZWdlck9wZXJh
bmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIEludGVnZXJPcGVyYW5k
JiwgSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvcios
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDExICsxNDcsMTcgQEAgcHJpdmF0ZToKICAgICBt
YWNybyhWYWx1ZVRvSW50MzIsIE5vZGVSZXN1bHRJbnQzMiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICAvKiBVc2VkIHRvIGJveCB0aGUgcmVzdWx0IG9mIFVSU2hpZnQgbm9kZXMgKHJlc3VsdCBo
YXMgcmFuZ2UgMC4uMl4zMi0xKS4gKi9cCiAgICAgbWFjcm8oVUludDMyVG9OdW1iZXIsIE5vZGVS
ZXN1bHROdW1iZXIpIFwKKyAgICBtYWNybyhVSW50MzJUb051bWJlclNhZmUsIE5vZGVSZXN1bHRO
dW1iZXIpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGFyaXRobWV0aWMgb3BlcmF0aW9ucy4g
Ki9cCiAgICAgbWFjcm8oQXJpdGhBZGQsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhB
cml0aFN1YiwgTm9kZVJlc3VsdE51bWJlcikgXAotICAgIG1hY3JvKEFyaXRoTXVsLCBOb2RlUmVz
dWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhBZGRTYWZlLCBOb2RlUmVzdWx0TnVtYmVyKSAv
KiBTYWZlIHZhcmlhbnRzIGFyZSB0aG9zZSB0aGF0IGFyZSBrbm93biB0byB0YWtlIG9sZCBKSVQg
c2xvdyBwYXRoICovXAorICAgIG1hY3JvKEFyaXRoU3ViU2FmZSwgTm9kZVJlc3VsdE51bWJlcikg
XAorICAgIG1hY3JvKEFyaXRoTXVsU3BlY05vdE5lZ1plcm8sIE5vZGVSZXN1bHROdW1iZXIpIC8q
IFNwZWN1bGF0ZSB0aGF0IHRoZSByZXN1bHQgaXMgbm90IG5lZ2F0aXZlIHplcm8uICovIFwKKyAg
ICBtYWNybyhBcml0aE11bElnbm9yZVplcm8sIE5vZGVSZXN1bHROdW1iZXIpIC8qIElmIGl0J3Mg
bmVnYXRpdmUgemVybywgaWdub3JlIGl0LiAqLyBcCisgICAgbWFjcm8oQXJpdGhNdWxQb3NzaWJs
eU5lZ1plcm8sIE5vZGVSZXN1bHROdW1iZXIpIC8qIEl0IGRlZmluaXRlbHkgbWF5IGJlIG5lZ2F0
aXZlIHplcm8gYnV0IHdlIGhhdmVuJ3QgZGVjaWRlZCB3aGF0IHRvIGRvIGFib3V0IGl0IHlldC4g
Tm8gY29kZSBnZW5lcmF0aW9uIGZvciB0aGlzIG5vZGU7IGl0IGVpdGhlciB0dXJucyBpbnRvIEFy
aXRoTXVsSWdub3JlWmVybyBvciBBcml0aE11bFNhZmUuICovIFwKKyAgICBtYWNybyhBcml0aE11
bFNhZmUsIE5vZGVSZXN1bHROdW1iZXIpIC8qIEl0IG1heSBiZSBuZWdhdGl2ZSB6ZXJvLCBvciBp
dCBtYXkgcHJvZHVjZSBvdGhlciBmb3JtcyBvZiBkb3VibGUsIHNvIHNwZWN1bGF0ZSBkb3VibGUu
ICovXAogICAgIG1hY3JvKEFyaXRoRGl2LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8o
QXJpdGhNb2QsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0aEFicywgTm9kZVJl
c3VsdE51bWJlcikgXApAQCAtMTY2LDYgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAgXAogICAgIC8q
IEFkZCBvZiB2YWx1ZXMgbWF5IGVpdGhlciBiZSBhcml0aG1ldGljLCBvciByZXN1bHQgaW4gc3Ry
aW5nIGNvbmNhdGVuYXRpb24uICovXAogICAgIG1hY3JvKFZhbHVlQWRkLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKFZhbHVl
QWRkU2FmZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2Ji
ZXIpIFwKICAgICBcCiAgICAgLyogUHJvcGVydHkgYWNjZXNzLiAqL1wKICAgICAvKiBQdXRCeVZh
bEFsaWFzIGluZGljYXRlcyBhICdwdXQnIGFsaWFzZXMgYSBwcmlvciB3cml0ZSB0byB0aGUgc2Ft
ZSBwcm9wZXJ0eS4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bh
Z2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRvci5jcHAJKHJldmlzaW9uIDk1NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY2Fz
ZSBBcml0aFN1YjoKLSAgICAgICAgY2FzZSBBcml0aE11bDoKKyAgICAgICAgY2FzZSBBcml0aE11
bElnbm9yZVplcm86CisgICAgICAgIGNhc2UgQXJpdGhNdWxQb3NzaWJseU5lZ1plcm86CisgICAg
ICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoKICAgICAgICAgY2FzZSBBcml0aE1pbjoK
ICAgICAgICAgY2FzZSBBcml0aE1heDogewogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0
ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKQEAgLTI1Myw2ICsyNTUsMzAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcml0aEFkZFNhZmU6CisgICAgICAgIGNhc2UgQXJpdGhTdWJTYWZlOgorICAgICAg
ICBjYXNlIEFyaXRoTXVsU2FmZToKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlclNhZmU6IHsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVk
aWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgVmFsdWVBZGRTYWZlOiB7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAg
UHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgJiYgaXNT
dHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChpc051bWJlclBy
ZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSkKKyAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGlj
dERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEo
bGVmdCAmIFByZWRpY3ROdW1iZXIpIHx8ICEocmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBsZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5n
IG90aGVyIHRoYW4gYSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RTdHJpbmcsIFN0cm9uZ1ByZWRpY3Rp
b24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFN0cmluZyB8IFByZWRp
Y3RJbnQzMiB8IFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBMb2dpY2FsTm90OgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgICAgICBjYXNl
IENvbXBhcmVMZXNzRXE6CkBAIC00MDgsNyArNDM0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAg
ICBjYXNlIEFyaXRoTXVsOgorICAgICAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzoKKyAgICAg
ICAgY2FzZSBBcml0aE11bFBvc3NpYmx5TmVnWmVybzoKKyAgICAgICAgY2FzZSBBcml0aE11bFNw
ZWNOb3ROZWdaZXJvOgogICAgICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRo
TWF4OiB7CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25v
ZGUuY2hpbGQxKCldOwpAQCAtNDQxLDYgKzQ2OSwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWRkU2Fm
ZToKKyAgICAgICAgY2FzZSBBcml0aFN1YlNhZmU6CisgICAgICAgIGNhc2UgQXJpdGhNdWxTYWZl
OiB7CisgICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHRv
RG91YmxlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlQWRkU2FmZTogeworICAgICAgICAgICAgUHJl
ZGljdGVkVHlwZSBsZWZ0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpICYm
IGlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYm
IGlzTnVtYmVyUHJlZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICB0b0RvdWJsZShu
b2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU5Niw2
ICs2NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBz
d2l0Y2ggKG5vZGUub3ApIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBW
YWx1ZUFkZFNhZmU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAgIGNhc2UgQ29t
cGFyZUxlc3NFcToKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKQEAgLTc0MywxMyArNzkx
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDoKICAgICAgICAgY2FzZSBB
cml0aEFkZDoKICAgICAgICAgY2FzZSBBcml0aFN1YjoKLSAgICAgICAgY2FzZSBBcml0aE11bDoK
KyAgICAgICAgY2FzZSBBcml0aE11bElnbm9yZVplcm86CisgICAgICAgIGNhc2UgQXJpdGhNdWxQ
b3NzaWJseU5lZ1plcm86CisgICAgICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoKICAg
ICAgICAgY2FzZSBBcml0aE1vZDoKICAgICAgICAgY2FzZSBBcml0aERpdjoKICAgICAgICAgY2Fz
ZSBBcml0aEFiczoKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1h
eDoKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAgIGNhc2UgQXJpdGhBZGRTYWZlOgor
ICAgICAgICBjYXNlIEFyaXRoU3ViU2FmZToKKyAgICAgICAgY2FzZSBBcml0aE11bFNhZmU6CiAg
ICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQw
LDYgKzg0MCwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZv
cm1hdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyU2FmZTogeworICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBzb21ldGltZXMg
cHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQorICAgICAgICAvLyB0
aW1lLiBUaGlzIGF0IGxlYXN0IGFsbG93cyBzdWJzZXF1ZW50IGNvZGUgdG8gbm90IGhhdmUgd2Vp
cmQgY29uZGl0aW9uYWxzLgorICAgICAgICAKKyAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgICAgICAKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gb3AxLmdwcigpOworICAgICAgICBG
UFJSZWcgb3V0cHV0RlBSID0gcmVzdWx0LmZwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
Y29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIG91dHB1dEZQUik7CisgICAgICAgIAorICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpOwor
ICAgICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdv
VG9UaGUzMiksIG91dHB1dEZQUik7CisgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChvdXRwdXRGUFIsIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwpAQCAt
OTE2LDcgKzkzNiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQorICAgICAgICAKKyAgICAgICAgLy8gRmFs
bCB0aHJvdWdoIHRvIHNhZmUgY2FzZXMuCisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFZhbHVl
QWRkU2FmZToKKyAgICBjYXNlIEFyaXRoQWRkU2FmZTogewogICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpA
QCAtOTMwLDcgKzk1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBBU1NF
UlQob3AgPT0gVmFsdWVBZGQpOworICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQgfHwgb3Ag
PT0gVmFsdWVBZGRTYWZlKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwpAQCAtOTcyLDcgKzk5NywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQorICAg
ICAgICAKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNhZmUgY2FzZS4KKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgQXJpdGhTdWJTYWZlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwpAQCAtOTg1LDcgKzEwMTQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2Ug
QXJpdGhNdWw6IHsKKyAgICBjYXNlIEFyaXRoTXVsU3BlY05vdE5lZ1plcm86CisgICAgY2FzZSBB
cml0aE11bFBvc3NpYmx5TmVnWmVybzoKKyAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzogewog
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNo
aWxkMigpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtOTk1LDE1ICsxMDI2LDI0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyByZWcyID0g
b3AyLmdwcigpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hNdWwz
MihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSkpOwog
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW4sIHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzIsIFRy
dXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgcmVzdWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAvLyBPbmx5IHRoZSBBcml0aE11bFNwZWNOb3ROZWdaZXJvIG9wY29kZSBy
ZXF1aXJlcyB0aGF0IHdlIGFjdHVhbGx5IHR1cm4KKyAgICAgICAgICAgIC8vIG5lZ2F0aXZlIHpl
cm8gaW50byBhIGRvdWJsZS4gVGhlIG90aGVyIHR3byBtZWFuIHRoYXQgYWxsIHVzZXJzIG9mIHRo
aXMKKyAgICAgICAgICAgIC8vIHJlc3VsdCBkb24ndCBjYXJlIGlmIGl0J3MgYSBwb3NpdGl2ZSBv
ciBuZWdhdGl2ZSB6ZXJvLgorICAgICAgICAgICAgaWYgKG9wID09IEFyaXRoTXVsU3BlY05vdE5l
Z1plcm8pIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25a
ZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgcmVnMiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNh
ZmUgY2FzZS4KKyAgICB9CiAKKyAgICBjYXNlIEFyaXRoTXVsU2FmZTogewogICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwpAQCAtMTA4Nyw4ICsxMTI3LDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQXJpdGhN
aW46CiAgICAgY2FzZSBBcml0aE1heDogewogICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkgewotICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3Mg
PSBtX2ppdC5icmFuY2gzMihvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biA6IE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgb3AxLmdwcigpLCBvcDIuZ3ByKCkpOwpA
QCAtMTgzNiw3ICsxODc2LDcgQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0
ZVZhbAogICAgICAgICAKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgIGlmIChu
b2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlciB8fCBub2RlUHRyLT5vcCA9PSBVSW50MzJUb051
bWJlclNhZmUpIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5j
aGlsZDEoKTsKICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhd
OwogICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1
YWxSZWdpc3RlcigpXTsKQEAgLTE4NjcsNiArMTkwNyw3IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXB1dGVWYWwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5k
ZXggPSBpbmZvLm5vZGVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXJTYWZlOgogICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4
ID0gaW5mby5ub2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDk1NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTMsNiArNDEzLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBtX2J5dGVjb2RlT2Zmc2V0OwogI2Vu
ZGlmCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlv
bnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIAorI2lmIEVOQUJMRShWQUxVRV9Q
Uk9GSUxFUikKKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzbG93Q2FzZVByb2ZpbGUgPSAwOwor
ICAgICAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgICAgIHNsb3dDYXNlUHJvZmls
ZSA9IG1fY29kZUJsb2NrLT5hZGRTbG93Q2FzZVByb2ZpbGUobV9ieXRlY29kZU9mZnNldCk7Cisj
ZW5kaWYKIAogICAgICAgICBzd2l0Y2ggKG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJl
bnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpKSB7CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9hZGQpCkBAIC00ODUsNiArNDkxLDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2Vz
LmVuZCgpIHx8IGZpcnN0VG8gIT0gaXRlci0+dG8sIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGlu
IHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0
VG8gPT0gKGl0ZXIgLSAxKS0+dG8sICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNl
IGNvZGVnZW4uIik7CisgICAgICAgIAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICAg
ICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgICAgICBhZGQzMihJbW0zMigxKSwgQWJz
b2x1dGVBZGRyZXNzKCZzbG93Q2FzZVByb2ZpbGUtPm1fY291bnRlcikpOworI2VuZGlmCiAKICAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk1NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CiAgICAgICAgIHZvaWQgYWRk
U2xvd0Nhc2UoSnVtcExpc3QpOworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CiAgICAgICAg
IHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90
KEp1bXAsIGludCk7CiAKQEAgLTk3Miw2ICs5NzMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAg
ICAgIH0KKyAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWl0ZXIt
PmZyb20uaXNTZXQoKSk7CisgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgIH0KICAgICAgICAg
dm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgaW50IHZSZWcpOwogCiAgICAgICAgIEp1bXAgY2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJ
RCByZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Mjcs
NyArNjI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcG9zdF9kZWMoSW5zdHJ1Y3Rpb24qIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgbW92ZShyZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKFplcm8sIFRydXN0ZWRJbW0zMigxKSwgcmVn
VDEpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSkpOwogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDEsIHJl
Z1QxKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcmVfZGVjKEluc3RydWN0aW9uKiBjCiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0
ZUludGVnZXIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKFplcm8sIFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxv
dywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5v
Q2hlY2socmVnVDAsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7
CiB9CkBAIC03ODQsOCArNzg0LDM0IEBAIHZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcChP
cGNvZGVJRCAKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIHJlZ1Qx
LCByZWdUMCkpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVs
KTsKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgICAgIGlmIChtX2NhbkJlT3B0aW1p
emVkKSB7CisgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGJlIGFibGUgdG8gbWVhc3VyZSBpZiB0
aGlzIGlzIHRha2luZyB0aGUgc2xvdyBjYXNlIGp1c3QKKyAgICAgICAgICAgIC8vIGJlY2F1c2Ug
b2YgbmVnYXRpdmUgemVyby4gSWYgdGhpcyBwcm9kdWNlcyBwb3NpdGl2ZSB6ZXJvLCB0aGVuIHdl
CisgICAgICAgICAgICAvLyBkb24ndCB3YW50IHRoZSBzbG93IGNhc2UgdG8gYmUgdGFrZW4gYmVj
YXVzZSB0aGF0IHdpbGwgdGhyb3cgb2ZmCisgICAgICAgICAgICAvLyBzcGVjdWxhdGl2ZSBjb21w
aWxhdGlvbi4KKyAgICAgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaE11bDMyKE92ZXJmbG93LCByZWdUMSwgcmVnVDIpKTsKKyAgICAgICAg
ICAgIEp1bXBMaXN0IGRvbmU7CisgICAgICAgICAgICBkb25lLmFwcGVuZChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDIpKTsKKyAgICAgICAgICAgIEp1bXAgbmVnYXRpdmVaZXJvID0gYnJhbmNo
MzIoTGVzc1RoYW4sIHJlZ1QwLCBJbW0zMigwKSk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBJbW0zMigwKSkpOworICAgICAgICAg
ICAgbmVnYXRpdmVaZXJvLmxpbmsodGhpcyk7CisgICAgICAgICAgICAvLyBXZSBvbmx5IGdldCBo
ZXJlIGlmIHdlIGhhdmUgYSBnZW51aW5lIG5lZ2F0aXZlIHplcm8uIFJlY29yZCB0aGlzLAorICAg
ICAgICAgICAgLy8gc28gdGhhdCB0aGUgc3BlY3VsYXRpdmUgSklUIGtub3dzIHRoYXQgd2UgZmFp
bGVkIHNwZWN1bGF0aW9uCisgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGEgbmVnYXRpdmUgemVy
by4KKyAgICAgICAgICAgIGFkZDMyKEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJm1fY29kZUJs
b2NrLT5hZGRTcGVjaWFsRmFzdENhc2VQcm9maWxlKG1fYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50
ZXIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHJlZ1QyLCByZWdUMCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hNdWwzMihPdmVyZmxvdywgcmVn
VDEsIHJlZ1QwKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywg
cmVnVDApKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoTXVs
MzIoT3ZlcmZsb3csIHJlZ1QxLCByZWdUMCkpOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDApKTsKKyNlbmRpZgogICAgIH0KICAgICBlbWl0RmFzdEFyaXRoSW50
VG9JbW1Ob0NoZWNrKHJlZ1QwLCByZWdUMCk7CiB9CkBAIC04ODcsNiArOTEzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJyZQogICAgIE9wZXJhbmRUeXBlcyB0eXBl
cyA9IE9wZXJhbmRUeXBlczo6ZnJvbUludChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
KTsKIAogICAgIGlmICghdHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkgfHwgIXR5cGVzLnNl
Y29uZCgpLm1pZ2h0QmVOdW1iZXIoKSkgeworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfYWRkKTsKICAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQob3AxLCByZWdUMik7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KG9wMiwgcmVnVDIpOwpAQCAtOTE3LDggKzk0NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
YWRkKEluc3RydWN0aW9uKiBjCiAgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBPcGVyYW5kVHlwZXM6OmZy
b21JbnQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CiAKLSAgICBpZiAoIXR5cGVz
LmZpcnN0KCkubWlnaHRCZU51bWJlcigpIHx8ICF0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVtYmVy
KCkpCisgICAgaWYgKCF0eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1iZXIoKSB8fCAhdHlwZXMuc2Vj
b25kKCkubWlnaHRCZU51bWJlcigpKSB7CisgICAgICAgIGxpbmtEdW1teVNsb3dDYXNlKGl0ZXIp
OwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgYm9vbCBvcDFIYXNJbW1lZGlhdGVJbnRG
YXN0Q2FzZSA9IGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSk7CiAgICAgYm9vbCBv
cDJIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSA9ICFvcDFIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSAm
JiBpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDk1NDAxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5OSw2ICsyOTksMTMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoSnVtcAogICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wVmVj
dG9yW2ldLCBtX2J5dGVjb2RlT2Zmc2V0KSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWdu
ZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAg
ICAKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShKdW1wKCksIG1fYnl0ZWNv
ZGVPZmZzZXQpKTsKK30KKwogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1
bXAsIGludCByZWxhdGl2ZU9mZnNldCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAh
PSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVy
aW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlz
IHNldC4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107909</attachid>
            <date>2011-09-19 13:26:57 -0700</date>
            <delta_ts>2011-09-19 14:35:44 -0700</delta_ts>
            <desc>the patch - attempt to make Windows happy</desc>
            <filename>carefularith_patch_3.diff</filename>
            <type>text/plain</type>
            <size>37523</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU0MDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAK
KzIwMTEtMDktMTkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc3BlY3VsYXRpb24gZmFpbHVyZXMgc2hvdWxkIGFjdCBhcyBhZGRpdGlvbmFsIHZhbHVlIHBy
b2ZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODMzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBhZGRzIHNsb3ctY2FzZSBjb3VudGVycyB0byB0aGUgb2xkIEpJVC4gSXQgYWxz
byBlbnN1cmVzIHRoYXQKKyAgICAgICAgbmVnYXRpdmUgemVybyBpbiBtdWx0aXBseSBpcyBoYW5k
bGVkIGNhcmVmdWxseS4gVGhlIG9sZCBKSVQKKyAgICAgICAgcHJldmlvdXNseSB0b29rIHNsb3cg
cGF0aCBpZiB0aGUgcmVzdWx0IG9mIGEgbXVsdGlwbHkgd2FzIHplcm8sCisgICAgICAgIHdoaWNo
LCB3aXRob3V0IGFueSBjaGFuZ2VzLCB3b3VsZCBjYXVzZSB0aGUgREZHIHRvIHRoaW5rIHRoYXQK
KyAgICAgICAgZXZlcnkgc3VjaCBtdWx0aXBseSBwcm9kdWNlZCBhIGRvdWJsZSByZXN1bHQuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIG9sZCBKSVQncyBo
YW5kbGluZyBvZiBkZWNyZW1lbnRzLiBJdAorICAgICAgICB3b3VsZCB0YWtlIHRoZSBzbG93IHBh
dGggaWYgdGhlIHJlc3VsdCB3YXMgemVybywgYnV0IG5vdCBpZiBpdAorICAgICAgICB1bmRlcmZs
b3dlZC4KKyAgICAgICAgCisgICAgICAgIEJ5IGl0c2VsZiwgdGhpcyB3b3VsZCBiZSBhIDElIHNs
b3ctZG93biBvbiBWOCBhbmQgS3Jha2VuLiBCdXQgdGhlbgorICAgICAgICBJIHdyb3RlIG9wdGlt
aXphdGlvbnMgaW4gdGhlIERGRyB0aGF0IHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbmV3CisgICAg
ICAgIGluZm9ybWF0aW9uLiBJdCdzIG5vIGxvbmdlciB0aGUgY2FzZSB0aGF0IGV2ZXJ5IG11bHRp
cGx5IG5lZWRzIHRvCisgICAgICAgIGRvIGEgY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm87IGl0IG9u
bHkgaGFwcGVucyBpZiB0aGUgbmVnYXRpdmUKKyAgICAgICAgemVybyBpcyBpZ25vcmVkLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyByZXN1bHRzIGluIGEgMTIlIHNwZWVkLXVwIG9uIHY4LWNyeXB0
bywgZm9yIGEgMS40JSBnZW9tZWFuCisgICAgICAgIHNwZWVkLXVwIGluIFY4LiBJdCdzIG1vc3Rs
eSBuZXV0cmFsIG9uIEtyYWtlbi4gSSBjYW4gc2VlIGFuCisgICAgICAgIDAuNSUgc2xvdy1kb3du
IGFuZCBpdCBhcHBlYXJzIHRvIGJlIHNpZ25pZmljYW50LgorCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldFJhcmVDYXNlUHJv
ZmlsZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6UmFyZUNhc2VQcm9maWxlOjpSYXJlQ2FzZVByb2ZpbGUp
OgorICAgICAgICAoSlNDOjpnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldCk6CisgICAg
ICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6dG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
Om1ha2VTYWZlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KToKKyAgICAgICAgKiBkZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3Bh
Z2F0ZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHVwTm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2xvYmJlcnNXb3JsZCk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVS
ZWNvdmVyeUZvcik6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAg
KEpTQzo6SklUOjpsaW5rRHVtbXlTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0
aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcG9zdF9kZWMpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHJlX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUJp
bmFyeUFyaXRoT3ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9hZGQpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRo
b2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6YWRkU2xvd0Nhc2UpOgorCiAyMDExLTA5LTE5ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBGaXggZGlzdGNoZWNrIGJ1aWxkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4NCw2ICsx
OTg0LDE2IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB9CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKK3ZvaWQgQ29kZUJsb2NrOjpyZXNldFJhcmVD
YXNlUHJvZmlsZXMoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlNs
b3dDYXNlUHJvZmlsZXMoKTsgKytpKQorICAgICAgICBzbG93Q2FzZVByb2ZpbGUoaSktPm1fY291
bnRlciA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mU3BlY2lhbEZh
c3RDYXNlUHJvZmlsZXMoKTsgKytpKQorICAgICAgICBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGkp
LT5tX2NvdW50ZXIgPSAwOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9Q
Uk9GSUxFKQogdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKIHsKQEAgLTIwMDIs
NiArMjAxMiwxMSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgICAg
ICBwcm9maWxlLT5kdW1wKHN0ZGVycik7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsK
ICAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJTbG93Q2FzZVByb2ZpbGUgZm9yICVwOlxuIiwg
dGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mU2xvd0Nhc2VQcm9m
aWxlcygpOyArK2kpIHsKKyAgICAgICAgU2xvd0Nhc2VQcm9maWxlKiBwcm9maWxlID0gc2xvd0Nh
c2VQcm9maWxlKGkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4i
LCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOworICAgIH0K
IH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiA5NTQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDYgKzQ4OCw0NSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogYWRk
U2xvd0Nhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9zbG93Q2FzZVByb2ZpbGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0ZWNvZGVPZmZz
ZXQpKTsKKyAgICAgICAgICAgIHJldHVybiAmbV9zbG93Q2FzZVByb2ZpbGVzLmxhc3QoKTsKKyAg
ICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlNsb3dDYXNlUHJvZmlsZXMoKSB7IHJl
dHVybiBtX3Nsb3dDYXNlUHJvZmlsZXMuc2l6ZSgpOyB9CisgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogc2xvd0Nhc2VQcm9maWxlKGludCBpbmRleCkgeyByZXR1cm4gJm1fc2xvd0Nhc2VQcm9maWxl
c1tpbmRleF07IH0KKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzbG93Q2FzZVByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQsIGdl
dFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3Nsb3dDYXNlUHJvZmlsZXMsIG1fc2xv
d0Nhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGljIHVpbnQzMl90IHNsb3dDYXNlVGhyZXNob2xkKCkgeyByZXR1cm4g
MTAwOyB9CisgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zm
c2V0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2xvd0Nhc2VQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXIgPj0gc2xvd0Nhc2VUaHJlc2hv
bGQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBhZGRT
cGVjaWFsRmFzdENhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcy5hcHBlbmQoUmFyZUNhc2VQcm9maWxl
KGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgICAgICAgICByZXR1cm4gJm1fc3BlY2lhbEZhc3RDYXNl
UHJvZmlsZXMubGFzdCgpOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3Bl
Y2lhbEZhc3RDYXNlUHJvZmlsZXMoKSB7IHJldHVybiBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVz
LnNpemUoKTsgfQorICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGUoaW50IGluZGV4KSB7IHJldHVybiAmbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlc1tpbmRleF07
IH0KKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpnZW5lcmljQmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50LCBnZXRS
YXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldD4obV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcywg
bV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2Uo
aW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBzbG93
Q2FzZUNvdW50ID0gc2xvd0Nhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpLT5tX2NvdW50ZXI7CisgICAgICAgICAgICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3Vu
dCA9IHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCktPm1fY291bnRlcjsKKyAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCAtIHNwZWNp
YWxGYXN0Q2FzZUNvdW50KSA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIHJlc2V0UmFyZUNhc2VQcm9maWxlcygpOwogI2VuZGlmCiAKICAg
ICAgICAgdW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluZm9Db3VudCgpIGNvbnN0CkBAIC03OTEsNiAr
ODMwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklM
RVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9m
aWxlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJhcmVDYXNlUHJvZmlsZSwgOD4gbV9zbG93
Q2FzZVByb2ZpbGVzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmFyZUNhc2VQcm9maWxlLCA4
PiBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzOwogI2VuZGlmCiAKICAgICAgICAgVmVjdG9yPHVu
c2lnbmVkPiBtX2p1bXBUYXJnZXRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw2
ICszNTksMjQgQEAgaW5saW5lIGludCBnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldAogewog
ICAgIHJldHVybiB2YWx1ZVByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQ7CiB9CisKKy8vIFRoaXMg
aXMgYSBtaW5pIHZhbHVlIHByb2ZpbGUgdG8gY2F0Y2ggcGF0aG9sb2dpZXMuIEl0IGlzIGEgY291
bnRlciB0aGF0IGdldHMKKy8vIGluY3JlbWVudGVkIHdoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRo
IG9uIGFueSBpbnN0cnVjdGlvbi4KK3N0cnVjdCBSYXJlQ2FzZVByb2ZpbGUgeworICAgIFJhcmVD
YXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRlY29kZU9mZnNl
dChieXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX2NvdW50ZXIoMCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGludCBtX2J5dGVjb2RlT2Zmc2V0OworICAgIHVpbnQzMl90IG1fY291bnRlcjsK
K307CisKK2lubGluZSBpbnQgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQoUmFyZUNh
c2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUpCit7CisgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmls
ZS0+bV9ieXRlY29kZU9mZnNldDsKK30KICNlbmRpZgogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTU0MDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChub2Rl
Lm9wID09IFVJbnQzMlRvTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7
CiAKKyAgICAgICAgaWYgKG5vZGUub3AgPT0gVUludDMyVG9OdW1iZXJTYWZlKQorICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CisKICAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMg
Y29uc3RhbnRzIGJveGVkIGFzIEpTVmFsdWVzLgogICAgICAgICBpZiAobm9kZS5vcCA9PSBKU0Nv
bnN0YW50KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFudChpbmRl
eCk7CkBAIC00ODMsNyArNDg2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGVQdHItPm9wKSB7CiAgICAgICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICAgICAgY2Fz
ZSBBcml0aFN1YjoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAgICAgICAgICBjYXNl
IEFyaXRoTXVsSWdub3JlWmVybzoKKyAgICAgICAgICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVn
WmVybzoKKyAgICAgICAgICAgIGNhc2UgQXJpdGhNdWxQb3NzaWJseU5lZ1plcm86CisgICAgICAg
ICAgICBjYXNlIEFyaXRoTXVsU2FmZToKICAgICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAg
ICAgICAgICAgICAgbV9yZXVzYWJsZU5vZGVTdGFjay5hcHBlbmQoJm1fZ3JhcGhbbm9kZVB0ci0+
Y2hpbGQxKCldKTsKICAgICAgICAgICAgICAgICBtX3JldXNhYmxlTm9kZVN0YWNrLmFwcGVuZCgm
bV9ncmFwaFtub2RlUHRyLT5jaGlsZDIoKV0pOwpAQCAtNTE4LDYgKzUyNCw1MiBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KG5vZGVJbmRleCwgbV9jdXJyZW50SW5k
ZXgpOwogICAgIH0KKyAgICAKKyAgICBOb2RlVHlwZSBtYWtlU2FmZShOb2RlVHlwZSBvcCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZSht
X2N1cnJlbnRJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gb3A7CisgICAgICAgIAorI2lmIEVO
QUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJNYWtpbmcgJXMgQCVsdSBz
YWZlIGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXVcbiIsIEdyYXBo
OjpvcE5hbWUob3ApLCBtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1fcHJvZmlsZWRC
bG9jay0+c2xvd0Nhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5t
X2NvdW50ZXIpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAg
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gVUludDMyVG9OdW1i
ZXJTYWZlOworICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICAgICAgcmV0dXJuIEFyaXRo
QWRkU2FmZTsKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgICAgIHJldHVybiBBcml0
aFN1YlNhZmU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIGluaXRpYWxpemUgQXJp
dGhNdWwgdG8gQXJpdGhNdWxJZ25vcmVaZXJvIGFuZCBwdXNoIGl0IHRvd2FyZHMKKyAgICAgICAg
ICAgIC8vIHNhZmVyIHZhcmlhbnRzIGFzIHdlIGxlYXJuIG1vcmUuIEZpcnN0IHdlIHR1cm4gaXQg
aW50byBQb3NzaWJseU5lZ1plcm8KKyAgICAgICAgICAgIC8vIGlmIHdlIHNlZSB0aGF0IGl0IGhh
ZCBiZWVuIC0wIGR1cmluZyBvbGQgSklUIGV4ZWN1dGlvbi4KKyAgICAgICAgY2FzZSBBcml0aE11
bElnbm9yZVplcm86CisgICAgICAgICAgICByZXR1cm4gQXJpdGhNdWxQb3NzaWJseU5lZ1plcm87
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgICAgIHJldHVy
biBWYWx1ZUFkZFNhZmU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBQaGFudG9tOyAvLyBIYXZlIHRvIHJldHVy
biBzb21ldGhpbmcuCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldFRy
dWVSZXN1bHQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9n
cmFwaFtub2RlSW5kZXhdLm9wKSB7CisgICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgor
ICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTcGVjTm90TmVnWmVy
bzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWda
ZXJvOgorICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTYWZlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgIH0KIAogICAgIEpTR2xv
YmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC03
ODcsMTEgKzgzOSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAweDFmKQog
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKEJpdFVSU2hpZnQsIG9wMSwg
b3AyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGFkZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIG9wMSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGFkZFRvR3JhcGgobWFrZVNhZmUoVUludDMyVG9OdW1iZXIpLCBvcDEpOwogICAgICAg
ICAgICAgfSAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IG9wdGltaXplIGF0IHRo
aXMgc3RhZ2U7IHNoaWZ0ICYgcG90ZW50aWFsbHkgcmVib3ggYXMgYSBkb3VibGUuCiAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChCaXRVUlNoaWZ0LCBvcDEsIG9wMik7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChVSW50MzJUb051bWJlciwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKG1ha2VTYWZlKFVJbnQzMlRvTnVt
YmVyKSwgcmVzdWx0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHQsIFByZWRpY3RJbnQzMik7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF91cnNoaWZ0KTsKQEAgLTgwMyw3ICs4NTUsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNE
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJ
bnQzMihvcCk7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRoQWRkLCBv
cCwgb25lKCkpKTsKKyAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3JhcGgobWFrZVNhZmUo
QXJpdGhBZGQpLCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3ByZV9p
bmMpOwogICAgICAgICB9CiAKQEAgLTgxMyw3ICs4NjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRUb051
bWJlcihzcmNEc3QpOwogICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wKTsKICAgICAg
ICAgICAgIHNldChyZXN1bHQsIG9wKTsKLSAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3Jh
cGgoQXJpdGhBZGQsIG9wLCBvbmUoKSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRkVG9H
cmFwaChtYWtlU2FmZShBcml0aEFkZCksIG9wLCBvbmUoKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcG9zdF9pbmMpOwogICAgICAgICB9CiAKQEAgLTgyMSw3ICs4NzMsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25l
ZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAg
Tm9kZUluZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVBy
ZWRpY3RJbnQzMihvcCk7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRo
U3ViLCBvcCwgb25lKCkpKTsKKyAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3JhcGgobWFr
ZVNhZmUoQXJpdGhTdWIpLCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3ByZV9kZWMpOwogICAgICAgICB9CiAKQEAgLTgzMSw3ICs4ODMsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBn
ZXRUb051bWJlcihzcmNEc3QpOwogICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wKTsK
ICAgICAgICAgICAgIHNldChyZXN1bHQsIG9wKTsKLSAgICAgICAgICAgIHNldChzcmNEc3QsIGFk
ZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBvbmUoKSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwg
YWRkVG9HcmFwaChtYWtlU2FmZShBcml0aFN1YiksIG9wLCBvbmUoKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfcG9zdF9kZWMpOwogICAgICAgICB9CiAKQEAgLTg0Nyw5ICs4OTksOSBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtvcDFdLmhhc051bWJlclJlc3VsdCgpICYmIG1fZ3JhcGhbb3AyXS5oYXNOdW1i
ZXJSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFkZCwgdG9OdW1iZXIob3AxKSwgdG9OdW1iZXIob3Ay
KSkpOworICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBhZGRUb0dyYXBoKG1ha2VTYWZlKEFyaXRoQWRkKSwgdG9OdW1iZXIob3AxKSwgdG9OdW1iZXIo
b3AyKSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKFZhbHVlQWRkLCBvcDEsIG9wMikpOwor
ICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRU
b0dyYXBoKG1ha2VTYWZlKFZhbHVlQWRkKSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2FkZCk7CiAgICAgICAgIH0KIApAQCAtODYwLDE0ICs5MTIsMTQgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIHdlYWts
eVByZWRpY3RJbnQzMihvcDEpOwogICAgICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihv
cDIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3AyKSk7CisgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChtYWtlU2Fm
ZShBcml0aFN1YiksIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9tdWw6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCBvcDEgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoTXVsLCBvcDEsIG9wMikpOworICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgobWFrZVNhZmUo
QXJpdGhNdWxJZ25vcmVaZXJvKSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX211bCk7CiAgICAgICAgIH0KIApAQCAtMTAwMiw3ICsxMDU0LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6
IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlID0gZ2V0VHJ1ZVJlc3VsdChnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgd2Vha2x5UHJlZGljdEFycmF5KGJhc2UpOwogICAgICAg
ICAgICAgd2Vha2x5UHJlZGljdEludDMyKHByb3BlcnR5KTsKIApAQCAtMTA1OSw3ICsxMTExLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1
ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGVJbmRleCB2YWx1ZSA9IGdldFRydWVSZXN1bHQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllciA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBib29sIGRpcmVj
dCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CkBAIC0xMDgwLDcgKzExMzIsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX3B1dF9nbG9iYWxfdmFyOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
dmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBOb2RlSW5kZXggdmFsdWUgPSBnZXRUcnVlUmVzdWx0KGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEdsb2JhbFZhciwgT3BJ
bmZvKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9wdXRfZ2xvYmFsX3Zhcik7CiAgICAgICAgIH0KQEAgLTEzNjIsOCAr
MTQxNCwxNSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8
fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhpKTsKIAogICAgICAgICAgICAg
Tm9kZSogcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsKLSAgICAgICAgICAgIGlmIChw
aGlOb2RlLT5yZWZDb3VudCgpKQorICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09
IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFueSBsaXZlIFNldExvY2FsIHNo
b3VsZCBlbnN1cmUgdGhhdCBpdCBnZXRzIHRoZSB0cnVlIHZhbHVlLgorICAgICAgICAgICAgICAg
ICAgICAvLyBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IEFyaXRoTXVscyBkaXN0aW5ndWlzaCBi
ZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIHplcm8gYW5kIHBvc2l0aXZl
IHplcm8uCisgICAgICAgICAgICAgICAgICAgIGdldFRydWVSZXN1bHQobV9ncmFwaFt2YWx1ZUlu
UHJlZGVjZXNzb3JdLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpID09IE5vTm9kZSkgewogICAgICAgICAgICAg
ICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY29uc3QgZG91YmxlIHR3b1RvVGhl
MzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOworY29uc3QgZG91YmxlIEpJVENvZGVHZW5lcmF0
b3I6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOwogCiB2b2lkIEpJVENvZGVH
ZW5lcmF0b3I6OmNsZWFyR2VuZXJhdGlvbkluZm8oKQogewpAQCAtNzI5LDcgKzcyOSwxMCBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlQmFzCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBBcml0aE11bDogeworICAgIGNhc2UgQXJpdGhNdWxJ
Z25vcmVaZXJvOgorICAgIGNhc2UgQXJpdGhNdWxQb3NzaWJseU5lZ1plcm86CisgICAgY2FzZSBB
cml0aE11bFNwZWNOb3ROZWdaZXJvOgorICAgIGNhc2UgQXJpdGhNdWxTYWZlOiB7CiAgICAgICAg
IG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZs
b3csIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUikpOwogICAgICAgICBvdmVyZmxvdy5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsK
ICAgICAgICAgYnJlYWs7CkBAIC04MjAsNyArODIzLDEwIEBAIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVCYXMKICAgICAgICAgbV9qaXQuc3ViRG91YmxlKHRtcDJGUFIsIHRt
cDFGUFIpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgIGNhc2UgQXJpdGhNdWw6
CisgICAgY2FzZSBBcml0aE11bElnbm9yZVplcm86CisgICAgY2FzZSBBcml0aE11bFBvc3NpYmx5
TmVnWmVybzoKKyAgICBjYXNlIEFyaXRoTXVsU3BlY05vdE5lZ1plcm86CisgICAgY2FzZSBBcml0
aE11bFNhZmU6CiAgICAgICAgIG1faml0Lm11bERvdWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE5ODksNiArMTk5NSwxNiBAQCBHUFJUZW1w
b3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhCiAgICAgICAgIG1fZ3ByID0gbV9qaXQt
PmFsbG9jYXRlKCk7CiB9CiAKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5l
cmF0b3IqIGppdCwgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kJiBvcDEpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQoreworICAgIGlmIChtX2ppdC0+Y2Fu
UmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3By
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKK30KKwog
R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBJbnRlZ2Vy
T3BlcmFuZCYgb3AxKQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9ncHIoSW52YWxpZEdQUlJl
ZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiA5NTQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw4IEBAIHByb3Rl
Y3RlZDoKICAgICB9OwogICAgIAogICAgIGVudW0gVXNlQ2hpbGRyZW5Nb2RlIHsgQ2FsbFVzZUNo
aWxkcmVuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkgfTsKLQorICAgIAorICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgdHdvVG9UaGUzMjsKIAogcHVibGljOgogICAgIEdQUlJlZyBmaWxsSW50
ZWdlcihOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7CkBAIC0xMTczLDYgKzEx
NzQsNyBAQCBwdWJsaWM6CiAgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBHUFJS
ZWcgc3BlY2lmaWMpOwogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvcios
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kJiwgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmKTsKKyAg
ICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCYpOwogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgSW50ZWdlck9wZXJh
bmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIEludGVnZXJPcGVyYW5k
JiwgSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvcios
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDExICsxNDcsMTcgQEAgcHJpdmF0ZToKICAgICBt
YWNybyhWYWx1ZVRvSW50MzIsIE5vZGVSZXN1bHRJbnQzMiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICAvKiBVc2VkIHRvIGJveCB0aGUgcmVzdWx0IG9mIFVSU2hpZnQgbm9kZXMgKHJlc3VsdCBo
YXMgcmFuZ2UgMC4uMl4zMi0xKS4gKi9cCiAgICAgbWFjcm8oVUludDMyVG9OdW1iZXIsIE5vZGVS
ZXN1bHROdW1iZXIpIFwKKyAgICBtYWNybyhVSW50MzJUb051bWJlclNhZmUsIE5vZGVSZXN1bHRO
dW1iZXIpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGFyaXRobWV0aWMgb3BlcmF0aW9ucy4g
Ki9cCiAgICAgbWFjcm8oQXJpdGhBZGQsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhB
cml0aFN1YiwgTm9kZVJlc3VsdE51bWJlcikgXAotICAgIG1hY3JvKEFyaXRoTXVsLCBOb2RlUmVz
dWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhBZGRTYWZlLCBOb2RlUmVzdWx0TnVtYmVyKSAv
KiBTYWZlIHZhcmlhbnRzIGFyZSB0aG9zZSB0aGF0IGFyZSBrbm93biB0byB0YWtlIG9sZCBKSVQg
c2xvdyBwYXRoICovXAorICAgIG1hY3JvKEFyaXRoU3ViU2FmZSwgTm9kZVJlc3VsdE51bWJlcikg
XAorICAgIG1hY3JvKEFyaXRoTXVsU3BlY05vdE5lZ1plcm8sIE5vZGVSZXN1bHROdW1iZXIpIC8q
IFNwZWN1bGF0ZSB0aGF0IHRoZSByZXN1bHQgaXMgbm90IG5lZ2F0aXZlIHplcm8uICovIFwKKyAg
ICBtYWNybyhBcml0aE11bElnbm9yZVplcm8sIE5vZGVSZXN1bHROdW1iZXIpIC8qIElmIGl0J3Mg
bmVnYXRpdmUgemVybywgaWdub3JlIGl0LiAqLyBcCisgICAgbWFjcm8oQXJpdGhNdWxQb3NzaWJs
eU5lZ1plcm8sIE5vZGVSZXN1bHROdW1iZXIpIC8qIEl0IGRlZmluaXRlbHkgbWF5IGJlIG5lZ2F0
aXZlIHplcm8gYnV0IHdlIGhhdmVuJ3QgZGVjaWRlZCB3aGF0IHRvIGRvIGFib3V0IGl0IHlldC4g
Tm8gY29kZSBnZW5lcmF0aW9uIGZvciB0aGlzIG5vZGU7IGl0IGVpdGhlciB0dXJucyBpbnRvIEFy
aXRoTXVsSWdub3JlWmVybyBvciBBcml0aE11bFNhZmUuICovIFwKKyAgICBtYWNybyhBcml0aE11
bFNhZmUsIE5vZGVSZXN1bHROdW1iZXIpIC8qIEl0IG1heSBiZSBuZWdhdGl2ZSB6ZXJvLCBvciBp
dCBtYXkgcHJvZHVjZSBvdGhlciBmb3JtcyBvZiBkb3VibGUsIHNvIHNwZWN1bGF0ZSBkb3VibGUu
ICovXAogICAgIG1hY3JvKEFyaXRoRGl2LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8o
QXJpdGhNb2QsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0aEFicywgTm9kZVJl
c3VsdE51bWJlcikgXApAQCAtMTY2LDYgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAgXAogICAgIC8q
IEFkZCBvZiB2YWx1ZXMgbWF5IGVpdGhlciBiZSBhcml0aG1ldGljLCBvciByZXN1bHQgaW4gc3Ry
aW5nIGNvbmNhdGVuYXRpb24uICovXAogICAgIG1hY3JvKFZhbHVlQWRkLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKFZhbHVl
QWRkU2FmZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2Ji
ZXIpIFwKICAgICBcCiAgICAgLyogUHJvcGVydHkgYWNjZXNzLiAqL1wKICAgICAvKiBQdXRCeVZh
bEFsaWFzIGluZGljYXRlcyBhICdwdXQnIGFsaWFzZXMgYSBwcmlvciB3cml0ZSB0byB0aGUgc2Ft
ZSBwcm9wZXJ0eS4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bh
Z2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRvci5jcHAJKHJldmlzaW9uIDk1NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY2Fz
ZSBBcml0aFN1YjoKLSAgICAgICAgY2FzZSBBcml0aE11bDoKKyAgICAgICAgY2FzZSBBcml0aE11
bElnbm9yZVplcm86CisgICAgICAgIGNhc2UgQXJpdGhNdWxQb3NzaWJseU5lZ1plcm86CisgICAg
ICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoKICAgICAgICAgY2FzZSBBcml0aE1pbjoK
ICAgICAgICAgY2FzZSBBcml0aE1heDogewogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0
ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKQEAgLTI1Myw2ICsyNTUsMzAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcml0aEFkZFNhZmU6CisgICAgICAgIGNhc2UgQXJpdGhTdWJTYWZlOgorICAgICAg
ICBjYXNlIEFyaXRoTXVsU2FmZToKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlclNhZmU6IHsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVk
aWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgVmFsdWVBZGRTYWZlOiB7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAg
UHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgJiYgaXNT
dHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChpc051bWJlclBy
ZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSkKKyAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGlj
dERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEo
bGVmdCAmIFByZWRpY3ROdW1iZXIpIHx8ICEocmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBsZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5n
IG90aGVyIHRoYW4gYSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RTdHJpbmcsIFN0cm9uZ1ByZWRpY3Rp
b24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFN0cmluZyB8IFByZWRp
Y3RJbnQzMiB8IFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBMb2dpY2FsTm90OgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgICAgICBjYXNl
IENvbXBhcmVMZXNzRXE6CkBAIC00MDgsNyArNDM0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAg
ICBjYXNlIEFyaXRoTXVsOgorICAgICAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzoKKyAgICAg
ICAgY2FzZSBBcml0aE11bFBvc3NpYmx5TmVnWmVybzoKKyAgICAgICAgY2FzZSBBcml0aE11bFNw
ZWNOb3ROZWdaZXJvOgogICAgICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRo
TWF4OiB7CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25v
ZGUuY2hpbGQxKCldOwpAQCAtNDQxLDYgKzQ2OSwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWRkU2Fm
ZToKKyAgICAgICAgY2FzZSBBcml0aFN1YlNhZmU6CisgICAgICAgIGNhc2UgQXJpdGhNdWxTYWZl
OiB7CisgICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHRv
RG91YmxlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlQWRkU2FmZTogeworICAgICAgICAgICAgUHJl
ZGljdGVkVHlwZSBsZWZ0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpICYm
IGlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYm
IGlzTnVtYmVyUHJlZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICB0b0RvdWJsZShu
b2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU5Niw2
ICs2NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBz
d2l0Y2ggKG5vZGUub3ApIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBW
YWx1ZUFkZFNhZmU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAgIGNhc2UgQ29t
cGFyZUxlc3NFcToKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKQEAgLTc0MywxMyArNzkx
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDoKICAgICAgICAgY2FzZSBB
cml0aEFkZDoKICAgICAgICAgY2FzZSBBcml0aFN1YjoKLSAgICAgICAgY2FzZSBBcml0aE11bDoK
KyAgICAgICAgY2FzZSBBcml0aE11bElnbm9yZVplcm86CisgICAgICAgIGNhc2UgQXJpdGhNdWxQ
b3NzaWJseU5lZ1plcm86CisgICAgICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoKICAg
ICAgICAgY2FzZSBBcml0aE1vZDoKICAgICAgICAgY2FzZSBBcml0aERpdjoKICAgICAgICAgY2Fz
ZSBBcml0aEFiczoKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1h
eDoKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAgIGNhc2UgQXJpdGhBZGRTYWZlOgor
ICAgICAgICBjYXNlIEFyaXRoU3ViU2FmZToKKyAgICAgICAgY2FzZSBBcml0aE11bFNhZmU6CiAg
ICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQw
LDYgKzg0MCwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZv
cm1hdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyU2FmZTogeworICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBzb21ldGltZXMg
cHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQorICAgICAgICAvLyB0
aW1lLiBUaGlzIGF0IGxlYXN0IGFsbG93cyBzdWJzZXF1ZW50IGNvZGUgdG8gbm90IGhhdmUgd2Vp
cmQgY29uZGl0aW9uYWxzLgorICAgICAgICAKKyAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgICAgICAKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gb3AxLmdwcigpOworICAgICAgICBG
UFJSZWcgb3V0cHV0RlBSID0gcmVzdWx0LmZwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
Y29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIG91dHB1dEZQUik7CisgICAgICAgIAorICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpOwor
ICAgICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdv
VG9UaGUzMiksIG91dHB1dEZQUik7CisgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChvdXRwdXRGUFIsIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwpAQCAt
OTE2LDcgKzkzNiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQorICAgICAgICAKKyAgICAgICAgLy8gRmFs
bCB0aHJvdWdoIHRvIHNhZmUgY2FzZXMuCisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFZhbHVl
QWRkU2FmZToKKyAgICBjYXNlIEFyaXRoQWRkU2FmZTogewogICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpA
QCAtOTMwLDcgKzk1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBBU1NF
UlQob3AgPT0gVmFsdWVBZGQpOworICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQgfHwgb3Ag
PT0gVmFsdWVBZGRTYWZlKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwpAQCAtOTcyLDcgKzk5NywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQorICAg
ICAgICAKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNhZmUgY2FzZS4KKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgQXJpdGhTdWJTYWZlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwpAQCAtOTg1LDcgKzEwMTQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2Ug
QXJpdGhNdWw6IHsKKyAgICBjYXNlIEFyaXRoTXVsU3BlY05vdE5lZ1plcm86CisgICAgY2FzZSBB
cml0aE11bFBvc3NpYmx5TmVnWmVybzoKKyAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzogewog
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNo
aWxkMigpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtOTk1LDE1ICsxMDI2LDI0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyByZWcyID0g
b3AyLmdwcigpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hNdWwz
MihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSkpOwog
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW4sIHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzIsIFRy
dXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgcmVzdWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAvLyBPbmx5IHRoZSBBcml0aE11bFNwZWNOb3ROZWdaZXJvIG9wY29kZSBy
ZXF1aXJlcyB0aGF0IHdlIGFjdHVhbGx5IHR1cm4KKyAgICAgICAgICAgIC8vIG5lZ2F0aXZlIHpl
cm8gaW50byBhIGRvdWJsZS4gVGhlIG90aGVyIHR3byBtZWFuIHRoYXQgYWxsIHVzZXJzIG9mIHRo
aXMKKyAgICAgICAgICAgIC8vIHJlc3VsdCBkb24ndCBjYXJlIGlmIGl0J3MgYSBwb3NpdGl2ZSBv
ciBuZWdhdGl2ZSB6ZXJvLgorICAgICAgICAgICAgaWYgKG9wID09IEFyaXRoTXVsU3BlY05vdE5l
Z1plcm8pIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25a
ZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgcmVnMiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNh
ZmUgY2FzZS4KKyAgICB9CiAKKyAgICBjYXNlIEFyaXRoTXVsU2FmZTogewogICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwpAQCAtMTA4Nyw4ICsxMTI3LDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQXJpdGhN
aW46CiAgICAgY2FzZSBBcml0aE1heDogewogICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkgewotICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3Mg
PSBtX2ppdC5icmFuY2gzMihvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biA6IE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgb3AxLmdwcigpLCBvcDIuZ3ByKCkpOwpA
QCAtMTgzNiw3ICsxODc2LDcgQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0
ZVZhbAogICAgICAgICAKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgIGlmIChu
b2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlciB8fCBub2RlUHRyLT5vcCA9PSBVSW50MzJUb051
bWJlclNhZmUpIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5j
aGlsZDEoKTsKICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhd
OwogICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1
YWxSZWdpc3RlcigpXTsKQEAgLTE4NjcsNiArMTkwNyw3IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXB1dGVWYWwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5k
ZXggPSBpbmZvLm5vZGVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXJTYWZlOgogICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4
ID0gaW5mby5ub2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDk1NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTMsNiArNDEzLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBtX2J5dGVjb2RlT2Zmc2V0OwogI2Vu
ZGlmCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlv
bnNCZWdpbiArIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIAorI2lmIEVOQUJMRShWQUxVRV9Q
Uk9GSUxFUikKKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzbG93Q2FzZVByb2ZpbGUgPSAwOwor
ICAgICAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgICAgIHNsb3dDYXNlUHJvZmls
ZSA9IG1fY29kZUJsb2NrLT5hZGRTbG93Q2FzZVByb2ZpbGUobV9ieXRlY29kZU9mZnNldCk7Cisj
ZW5kaWYKIAogICAgICAgICBzd2l0Y2ggKG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJl
bnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpKSB7CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9hZGQpCkBAIC00ODUsNiArNDkxLDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2Vz
LmVuZCgpIHx8IGZpcnN0VG8gIT0gaXRlci0+dG8sIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGlu
IHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0
VG8gPT0gKGl0ZXIgLSAxKS0+dG8sICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNl
IGNvZGVnZW4uIik7CisgICAgICAgIAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICAg
ICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgICAgICBhZGQzMihJbW0zMigxKSwgQWJz
b2x1dGVBZGRyZXNzKCZzbG93Q2FzZVByb2ZpbGUtPm1fY291bnRlcikpOworI2VuZGlmCiAKICAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk1NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CiAgICAgICAgIHZvaWQgYWRk
U2xvd0Nhc2UoSnVtcExpc3QpOworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CiAgICAgICAg
IHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90
KEp1bXAsIGludCk7CiAKQEAgLTk3Miw2ICs5NzMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAg
ICAgIH0KKyAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWl0ZXIt
PmZyb20uaXNTZXQoKSk7CisgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgIH0KICAgICAgICAg
dm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgaW50IHZSZWcpOwogCiAgICAgICAgIEp1bXAgY2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJ
RCByZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Mjcs
NyArNjI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcG9zdF9kZWMoSW5zdHJ1Y3Rpb24qIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgbW92ZShyZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKFplcm8sIFRydXN0ZWRJbW0zMigxKSwgcmVn
VDEpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSkpOwogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDEsIHJl
Z1QxKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcmVfZGVjKEluc3RydWN0aW9uKiBjCiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0
ZUludGVnZXIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKFplcm8sIFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxv
dywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5v
Q2hlY2socmVnVDAsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7
CiB9CkBAIC03ODQsOCArNzg0LDM0IEBAIHZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcChP
cGNvZGVJRCAKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIHJlZ1Qx
LCByZWdUMCkpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVs
KTsKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgICAgIGlmIChtX2NhbkJlT3B0aW1p
emVkKSB7CisgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGJlIGFibGUgdG8gbWVhc3VyZSBpZiB0
aGlzIGlzIHRha2luZyB0aGUgc2xvdyBjYXNlIGp1c3QKKyAgICAgICAgICAgIC8vIGJlY2F1c2Ug
b2YgbmVnYXRpdmUgemVyby4gSWYgdGhpcyBwcm9kdWNlcyBwb3NpdGl2ZSB6ZXJvLCB0aGVuIHdl
CisgICAgICAgICAgICAvLyBkb24ndCB3YW50IHRoZSBzbG93IGNhc2UgdG8gYmUgdGFrZW4gYmVj
YXVzZSB0aGF0IHdpbGwgdGhyb3cgb2ZmCisgICAgICAgICAgICAvLyBzcGVjdWxhdGl2ZSBjb21w
aWxhdGlvbi4KKyAgICAgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaE11bDMyKE92ZXJmbG93LCByZWdUMSwgcmVnVDIpKTsKKyAgICAgICAg
ICAgIEp1bXBMaXN0IGRvbmU7CisgICAgICAgICAgICBkb25lLmFwcGVuZChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDIpKTsKKyAgICAgICAgICAgIEp1bXAgbmVnYXRpdmVaZXJvID0gYnJhbmNo
MzIoTGVzc1RoYW4sIHJlZ1QwLCBJbW0zMigwKSk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBJbW0zMigwKSkpOworICAgICAgICAg
ICAgbmVnYXRpdmVaZXJvLmxpbmsodGhpcyk7CisgICAgICAgICAgICAvLyBXZSBvbmx5IGdldCBo
ZXJlIGlmIHdlIGhhdmUgYSBnZW51aW5lIG5lZ2F0aXZlIHplcm8uIFJlY29yZCB0aGlzLAorICAg
ICAgICAgICAgLy8gc28gdGhhdCB0aGUgc3BlY3VsYXRpdmUgSklUIGtub3dzIHRoYXQgd2UgZmFp
bGVkIHNwZWN1bGF0aW9uCisgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGEgbmVnYXRpdmUgemVy
by4KKyAgICAgICAgICAgIGFkZDMyKEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJm1fY29kZUJs
b2NrLT5hZGRTcGVjaWFsRmFzdENhc2VQcm9maWxlKG1fYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50
ZXIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHJlZ1QyLCByZWdUMCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hNdWwzMihPdmVyZmxvdywgcmVn
VDEsIHJlZ1QwKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywg
cmVnVDApKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoTXVs
MzIoT3ZlcmZsb3csIHJlZ1QxLCByZWdUMCkpOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDApKTsKKyNlbmRpZgogICAgIH0KICAgICBlbWl0RmFzdEFyaXRoSW50
VG9JbW1Ob0NoZWNrKHJlZ1QwLCByZWdUMCk7CiB9CkBAIC04ODcsNiArOTEzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJyZQogICAgIE9wZXJhbmRUeXBlcyB0eXBl
cyA9IE9wZXJhbmRUeXBlczo6ZnJvbUludChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
KTsKIAogICAgIGlmICghdHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkgfHwgIXR5cGVzLnNl
Y29uZCgpLm1pZ2h0QmVOdW1iZXIoKSkgeworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfYWRkKTsKICAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQob3AxLCByZWdUMik7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KG9wMiwgcmVnVDIpOwpAQCAtOTE3LDggKzk0NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
YWRkKEluc3RydWN0aW9uKiBjCiAgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBPcGVyYW5kVHlwZXM6OmZy
b21JbnQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CiAKLSAgICBpZiAoIXR5cGVz
LmZpcnN0KCkubWlnaHRCZU51bWJlcigpIHx8ICF0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVtYmVy
KCkpCisgICAgaWYgKCF0eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1iZXIoKSB8fCAhdHlwZXMuc2Vj
b25kKCkubWlnaHRCZU51bWJlcigpKSB7CisgICAgICAgIGxpbmtEdW1teVNsb3dDYXNlKGl0ZXIp
OwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgYm9vbCBvcDFIYXNJbW1lZGlhdGVJbnRG
YXN0Q2FzZSA9IGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSk7CiAgICAgYm9vbCBv
cDJIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSA9ICFvcDFIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSAm
JiBpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDk1NDAxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5OSw2ICsyOTksMTQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoSnVtcAogICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wVmVj
dG9yW2ldLCBtX2J5dGVjb2RlT2Zmc2V0KSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWdu
ZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAg
ICAKKyAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5k
b3dzIGhhcHB5LgorICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVt
cCwgbV9ieXRlY29kZU9mZnNldCkpOworfQorCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRK
dW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQogewogICAgIEFTU0VSVChtX2J5dGVj
b2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVPZmZzZXQgaXMgc2V0Lgo=
</data>
<flag name="review"
          id="104729"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>