<?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>20175</bug_id>
          
          <creation_ts>2008-07-25 16:20:47 -0700</creation_ts>
          <short_desc>Fixes for Windows and non-AllInOne file build with SamplingTool, plus review fixes.</short_desc>
          <delta_ts>2008-07-30 10:40:52 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>86975</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-25 16:20:47 -0700</bug_when>
    <thetext>patch following.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86977</commentid>
    <comment_count>1</comment_count>
      <attachid>22485</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-25 16:35:22 -0700</bug_when>
    <thetext>Created attachment 22485
patch

I think this should fix the issues for the last patch ( https://bugs.webkit.org/show_bug.cgi?id=19865 ).

I hope adding ENABLE_SAMPLING_TOOL to config.h (defaulted to off, of course) looks sensible – it ensures the switch is made available in all .cpps compiled, and makes enabling the tool nice and straightforward.

WebKit tests pass, jsc built and tested on windows, no degradation on SunSpider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86978</commentid>
    <comment_count>2</comment_count>
      <attachid>22486</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-25 16:37:30 -0700</bug_when>
    <thetext>Created attachment 22486
SunSpider results (no degradation)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86980</commentid>
    <comment_count>3</comment_count>
      <attachid>22487</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-25 17:04:31 -0700</bug_when>
    <thetext>Created attachment 22487
minor fix - add missing padding for DUMP_OPCODE_STATS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87013</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-26 17:53:56 -0700</bug_when>
    <thetext>Two quick notes:

(1) Capability on Windows – the sampler is functional on windows, though faces one limitation – windows appears to be restricted to a 60hz clock, limiting the number of samples produced.  Setting the sampler to a 60hz sample frequency on OS X produces very similar results to those generated on Windows – both being proportional to high frequency sampling results taken on OS X.

(2) The sampler works fine within safari – it is just a question of hooking up the same init/destruct code, as in Shell.cpp  (however I plan on doing this in a separate patch).  A convenient point to do this was the web inspector – as a quick way of testing this I modified the inspector such that when ENABLE_SAMPLING_TOOL is set, the profiling controls in the inspector start/stop the sampling tool, instead.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87020</commentid>
    <comment_count>5</comment_count>
      <attachid>22487</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-07-26 20:06:35 -0700</bug_when>
    <thetext>Comment on attachment 22487
minor fix - add missing padding for DUMP_OPCODE_STATS

-#include &quot;JSClassRef.h&quot;
+#include &quot;API/JSClassRef.h&quot;

r35310 should have made this unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87101</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-27 20:57:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; r35310 should have made this unnecessary.

cheers Adam, will revert this file and retest.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87102</commentid>
    <comment_count>7</comment_count>
      <attachid>22514</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-27 21:37:04 -0700</bug_when>
    <thetext>Created attachment 22514
Alternative patch - single build version.

Geoff,

As a Sunday afternoon project I&apos;ve taken another swing at a version of the sampler that does not require a separate build – I&apos;ve not marked this as obsoleting the previous patch in case you don&apos;t like this idea and would prefer I stuck with the previous version, but I hope this does look good.

The patch makes the sampler always available without impacting on performance when not in use.  Introducing a new bytecode op_sample opcode resulted in a minor regression, so I&apos;ve use a form of op_debug for the sampling hook.

The presence of the SamplingTool::dump code to print results degrades performance (I&apos;m guessing I&apos;m getting unlucky, and the larger ro_data section for the strings is shuffling the binary around – just including the array of opcode names is enough to give a minor hit), so I&apos;ve left this compiled out by default on a switch ENABLE(SAMPLING_TOOL_DUMP).  With or without the dump code there are two new methods available - SamplingTool::getScopeSampleRecords and ScopeSampleRecord::getLineCounts - to extract results from the sampler.

By default the tool uses the op_debug/DoSample method to trigger sampling, planting a hook at the beginning of every line of javascript source-code – but an I&apos;ve left a compile option ENABLE(SAMPLING_TOOL_ALWAYS) to allow the sampler to operate as it currently does.  Enabling the switch results a lower cost per-event, but it updates state every bytecode rather than for every line in the JS sourcecode – and as a result the two mechanisms have about the same overhead – setting ENABLE(SAMPLING_TOOL_ALWAYS) giving us a higher precision mechanism at the cost of requiring a special build (and likely only useful to us, since end users should not care which bytecode op a sample is falling on).

Hope this look good to you,
cheers, G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87320</commentid>
    <comment_count>8</comment_count>
      <attachid>22487</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-07-29 14:43:26 -0700</bug_when>
    <thetext>Comment on attachment 22487
minor fix - add missing padding for DUMP_OPCODE_STATS

+// Set to 1 to enable the sampler, SamplingTool.
+#define ENABLE_SAMPLING_TOOL 0

It&apos;s best to put #defines like this in wtf/Platform.h, rather than config.h. config.h is just there for crazy header hacks -- for example, the MSVC rand_s hack.

--- JavaScriptCore/VM/SamplingTool.cpp	(revision 0)
+++ JavaScriptCore/VM/SamplingTool.cpp	(revision 0)

I think this means that SamplingTool.cpp made its way into the project through a local filesystem copy, followed by an &quot;svn add.&quot; It&apos;s better to use &quot;svn cp Opcode.h SamplingTool.cpp,&quot; because the latter will preserve the history of your original commits within the new source file.

+    class SamplingTool
+    {

Our style guidelines call for the &quot;{&quot; in a class declaration to go on the same line as the declaration, as in &quot;class SamplingTool {.&quot;

r=me -- great improvements!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87338</commentid>
    <comment_count>9</comment_count>
      <attachid>22514</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-07-29 16:35:19 -0700</bug_when>
    <thetext>Comment on attachment 22514
Alternative patch - single build version.

There&apos;s a lot of overlap between attachment 22487, which fixes a bug and does some cleanup, and this patch, which does those things and also adds two new features: per-line sampling, and sampling built in without a special binary.

I&apos;d recommend landing attachment 22487 first. Then, it will be easier discuss the specifics of a patch that just implements per-line sampling without a special binary (probably worth a separate bug report).

Generally, the DoSample opcode code in this patch looks sound. I&apos;m surprised that the extra branches for callingHostFunction are not costly in the non-sampling case, but oh well :).

I don&apos;t really think &quot;ENABLE_SAMPLING_TOOL_ALWAYS&quot; captures the difference between these two modes well. One mode samples each opcode, to show VM engineers what&apos;s hot in the engine; the other mode samples each source line, to show webpage engineers what&apos;s hot in their JavaScript. At least, that&apos;s how I think of it. Do you think of per-line sampling as a feature for VM engineers?

To be fully viable, I think this second mode -- the per-line mode -- would need to solve three more problems:

(1) Dynamically recompile functions that were compiled before sampling started, so they get sampled, too. (The current user-visible profiler is able to profile a page without reloading it, so the per-line profiler would need to match that ability.)

(2) Remove the existing JavaScript profiler hooks and / or merge with them, to provide a consistent JavaScriptCore API to the Web Inspector. (This will also be a ~1% performance win.)

(3) Web Inspector UI for per-line profiles. Tim Hatcher, Kevin McCullough, and Adam Roben are the experts on this.

I&apos;m going to clear the review flag, since I think attachment 22487 should land first, and the tasks I&apos;ve outlined here are pretty beefy, deserving their own bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87390</commentid>
    <comment_count>10</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-30 08:54:54 -0700</bug_when>
    <thetext>(In reply to comment #9)

Sounds good, raising new bug for the second patch &amp; copying your comments there.

G.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87399</commentid>
    <comment_count>11</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-30 10:39:33 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/GNUmakefile.am
Sending        JavaScriptCore/JavaScriptCore.exp
Sending        JavaScriptCore/JavaScriptCore.pri
Sending        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
Sending        JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Sending        JavaScriptCore/JavaScriptCoreSources.bkl
Sending        JavaScriptCore/VM/Machine.cpp
Sending        JavaScriptCore/VM/Machine.h
Sending        JavaScriptCore/VM/Opcode.cpp
Sending        JavaScriptCore/VM/Opcode.h
Adding         JavaScriptCore/VM/SamplingTool.cpp
Adding         JavaScriptCore/VM/SamplingTool.h
Sending        JavaScriptCore/kjs/Shell.cpp
Sending        JavaScriptCore/kjs/nodes.cpp
Sending        JavaScriptCore/wtf/Platform.h
Transmitting file data ................
Committed revision 35454.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87400</commentid>
    <comment_count>12</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-30 10:40:52 -0700</bug_when>
    <thetext>Per line sampler work will be moved to:

https://bugs.webkit.org/show_bug.cgi?id=20228</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22485</attachid>
            <date>2008-07-25 16:35:22 -0700</date>
            <delta_ts>2008-07-25 17:04:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_multi_ball.012.txt</filename>
            <type>text/plain</type>
            <size>45101</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM1MzU4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDgtMDctMjUgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzIGZvciBXaW5kb3dzIGFuZCBub24tQWxs
SW5PbmUgZmlsZSBidWlsZCB3aXRoIFNhbXBsaW5nVG9vbCwgcGx1cyByZXZpZXcgZml4ZXMuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogICAgICAgICAgICAgIEFkZGluZyBTYW1wbGluZ1Rv
b2wuY3BwIHRvIGJ1aWxkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogICAgICAgICAg
RXhwb3J0IGhvb2tzIHRvIGluaXQgJiBjb250cm9sIFNhbXBsaW5nVG9vbC4KKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS5wcmk6ICAgICAgICAgIEFkZGluZyBTYW1wbGluZ1Rvb2wuY3BwIHRvIGJ1
aWxkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2o6IEFkZGluZyBTYW1wbGluZ1Rvb2wuY3BwIHRvIGJ1aWxkLgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGluZyBT
YW1wbGluZ1Rvb2wuY3BwIHRvIGJ1aWxkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlU291cmNl
cy5ia2w6ICAgQWRkaW5nIFNhbXBsaW5nVG9vbC5jcHAgdG8gYnVpbGQuCisgICAgICAgICogVk0v
TWFjaGluZS5jcHA6ICAgICAgICAgICAgICBNQUNISU5FX1NBTVBMSU5HX2NhbGxpbmdOYXRpdmVG
dW5jdGlvbiByZW5hbWVkIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbgorICAg
ICAgICAqIFZNL01hY2hpbmUuaDoKKyAgICAgICAgKiBWTS9PcGNvZGUuY3BwOiAgICAgICAgICAg
ICAgIFNhbXBsaW5nVG9vbCBtb3ZlZCB0byBTYW1wbGluZ1Rvb2wuY3BwLy5oLCBvcGNvZGVOYW1l
cyBnZW5lcmF0ZWQgZnJvbSBGT1JfRUFDSF9PUENPREVfSUQuCisgICAgICAgICogVk0vT3Bjb2Rl
Lmg6CisgICAgICAgICogVk0vU2FtcGxpbmdUb29sLmNwcDogICAgICAgICBBZGRlZCAuY3BwLy5o
IGZvciBTYW1wbGluZ1Rvb2wuCisgICAgICAgICogVk0vU2FtcGxpbmdUb29sLmg6CisgICAgICAg
ICoga2pzL0pTR2xvYmFsRGF0YS5jcHA6ICAgICAgICBGaXhlZCBtaXNzaW5nICJBUEkvIiBmb3Ig
d2luZG93cyBidWlsZC4KKyAgICAgICAgKiBranMvU2hlbGwuY3BwOiAgICAgICAgICAgICAgIFN3
aXRjaGVkIFNBTVBMSU5HX1RPT0xfRU5BQkxFRCB0byBFTkFCTEVfU0FNUExJTkdfVE9PTC4KKyAg
ICAgICAgKiBranMvY29uZmlnLmg6ICAgICAgICAgICAgICAgIEFkZGVkIEVOQUJMRV9TQU1QTElO
R19UT09MIGNvbmZpZyBvcHRpb24uCisgICAgICAgICoga2pzL25vZGVzLmNwcDogICAgICAgICAg
ICAgICBIZWFkZXIgaW5jbHVkZSB0byBmaXggbm9uLUFsbEluT25lIGJ1aWxkcy4KKwogMjAwOC0w
Ny0yNSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBi
dWlsZCBmaXgKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNTM1OCkKKysrIEph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL1ZNL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcCBc
CiAJSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvVk0vU2Ft
cGxpbmdUb29sLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2NvbXBpbGUuY3BwIFwK
IAlKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfZXhlYy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3Bj
cmUvcGNyZV90YWJsZXMuY3BwIFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJl
dmlzaW9uIDM1MzU4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDkgQEAgX19aTjNLSlMxMkpTR2xvYmFsRGF0YTE0c2hh
cmVkSW5zdGFuY2VFdgogX19aTjNLSlMxMkpTR2xvYmFsRGF0YTZjcmVhdGVFdgogX19aTjNLSlMx
MkpTR2xvYmFsRGF0YUQxRXYKIF9fWk4zS0pTMTJQcm9wZXJ0eVNsb3QxNXVuZGVmaW5lZEdldHRl
ckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSS1MwXworX19aTjNLSlMxMlNhbXBs
aW5nVG9vbDRkdW1wRVBOU185RXhlY1N0YXRlRQorX19aTjNLSlMxMlNhbXBsaW5nVG9vbDRzdG9w
RXYKK19fWk4zS0pTMTJTYW1wbGluZ1Rvb2w1c3RhcnRFagogX19aTjNLSlMxMlN0cmluZ09iamVj
dDE0ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pO
M0tKUzEyU3RyaW5nT2JqZWN0MTR0b1RoaXNKU1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4z
S0pTMTJTdHJpbmdPYmplY3QxNmdldFByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3
UHJvcGVydHlOYW1lQXJyYXlFCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCShyZXZp
c2lvbiAzNTM1OCkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBWTS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmNwcCBcCiAgICAgVk0vTWFjaGluZS5jcHAgXAogICAgIFZNL09wY29kZS5j
cHAgXAorICAgIFZNL1NhbXBsaW5nVG9vbC5jcHAgXAogICAgIFZNL1JlZ2lzdGVyRmlsZS5jcHAK
IAogIyBBbGxJbk9uZUZpbGUuY3BwIGhlbHBzIGdjYyBhbmFsaXplIGFuZCBvcHRpbWl6ZSBjb2Rl
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wJKHJldmlzaW9u
IDM1MzU4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAkod29y
a2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0Myw3IEBAIFNvdXJjZSBmaWxlcyBmb3IgSlNDb3JlLgog
ICAgICAgICBWTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAogICAgICAgICBWTS9NYWNoaW5l
LmNwcAogICAgICAgICBWTS9PcGNvZGUuY3BwCisgICAgICAgIFZNL1NhbXBsaW5nVG9vbC5jcHAK
ICAgICAgICAgVk0vUmVnaXN0ZXJGaWxlLmNwcAogICAgIDwvc2V0PgogICAgIDxzZXQgYXBwZW5k
PSIxIiB2YXI9IkpTQ09SRV9XVEZfU09VUkNFUyI+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDM1MzU4KQorKysgSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI2Miw2ICsxMjYyLDE0IEBACiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFZNXFNhbXBs
aW5nVG9vbC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxWTVxTYW1wbGluZ1Rvb2wuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFZNXFJlZ2lzdGVyLmgiDQogCQkJCT4N
CiAJCQk8L0ZpbGU+DQpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNTM1OCkKKysrIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDggQEAKIAkJNjU5MTI2QkQwQkREMTcyODAwMTkyMUZC
IC8qIEFsbEluT25lRmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NTkxMjZCQzBCREQxNzI4MDAxOTIxRkIgLyogQWxsSW5PbmVGaWxlLmNwcCAq
LzsgfTsKIAkJNjVERkM5MzMwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGQzkyRDA4RUExNzNB
MDBGNzMwMEIgLyogSGFzaFRhYmxlLmNwcCAqLzsgfTsKIAkJNjVGREU0OUMwQkREMUQ0QTAwRTgw
MTExIC8qIEFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVFMjE3QjgwOEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuY3BwICov
OyB9OworCQk4NjEzRjQ1QTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MTNGNDU4MEUzQTQz
M0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuY3BwICovOyB9OworCQk4NjEzRjQ1QjBFM0E0MzNF
MDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjEzRjQ1OTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdUb29s
LmggKi87IH07CiAJCTkwNUIwMkFFMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVha0Nv
dW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTA1QjAyQUQwRTI4NjQwRjAwNkRGODgyIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgKi87
IH07CiAJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDM0NjlC
MEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA3NTRDMTA4QjBGNjgwMDBB
QjMwNTYgLyogcGNyZV9jb21waWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMDc1NEJGMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUu
Y3BwICovOyB9OwpAQCAtNTU1LDYgKzU1Nyw4IEBACiAJCTY1RkIzRjQ4MDlEMTFCMjQwMEY0OURF
QiAvKiBncmFtbWFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBn
cmFtbWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2
RDAwM0RCRUQ5IC8qIEJvb2xlYW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm9vbGVhbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBT
Y29wZUNoYWluTWFyay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZUNo
YWluTWFyay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjEzRjQ1ODBFM0E0MzNF
MDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFNhbXBsaW5nVG9vbC5jcHA7IHBhdGggPSBWTS9TYW1wbGluZ1Rvb2wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjEzRjQ1OTBFM0E0MzNFMDBDOTQ4RkQgLyog
U2FtcGxpbmdUb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNhbXBsaW5n
VG9vbC5oOyBwYXRoID0gVk0vU2FtcGxpbmdUb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkwNUIwMkFEMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmQ291bnRlZExlYWtD
b3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTBEMzQ2OUIwRTI4NTI4
MDAwOTQ5MkVFIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWZDb3VudGVkTGVha0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8qIE93blB0ci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25QdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTk1OSw2ICs5NjMsOCBAQAogCQkxNDlCMTVFMDBEODFGODhEMDA5Q0I4QzcgLyog
dm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTg2MTNG
NDU4MEUzQTQzM0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuY3BwICovLAorCQkJCTg2MTNGNDU5
MEUzQTQzM0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuaCAqLywKIAkJCQkxNDlCMUE5RTBEODZF
RDczMDA5Q0I4QzcgLyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQkxNDlCMUE5RDBEODZFRDczMDA5
Q0I4QzcgLyogQ29kZUJsb2NrLmggKi8sCiAJCQkJQTcyNzAxQjQwREFERTk0OTAwRTU0OEQ3IC8q
IEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovLApAQCAtMTUwNCw2ICsxNTEwLDcgQEAKIAkJCQlCQzc1
NkZDOTBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRjYwNTE0MEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NUZERkExNjBFMjI5OTk4MDAwNkZCMDAgLyogSGVhdnlQcm9maWxlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk4NjEzRjQ1QjBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdU
b29sLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MDcsNiArMTgxNCw3IEBACiAJCQkJOTVDRDQ1NzYw
RTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTVGREZBMTQwRTIyOTk4RjAwMDZGQjAwIC8qIEhlYXZ5UHJvZmlsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MDVCMDJBRTBFMjg2NDBGMDA2REY4ODIgLyogUmVmQ291bnRlZExlYWtDb3Vu
dGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg2MTNGNDVBMEUzQTQzM0UwMEM5NDhGRCAvKiBT
YW1wbGluZ1Rvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9N
YWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAko
cmV2aXNpb24gMzUzNTgpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImNvbGxlY3Rvci5oIgogI2luY2x1
ZGUgImRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAib3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlNhbXBs
aW5nVG9vbC5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpZiBIQVZFKFNZU19USU1FX0gpCkBA
IC00NzMsMTIgKzQ3NCw4IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBNYWNoaW5lOjpjYWxsRXZh
bCgKIH0KIAogTWFjaGluZTo6TWFjaGluZSgpCi0gICAgOgotI2lmIFNBTVBMSU5HX1RPT0xfRU5B
QkxFRAotICAgICAgbV9zYW1wbGVyKDApLAotI2Vsc2UKLSAgICAgIG1fcmVlbnRyeURlcHRoKDAp
Ci0jZW5kaWYKKyAgICA6IG1fc2FtcGxlcigwKQorICAgICwgbV9yZWVudHJ5RGVwdGgoMCkKICAg
ICAsIG1fdGltZW91dFRpbWUoMCkKICAgICAsIG1fdGltZUF0TGFzdENoZWNrVGltZW91dCgwKQog
ICAgICwgbV90aW1lRXhlY3V0aW5nKDApCkBAIC0yMzcyLDcgKzIzNjksNyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICBKU1ZhbHVlKiB0aGlz
VmFsdWUgPSB0aGlzVmFsID09IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkgPyBleGVjLT5nbG9i
YWxUaGlzVmFsdWUoKSA6IHJbdGhpc1ZhbF0uanNWYWx1ZShleGVjKTsKICAgICAgICAgICAgIEFy
Z0xpc3QgYXJncyhyICsgZmlyc3RBcmcgKyAxLCBhcmdDb3VudCAtIDEpOwogCi0gICAgICAgICAg
ICBNQUNISU5FX1NBTVBMSU5HX2NhbGxpbmdOYXRpdmVGdW5jdGlvbigpOworICAgICAgICAgICAg
TUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0aW9uKCk7CiAKICAgICAgICAgICAgIEpT
VmFsdWUqIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4odiksIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAgICAgICAgICBWTV9D
SEVDS19FWENFUFRJT04oKTsKQEAgLTI0OTksNiArMjQ5Niw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGV4ZWMsIGNvbnN0cnVjdG9yKTsKIAogICAgICAgICAg
ICAgQXJnTGlzdCBhcmdzKHIgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7CisKKyAgICAg
ICAgICAgIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbigpOworCiAgICAgICAg
ICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdzKTsKIAogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCShyZXZpc2lvbiAzNTM1OCkKKysrIEphdmFTY3Jp
cHRDb3JlL1ZNL01hY2hpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBjbGFzcyBQcm9ncmFtTm9kZTsKICAgICBjbGFzcyBSZWdpc3RlcjsK
ICAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKKyAgICBjbGFzcyBTYW1wbGluZ1Rvb2w7CiAKICAg
ICBlbnVtIERlYnVnSG9va0lEIHsKICAgICAgICAgV2lsbEV4ZWN1dGVQcm9ncmFtLApAQCAtMTE5
LDEwICsxMjAsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIG1fdGltZW91dFRpbWUg
PSAwOwogICAgICAgICAgICAgbV90aW1lb3V0Q2hlY2tDb3VudCA9IDA7CiAgICAgICAgIH0KLSAg
ICAgICAgCi0jaWYgU0FNUExJTkdfVE9PTF9FTkFCTEVECisKICAgICAgICAgU2FtcGxpbmdUb29s
KiBtX3NhbXBsZXI7Ci0jZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gRXhlY3V0
aW9uRmxhZyB7IE5vcm1hbCwgSW5pdGlhbGl6ZUFuZFJldHVybiB9OwpJbmRleDogSmF2YVNjcmlw
dENvcmUvVk0vT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9PcGNv
ZGUuY3BwCShyZXZpc2lvbiAzNTM1OCkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL09wY29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDMyNCArMzAsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJPcGNvZGUuaCIKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgotI2luY2x1ZGUgIk1hY2hpbmUuaCIKLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIEtKUyB7CiAKLSNpZiBTQU1QTElOR19UT09MX0VOQUJMRUQgfHwgRFVNUF9P
UENPREVfU1RBVFMKLQotc3RhdGljIGNvbnN0IGNoYXIqIG9wY29kZU5hbWVzW10gPSB7Ci0gICAg
ImxvYWQgICAgICAgICAgICAgIiwKLSAgICAibmV3X29iamVjdCAgICAgICAiLAotICAgICJuZXdf
YXJyYXkgICAgICAgICIsCi0gICAgIm5ld19yZWdleHAgICAgICAgIiwKLSAgICAibW92ICAgICAg
ICAgICAgICAiLAotICAgIAotICAgICJub3QgICAgICAgICAgICAgICIsCi0gICAgImVxICAgICAg
ICAgICAgICAgIiwKLSAgICAibmVxICAgICAgICAgICAgICAiLAotICAgICJzdHJpY3RlcSAgICAg
ICAgICIsCi0gICAgIm5zdHJpY3RlcSAgICAgICAgIiwKLSAgICAibGVzcyAgICAgICAgICAgICAi
LAotICAgICJsZXNzZXEgICAgICAgICAgICIsCi0gICAgCi0gICAgInByZV9pbmMgICAgICAgICAg
IiwKLSAgICAicHJlX2RlYyAgICAgICAgICAiLAotICAgICJwb3N0X2luYyAgICAgICAgICIsCi0g
ICAgInBvc3RfZGVjICAgICAgICAgIiwKLSAgICAidG9fanNudW1iZXIgICAgICAiLAotICAgICJu
ZWdhdGUgICAgICAgICAgICIsCi0gICAgImFkZCAgICAgICAgICAgICAgIiwKLSAgICAibXVsICAg
ICAgICAgICAgICAiLAotICAgICJkaXYgICAgICAgICAgICAgICIsCi0gICAgIm1vZCAgICAgICAg
ICAgICAgIiwKLSAgICAic3ViICAgICAgICAgICAgICAiLAotICAgIAotICAgICJsc2hpZnQgICAg
ICAgICAgICIsCi0gICAgInJzaGlmdCAgICAgICAgICAgIiwKLSAgICAidXJzaGlmdCAgICAgICAg
ICAiLAotICAgICJiaXRhbmQgICAgICAgICAgICIsCi0gICAgImJpdHhvciAgICAgICAgICAgIiwK
LSAgICAiYml0b3IgICAgICAgICAgICAiLAotICAgICJiaXRub3QgICAgICAgICAgICIsCi0gICAg
Ci0gICAgImluc3RhbmNlb2YgICAgICAgIiwKLSAgICAidHlwZW9mICAgICAgICAgICAiLAotICAg
ICJpbiAgICAgICAgICAgICAgICIsCi0KLSAgICAicmVzb2x2ZSAgICAgICAgICAiLAotICAgICJy
ZXNvbHZlX3NraXAgICAgICIsCi0gICAgImdldF9zY29wZWRfdmFyICAgIiwKLSAgICAicHV0X3Nj
b3BlZF92YXIgICAiLAotICAgICJyZXNvbHZlX2Jhc2UgICAgICIsCi0gICAgInJlc29sdmVfd2l0
aF9iYXNlIiwKLSAgICAicmVzb2x2ZV9mdW5jICAgICAiLAotICAgICJnZXRfYnlfaWQgICAgICAg
ICIsCi0gICAgInB1dF9ieV9pZCAgICAgICAgIiwKLSAgICAiZGVsX2J5X2lkICAgICAgICAiLAot
ICAgICJnZXRfYnlfdmFsICAgICAgICIsCi0gICAgInB1dF9ieV92YWwgICAgICAgIiwKLSAgICAi
ZGVsX2J5X3ZhbCAgICAgICAiLAotICAgICJwdXRfYnlfaW5kZXggICAgICIsCi0gICAgInB1dF9n
ZXR0ZXIgICAgICAgIiwKLSAgICAicHV0X3NldHRlciAgICAgICAiLAotCi0gICAgImptcCAgICAg
ICAgICAgICAgIiwKLSAgICAianRydWUgICAgICAgICAgICAiLAotICAgICJqZmFsc2UgICAgICAg
ICAgICIsCi0gICAgImpsZXNzICAgICAgICAgICAgIiwKLSAgICAiam5sZXNzICAgICAgICAgICAi
LAotICAgICJqbXBfc2NvcGVzICAgICAgICIsCi0gICAgImxvb3AgICAgICAgICAgICAgIiwKLSAg
ICAibG9vcF9pZl90cnVlICAgICAiLAotICAgICJsb29wX2lmX2xlc3MgICAgICIsCi0gICAgInN3
aXRjaF9pbW0gICAgICAgIiwKLSAgICAic3dpdGNoX2NoYXIgICAgICAiLAotICAgICJzd2l0Y2hf
c3RyaW5nICAgICIsCi0KLSAgICAibmV3X2Z1bmMgICAgICAgICAiLAotICAgICJuZXdfZnVuY19l
eHAgICAgICIsCi0gICAgImNhbGwgICAgICAgICAgICAgIiwKLSAgICAiY2FsbF9ldmFsICAgICAg
ICAiLAotICAgICJyZXQgICAgICAgICAgICAgICIsCi0KLSAgICAiY29uc3RydWN0ICAgICAgICAi
LAotCi0gICAgImdldF9wbmFtZXMgICAgICAgIiwKLSAgICAibmV4dF9wbmFtZSAgICAgICAiLAot
Ci0gICAgInB1c2hfc2NvcGUgICAgICAgIiwKLSAgICAicG9wX3Njb3BlICAgICAgICAiLAotCi0g
ICAgImNhdGNoICAgICAgICAgICAgIiwKLSAgICAidGhyb3cgICAgICAgICAgICAiLAotICAgICJu
ZXdfZXJyb3IgICAgICAgICIsCi0KLSAgICAianNyICAgICAgICAgICAgICAiLAotICAgICJzcmV0
ICAgICAgICAgICAgICIsCi0KLSAgICAiZGVidWcgICAgICAgICAgICAiLAotCi0gICAgImVuZCAg
ICAgICAgICAgICAgIgotfTsKLQotI2VuZGlmCi0KLSNpZiBTQU1QTElOR19UT09MX0VOQUJMRUQK
LQotdm9pZCBTY29wZVNhbXBsZVJlY29yZDo6c2FtcGxlKENvZGVCbG9jayogY29kZUJsb2NrLCBJ
bnN0cnVjdGlvbiogdlBDKQotewotICAgIG1fdG90YWxDb3VudCsrOwotCi0gICAgaWYgKCFtX3Zw
Y0NvdW50cykgewotICAgICAgICBtX3NpemUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5zaXpl
KCk7Ci0gICAgICAgIG1fdnBjQ291bnRzID0gc3RhdGljX2Nhc3Q8aW50Kj4oY2FsbG9jKG1fc2l6
ZSwgc2l6ZW9mKGludCkpKTsKLSAgICAgICAgbV9jb2RlQmxvY2sgPSBjb2RlQmxvY2s7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgY29kZU9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWlu
dGVycHJldF9jYXN0PHB0cmRpZmZfdD4odlBDKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90
Pihjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpKSkgLyBzaXplb2YoSW5zdHJ1Y3Rpb24q
KTsKLSAgICAvLyBUaGlzIGNvdWxkIG9jY3VyIGlmIGNvZGVCbG9jayAmIHZQQyBhcmUgbm90IGNv
bnNpc3RlbnQgLSBlLmcuIHNhbXBsZSBtaWQgb3BfY2FsbC9vcF9yZXQuCi0gICAgaWYgKGNvZGVP
ZmZzZXQgPCBtX3NpemUpCi0gICAgICAgIG1fdnBjQ291bnRzW2NvZGVPZmZzZXRdKys7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaGVydHoydXModW5zaWduZWQgaGVydHopCi17Ci0gICAg
cmV0dXJuIDEwMDAwMDAgLyBoZXJ0ejsKLX0KLQotdm9pZCBTYW1wbGluZ1Rvb2w6OnJ1bigpCi17
Ci0gICAgd2hpbGUgKG1fcnVubmluZykgewotICAgICAgICB1c2xlZXAoaGVydHoydXMobV9oZXJ0
eikpOwotCi0gICAgICAgIG1fdG90YWxTYW1wbGVzKys7Ci0KLSAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX3JlY29yZGVkQ29kZUJsb2NrOwotICAgICAgICBJbnN0cnVjdGlvbiogdlBD
ID0gbV9yZWNvcmRlZFZQQzsKLQotICAgICAgICBpZiAoY29kZUJsb2NrICYmIHZQQykgewotICAg
ICAgICAgICAgU2NvcGVTYW1wbGVSZWNvcmQqIHJlY29yZCA9IG1fc2NvcGVTYW1wbGVNYXAtPmdl
dChjb2RlQmxvY2stPm93bmVyTm9kZSk7Ci0gICAgICAgICAgICBpZiAocmVjb3JkKQotICAgICAg
ICAgICAgICAgIHJlY29yZC0+c2FtcGxlKGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCogU2FtcGxpbmdUb29sOjp0aHJlYWRTdGFydEZ1bmModm9pZCogc2FtcGxp
bmdUb29sKQotewotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2FtcGxpbmdUb29sKj4oc2FtcGxpbmdU
b29sKS0+cnVuKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU2FtcGxpbmdUb29sOjpub3Rp
ZnlPZlNjb3BlKFNjb3BlTm9kZSogc2NvcGUpCi17Ci0gICAgbV9zY29wZVNhbXBsZU1hcC0+c2V0
KHNjb3BlLCBuZXcgU2NvcGVTYW1wbGVSZWNvcmQoc2NvcGUpKTsKLX0KLQotdm9pZCBTYW1wbGlu
Z1Rvb2w6OnN0YXJ0KHVuc2lnbmVkIGhlcnR6KQotewotICAgIEFTU0VSVCghbV9ydW5uaW5nKTsK
LSAgICBtX3J1bm5pbmcgPSB0cnVlOwotICAgIG1faGVydHogPSBoZXJ0ejsKLSAgICBwdGhyZWFk
X2NyZWF0ZSgmbV9zYW1wbGluZ1RocmVhZCwgMCwgdGhyZWFkU3RhcnRGdW5jLCB0aGlzKTsKLX0K
LQotdm9pZCBTYW1wbGluZ1Rvb2w6OnN0b3AoKQotewotICAgIEFTU0VSVChtX3J1bm5pbmcpOwot
ICAgIG1fcnVubmluZyA9IGZhbHNlOwotICAgIHB0aHJlYWRfam9pbihtX3NhbXBsaW5nVGhyZWFk
LCAwKTsKLX0KLQotc3RydWN0IE9wY29kZVNhbXBsZUluZm8KLXsKLSAgICBPcGNvZGVJRCBvcGNv
ZGU7Ci0gICAgbG9uZyBsb25nIGNvdW50OwotfTsKKyNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkg
fHwgRFVNUF9PUENPREVfU1RBVFMKIAotc3RydWN0IExpbmVDb3VudEluZm8KLXsKLSAgICB1bnNp
Z25lZCBsaW5lOwotICAgIHVuc2lnbmVkIGNvdW50OworY29uc3QgY2hhciogY29uc3Qgb3Bjb2Rl
TmFtZXNbXSA9IHsKKyNkZWZpbmUgT1BDT0RFX05BTUVfRU5UUlkob3Bjb2RlKSAjb3Bjb2RlLAor
ICAgIEZPUl9FQUNIX09QQ09ERV9JRChPUENPREVfTkFNRV9FTlRSWSkKKyN1bmRlZiBPUENPREVf
TkFNRV9FTlRSWQogfTsKIAotc3RhdGljIGludCBjb21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5n
KGNvbnN0IHZvaWQqIGxlZnQsIGNvbnN0IHZvaWQqIHJpZ2h0KQotewotICAgIGNvbnN0IExpbmVD
b3VudEluZm8gKmxlZnRMaW5lQ291bnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IExpbmVDb3Vu
dEluZm8gKj4obGVmdCk7Ci0gICAgY29uc3QgTGluZUNvdW50SW5mbyAqcmlnaHRMaW5lQ291bnQg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IExpbmVDb3VudEluZm8gKj4ocmlnaHQpOwotCi0gICAg
cmV0dXJuIChsZWZ0TGluZUNvdW50LT5saW5lID4gcmlnaHRMaW5lQ291bnQtPmxpbmUpID8gMSA6
IChsZWZ0TGluZUNvdW50LT5saW5lIDwgcmlnaHRMaW5lQ291bnQtPmxpbmUpID8gLTEgOiAwOwot
fQotCi1zdGF0aWMgaW50IGNvbXBhcmVPcGNvZGVJbmRpY2VzU2FtcGxpbmcoY29uc3Qgdm9pZCog
bGVmdCwgY29uc3Qgdm9pZCogcmlnaHQpCi17Ci0gICAgY29uc3QgT3Bjb2RlU2FtcGxlSW5mbyAq
bGVmdFNhbXBsZUluZm8gPSByZWludGVycHJldF9jYXN0PGNvbnN0IE9wY29kZVNhbXBsZUluZm8g
Kj4obGVmdCk7Ci0gICAgY29uc3QgT3Bjb2RlU2FtcGxlSW5mbyAqcmlnaHRTYW1wbGVJbmZvID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBPcGNvZGVTYW1wbGVJbmZvICo+KHJpZ2h0KTsKLQotICAg
IHJldHVybiAobGVmdFNhbXBsZUluZm8tPmNvdW50IDwgcmlnaHRTYW1wbGVJbmZvLT5jb3VudCkg
PyAxIDogKGxlZnRTYW1wbGVJbmZvLT5jb3VudCA+IHJpZ2h0U2FtcGxlSW5mby0+Y291bnQpID8g
LTEgOiAwOwotfQotCi1zdGF0aWMgaW50IGNvbXBhcmVTY29wZVNhbXBsZVJlY29yZHMoY29uc3Qg
dm9pZCogbGVmdCwgY29uc3Qgdm9pZCogcmlnaHQpCi17Ci0gICAgY29uc3QgU2NvcGVTYW1wbGVS
ZWNvcmQqIGNvbnN0IGxlZnRWYWx1ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBTY29wZVNhbXBsZVJl
Y29yZCogY29uc3QgKj4obGVmdCk7Ci0gICAgY29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0
IHJpZ2h0VmFsdWUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0
ICo+KHJpZ2h0KTsKLQotICAgIHJldHVybiAobGVmdFZhbHVlLT5tX3RvdGFsQ291bnQgPCByaWdo
dFZhbHVlLT5tX3RvdGFsQ291bnQpID8gMSA6IChsZWZ0VmFsdWUtPm1fdG90YWxDb3VudCA+IHJp
Z2h0VmFsdWUtPm1fdG90YWxDb3VudCkgPyAtMSA6IDA7Ci19Ci0KLXZvaWQgU2FtcGxpbmdUb29s
OjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBUaWRpZXMgdXAgU3VuU3BpZGVyIG91
dHB1dCBieSByZW1vdmluZyBzaG9ydCBzY3JpcHRzIC0gc3VjaCBhIHNtYWxsIG51bWJlciBvZiBz
YW1wbGVzIHdvdWxkIGxpa2VseSBub3QgYmUgdXNlZnVsIGFueWhvdy4KLSAgICBpZiAobV90b3Rh
bFNhbXBsZXMgPCAxMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vICgxKSBDYWxjdWxh
dGUgJ3RvdGFsQ29kZUJsb2NrU2FtcGxlcycsIGJ1aWxkIGFuZCBzb3J0ICdjb2RlQmxvY2tTYW1w
bGVzJyBhcnJheS4KLQotICAgIGludCBzY29wZUNvdW50ID0gbV9zY29wZVNhbXBsZU1hcC0+c2l6
ZSgpOwotICAgIGxvbmcgbG9uZyB0b3RhbENvZGVCbG9ja1NhbXBsZXMgPSAwOwotICAgIFNjb3Bl
U2FtcGxlUmVjb3JkKiBjb2RlQmxvY2tTYW1wbGVzW3Njb3BlQ291bnRdOwotICAgIFNjb3BlU2Ft
cGxlUmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gbV9zY29wZVNhbXBsZU1hcC0+YmVnaW4oKTsK
LSAgICBmb3IgKGludCBpPTA7IGkgPCBzY29wZUNvdW50OyArK2ksICsraXRlcikgewotICAgICAg
ICBjb2RlQmxvY2tTYW1wbGVzW2ldID0gaXRlci0+c2Vjb25kOwotICAgICAgICB0b3RhbENvZGVC
bG9ja1NhbXBsZXMgKz0gY29kZUJsb2NrU2FtcGxlc1tpXS0+bV90b3RhbENvdW50OwotICAgIH0K
LSAgICBtZXJnZXNvcnQoY29kZUJsb2NrU2FtcGxlcywgc2NvcGVDb3VudCwgc2l6ZW9mKFNjb3Bl
U2FtcGxlUmVjb3JkKiksIGNvbXBhcmVTY29wZVNhbXBsZVJlY29yZHMpOwotCi0gICAgLy8gKDIp
IFByaW50IGRhdGEgZnJvbSAnY29kZUJsb2NrU2FtcGxlcycgYXJyYXksIGNhbGN1bGF0ZSAndG90
YWxPcGNvZGVTYW1wbGVzJywgcG9wdWxhdGUgJ29wY29kZVNhbXBsZUNvdW50cycgYXJyYXkuCi0K
LSAgICBsb25nIGxvbmcgdG90YWxPcGNvZGVTYW1wbGVzID0gMDsKLSAgICBsb25nIGxvbmcgb3Bj
b2RlU2FtcGxlQ291bnRzW251bU9wY29kZUlEc10gPSB7IDAgfTsKLQotICAgIGZwcmludGYoc3Rk
b3V0LCAiXG5CbG9jayBzYW1wbGluZyByZXN1bHRzXG5cbiIpOyAKLSAgICBmcHJpbnRmKHN0ZG91
dCwgIlRvdGFsIGJsb2NrcyBzYW1wbGVkICh0b3RhbCBzYW1wbGVzKTogJWxsZCAoJWxsZClcblxu
IiwgdG90YWxDb2RlQmxvY2tTYW1wbGVzLCBtX3RvdGFsU2FtcGxlcyk7Ci0KLSAgICBmb3IgKGlu
dCBpPTA7IGkgPCBzY29wZUNvdW50OyBpKyspIHsKLSAgICAgICAgU2NvcGVTYW1wbGVSZWNvcmQg
KnJlY29yZCA9IGNvZGVCbG9ja1NhbXBsZXNbaV07Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gcmVjb3JkLT5tX2NvZGVCbG9jazsKLQotICAgICAgICBkb3VibGUgdG90YWxQZXJjZW50
ID0gKHJlY29yZC0+bV90b3RhbENvdW50ICogMTAwLjApL21fdG90YWxTYW1wbGVzOwotICAgICAg
ICBkb3VibGUgYmxvY2tQZXJjZW50ID0gKHJlY29yZC0+bV90b3RhbENvdW50ICogMTAwLjApL3Rv
dGFsQ29kZUJsb2NrU2FtcGxlczsKLQotICAgICAgICBpZiAoKGJsb2NrUGVyY2VudCA+PSAxKSAm
JiBjb2RlQmxvY2spIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBjb2RlID0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKLSAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiIyVk
OiAlczolZDogc2FtcGxlZCAlZCB0aW1lcyAtICUuM2YlJSAoJS4zZiUlKVxuIiwgaSsxLCByZWNv
cmQtPm1fc2NvcGUtPnNvdXJjZVVSTCgpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBjb2RlQmxvY2st
PmxpbmVOdW1iZXJGb3JWUEMoY29kZSksIHJlY29yZC0+bV90b3RhbENvdW50LCBibG9ja1BlcmNl
bnQsIHRvdGFsUGVyY2VudCk7Ci0gICAgICAgICAgICBpZiAoaSA8IDEwKSB7Ci0gICAgICAgICAg
ICAgICAgSGFzaE1hcDx1bnNpZ25lZCx1bnNpZ25lZD4gbGluZUNvdW50czsKLSAgICAgICAgICAg
ICAgICBjb2RlQmxvY2stPmR1bXAoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBvcCA9IDA7IG9wIDwgcmVjb3JkLT5tX3NpemU7ICsrb3ApIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGNvdW50ID0gcmVjb3JkLT5tX3ZwY0NvdW50c1tvcF07Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjb3VudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgWyUg
NGRdIGhhcyBzYW1wbGUgY291bnQ6ICUgNGRcbiIsIG9wLCBjb3VudCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsaW5lID0gY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKGNv
ZGUrb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50cy5zZXQobGluZSwgKGxp
bmVDb3VudHMuY29udGFpbnMobGluZSkgPyBsaW5lQ291bnRzLmdldChsaW5lKSA6IDApICsgY291
bnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgICAgICBpbnQgbGluZXNDb3VudCA9IGxp
bmVDb3VudHMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIExpbmVDb3VudEluZm8gbGluZUNvdW50
SW5mb1tsaW5lc0NvdW50XTsKLSAgICAgICAgICAgICAgICBpbnQgbGluZW5vID0gMDsKLSAgICAg
ICAgICAgICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsdW5zaWduZWQ+OjppdGVyYXRvciBpdGVy
ID0gbGluZUNvdW50cy5iZWdpbigpOyBpdGVyICE9IGxpbmVDb3VudHMuZW5kKCk7ICsraXRlciwg
KytsaW5lbm8pIHsKLSAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmxp
bmUgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5l
bm9dLmNvdW50ID0gaXRlci0+c2Vjb25kOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBtZXJnZXNvcnQobGluZUNvdW50SW5mbywgbGluZXNDb3VudCwgc2l6ZW9mKExpbmVDb3Vu
dEluZm8pLCBjb21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5nKTsKLSAgICAgICAgICAgICAgICBm
b3IgKGxpbmVubyA9IDA7IGxpbmVubyA8IGxpbmVzQ291bnQ7ICsrbGluZW5vKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHByaW50ZigiICAgIExpbmUgIyVkIGhhcyBzYW1wbGUgY291bnQgJWQuXG4i
LCBsaW5lQ291bnRJbmZvW2xpbmVub10ubGluZSwgbGluZUNvdW50SW5mb1tsaW5lbm9dLmNvdW50
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocmVjb3JkLT5tX3Zw
Y0NvdW50cyAmJiBjb2RlQmxvY2spIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbnMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBvcCA9IDA7IG9wIDwgcmVjb3JkLT5tX3NpemU7ICsrb3ApIHsKLSAgICAgICAg
ICAgICAgICBPcGNvZGUgb3Bjb2RlID0gaW5zdHJ1Y3Rpb25zW29wXS51Lm9wY29kZTsKLSAgICAg
ICAgICAgICAgICBpZiAoZXhlYy0+bWFjaGluZSgpLT5pc09wY29kZShvcGNvZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRvdGFsT3Bjb2RlU2FtcGxlcyArPSByZWNvcmQtPm1fdnBjQ291bnRz
W29wXTsKLSAgICAgICAgICAgICAgICAgICAgb3Bjb2RlU2FtcGxlQ291bnRzW2V4ZWMtPm1hY2hp
bmUoKS0+Z2V0T3Bjb2RlSUQob3Bjb2RlKV0gKz0gcmVjb3JkLT5tX3ZwY0NvdW50c1tvcF07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHBy
aW50ZigiXG4iKTsKLQotICAgIC8vICgzKSBCdWlsZCBhbmQgc29ydCAnb3Bjb2RlU2FtcGxlSW5m
bycgYXJyYXkuCi0KLSAgICBPcGNvZGVTYW1wbGVJbmZvIG9wY29kZVNhbXBsZUluZm9bbnVtT3Bj
b2RlSURzXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wY29kZUlEczsgKytpKSB7Ci0g
ICAgICAgIG9wY29kZVNhbXBsZUluZm9baV0ub3Bjb2RlID0gKE9wY29kZUlEKWk7Ci0gICAgICAg
IG9wY29kZVNhbXBsZUluZm9baV0uY291bnQgPSBvcGNvZGVTYW1wbGVDb3VudHNbaV07Ci0gICAg
fQotICAgIG1lcmdlc29ydChvcGNvZGVTYW1wbGVJbmZvLCBudW1PcGNvZGVJRHMsIHNpemVvZihP
cGNvZGVTYW1wbGVJbmZvKSwgY29tcGFyZU9wY29kZUluZGljZXNTYW1wbGluZyk7Ci0KLSAgICAv
LyAoNCkgUHJpbnQgT3Bjb2RlIHNhbXBsaW5nIHJlc3VsdHMuCi0gICAgCi0gICAgZnByaW50Zihz
dGRvdXQsICJcbk9wY29kZSBzYW1wbGluZyByZXN1bHRzXG5cbiIpOyAKLSAgICAKLSAgICBmcHJp
bnRmKHN0ZG91dCwgIlRvdGFsIG9wY29kZXMgc2FtcGxlZCAodG90YWwgc2FtcGxlcyk6ICVsbGQg
KCVsbGQpXG5cbiIsIHRvdGFsT3Bjb2RlU2FtcGxlcywgbV90b3RhbFNhbXBsZXMpOwotICAgIGZw
cmludGYoc3Rkb3V0LCAiT3Bjb2RlcyBpbiBvcmRlcjpcblxuIik7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1PcGNvZGVJRHM7ICsraSkgewotICAgICAgICBsb25nIGxvbmcgY291bnQgPSBv
cGNvZGVTYW1wbGVDb3VudHNbaV07Ci0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJXM6XHQlNmxs
ZFx0JS4zZiUlXHQoJS4zZiUlKVxuIiwgb3Bjb2RlTmFtZXNbaV0sIGNvdW50LCAoKGRvdWJsZSlj
b3VudCAqIDEwMCkvdG90YWxPcGNvZGVTYW1wbGVzLCAoKGRvdWJsZSljb3VudCAqIDEwMCkvbV90
b3RhbFNhbXBsZXMpOyAgICAKLSAgICB9Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbiIpOwotICAg
IGZwcmludGYoc3Rkb3V0LCAiT3Bjb2RlcyBieSBzYW1wbGUgY291bnQ6XG5cbiIpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtT3Bjb2RlSURzOyArK2kpIHsKLSAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlID0gb3Bjb2RlU2FtcGxlSW5mb1tpXS5vcGNvZGU7Ci0gICAgICAgIGxvbmcgbG9uZyBj
b3VudCA9IG9wY29kZVNhbXBsZUluZm9baV0uY291bnQ7Ci0gICAgICAgIGZwcmludGYoc3Rkb3V0
LCAiJXM6XHQlNmxsZFx0JS4zZiUlXHQoJS4zZiUlKVxuIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlXSwg
Y291bnQsICgoZG91YmxlKWNvdW50ICogMTAwKS90b3RhbE9wY29kZVNhbXBsZXMsICgoZG91Ymxl
KWNvdW50ICogMTAwKS9tX3RvdGFsU2FtcGxlcyk7ICAgIAotICAgIH0KLSAgICBmcHJpbnRmKHN0
ZG91dCwgIlxuIik7Ci19Ci0KICNlbmRpZgogCi0KICNpZiBEVU1QX09QQ09ERV9TVEFUUwogCiBs
b25nIGxvbmcgT3Bjb2RlU3RhdHM6Om9wY29kZUNvdW50c1tudW1PcGNvZGVJRHNdOwpAQCAtNDg3
LDQgKzE4Myw0IEBAIHZvaWQgT3Bjb2RlU3RhdHM6OnJlc2V0TGFzdEluc3RydWN0aW9uKCkKIAog
I2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIFdURgorfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9W
TS9PcGNvZGUuaAkocmV2aXNpb24gMzUzNTgpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEzIEBACiAjaWZuZGVmIE9wY29kZXNfaAog
I2RlZmluZSBPcGNvZGVzX2gKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KIAogbmFtZXNwYWNlIEtKUyB7CiAKLSNkZWZpbmUgU0FNUExJTkdfVE9PTF9FTkFCTEVE
IDAKICNkZWZpbmUgRFVNUF9PUENPREVfU1RBVFMgMAogCiAgICAgI2RlZmluZSBGT1JfRUFDSF9P
UENPREVfSUQobWFjcm8pIFwKQEAgLTE0OCwxMTggKzE0OSwyNSBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICB0eXBlZGVmIE9wY29kZUlEIE9wY29kZTsKICNlbmRpZgogCi0gICAgY2xhc3MgRXhlY1N0
YXRlOwotICAgIGNsYXNzIFNjb3BlTm9kZTsKLSAgICBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgc3Ry
dWN0IEluc3RydWN0aW9uOwotCi0jaWYgU0FNUExJTkdfVE9PTF9FTkFCTEVECisjaWYgRU5BQkxF
KFNBTVBMSU5HX1RPT0wpIHx8IERVTVBfT1BDT0RFX1NUQVRTCiAKLSAgICBzdHJ1Y3QgU2NvcGVT
YW1wbGVSZWNvcmQKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxTY29wZU5vZGU+IG1fc2NvcGU7Ci0g
ICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0gICAgICAgIGludCBtX3RvdGFsQ291bnQ7
Ci0gICAgICAgIGludCogbV92cGNDb3VudHM7Ci0gICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAg
ICAgICAgCi0gICAgICAgIFNjb3BlU2FtcGxlUmVjb3JkKFNjb3BlTm9kZSogc2NvcGUpCi0gICAg
ICAgICAgICA6IG1fc2NvcGUoc2NvcGUpCi0gICAgICAgICAgICAsIG1fY29kZUJsb2NrKDApCi0g
ICAgICAgICAgICAsIG1fdG90YWxDb3VudCgwKQotICAgICAgICAgICAgLCBtX3ZwY0NvdW50cygw
KQotICAgICAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB+U2NvcGVTYW1wbGVSZWNvcmQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobV92cGNDb3VudHMpCi0gICAgICAgICAgICAgICAgZnJlZShtX3ZwY0NvdW50cyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2FtcGxlKENvZGVCbG9jayogY29kZUJsb2Nr
LCBJbnN0cnVjdGlvbiogdlBDKTsKLSAgICB9OworI2RlZmluZSBQQURESU5HX1NUUklORyAiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisjZGVmaW5lIFBBRERJTkdfU1RSSU5HX0xF
TkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RybGVuKFBBRERJTkdfU1RSSU5HKSkKIAotICAg
IHR5cGVkZWYgV1RGOjpIYXNoTWFwPFNjb3BlTm9kZSosIFNjb3BlU2FtcGxlUmVjb3JkKj4gU2Nv
cGVTYW1wbGVSZWNvcmRNYXA7CisgICAgZXh0ZXJuIGNvbnN0IGNoYXIqIGNvbnN0IG9wY29kZU5h
bWVzW107CiAKLSAgICBjbGFzcyBTYW1wbGluZ1Rvb2wKKyAgICBpbmxpbmUgY29uc3QgY2hhciog
cGFkT3Bjb2RlTmFtZShPcGNvZGVJRCBvcCwgdW5zaWduZWQgd2lkdGgpCiAgICAgewotICAgIHB1
YmxpYzoKLSAgICAgICAgU2FtcGxpbmdUb29sKCkKLSAgICAgICAgICAgIDogbV9ydW5uaW5nKGZh
bHNlKQotICAgICAgICAgICAgLCBtX3JlY29yZGVkQ29kZUJsb2NrKDApCi0gICAgICAgICAgICAs
IG1fcmVjb3JkZWRWUEMoMCkKLSAgICAgICAgICAgICwgbV90b3RhbFNhbXBsZXMoMCkKLSAgICAg
ICAgICAgICwgbV9zY29wZVNhbXBsZU1hcChuZXcgU2NvcGVTYW1wbGVSZWNvcmRNYXAoKSkKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgflNhbXBsaW5nVG9vbCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoU2NvcGVTYW1wbGVSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3Njb3BlU2FtcGxlTWFwLT5iZWdpbigpOyBpdGVyICE9IG1fc2NvcGVTYW1wbGVNYXAtPmVuZCgp
OyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgZGVsZXRlIGl0ZXItPnNlY29uZDsKLSAgICAgICAg
ICAgIGRlbGV0ZSBtX3Njb3BlU2FtcGxlTWFwOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBz
dGFydCh1bnNpZ25lZCBoZXJ0ej0xMDAwKTsKLSAgICAgICAgdm9pZCBzdG9wKCk7Ci0gICAgICAg
IHZvaWQgZHVtcChFeGVjU3RhdGUqKTsKLQotICAgICAgICB2b2lkIG5vdGlmeU9mU2NvcGUoU2Nv
cGVOb2RlKiBzY29wZSk7Ci0KLSAgICAgICAgdm9pZCBzYW1wbGUoQ29kZUJsb2NrKiByZWNvcmRl
ZENvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHJlY29yZGVkVlBDKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtX3JlY29yZGVkQ29kZUJsb2NrID0gcmVjb3JkZWRDb2RlQmxvY2s7Ci0gICAgICAgICAg
ICBtX3JlY29yZGVkVlBDID0gcmVjb3JkZWRWUEM7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IHByaXZhdGVFeGVjdXRlUmV0dXJuZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3JlY29y
ZGVkQ29kZUJsb2NrID0gMDsKLSAgICAgICAgICAgIG1fcmVjb3JkZWRWUEMgPSAwOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGNhbGxpbmdOYXRpdmVGdW5jdGlvbigpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fcmVjb3JkZWRDb2RlQmxvY2sgPSAwOwotICAgICAgICAgICAg
bV9yZWNvcmRlZFZQQyA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgc3RhdGljIHZvaWQqIHRocmVhZFN0YXJ0RnVuYyh2b2lkKik7Ci0gICAgICAgIHZvaWQg
cnVuKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBTYW1wbGluZyB0aHJlYWQgc3RhdGUuCi0gICAg
ICAgIGJvb2wgbV9ydW5uaW5nOwotICAgICAgICB1bnNpZ25lZCBtX2hlcnR6OwotICAgICAgICBw
dGhyZWFkX3QgbV9zYW1wbGluZ1RocmVhZDsKLQotICAgICAgICAvLyBTdGF0ZSB0cmFja2VkIGJ5
IHRoZSBtYWluIHRocmVhZCwgdXNlZCBieSB0aGUgc2FtcGxpbmcgdGhyZWFkLgotICAgICAgICBD
b2RlQmxvY2sqIG1fcmVjb3JkZWRDb2RlQmxvY2s7Ci0gICAgICAgIEluc3RydWN0aW9uKiBtX3Jl
Y29yZGVkVlBDOwotCi0gICAgICAgIC8vIEdhdGhlcmVkIHNhbXBsZSBkYXRhLgotICAgICAgICBs
b25nIGxvbmcgbV90b3RhbFNhbXBsZXM7Ci0gICAgICAgIFNjb3BlU2FtcGxlUmVjb3JkTWFwKiBt
X3Njb3BlU2FtcGxlTWFwOwotICAgIH07CisgICAgICAgIHVuc2lnbmVkIHBhZCA9IHdpZHRoIC0g
c3RybGVuKG9wY29kZU5hbWVzW29wXSk7CisgICAgICAgIHBhZCA9IHN0ZDo6bWluKHBhZCwgUEFE
RElOR19TVFJJTkdfTEVOR1RIKTsKKyAgICAgICAgcmV0dXJuIFBBRERJTkdfU1RSSU5HICsgUEFE
RElOR19TVFJJTkdfTEVOR1RIIC0gcGFkOworICAgIH0KIAotI2VuZGlmCisjdW5kZWYgUEFERElO
R19TVFJJTkdfTEVOR1RICisjdW5kZWYgUEFERElOR19TVFJJTkcKIAotLy8gU0NPUEVOT0RFXyAv
IE1BQ0hJTkVfIG1hY3JvcyBmb3IgdXNlIGZyb20gd2l0aGluIG1lbWJlciBtZXRob2RzIG9uIFNj
b3BlTm9kZSAvIE1hY2hpbmUgcmVzcGVjdGl2ZWx5LgotI2lmIFNBTVBMSU5HX1RPT0xfRU5BQkxF
RAotI2RlZmluZSBTQ09QRU5PREVfU0FNUExJTkdfbm90aWZ5T2ZTY29wZShzYW1wbGVyKSBzYW1w
bGVyLT5ub3RpZnlPZlNjb3BlKHRoaXMpCi0jZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfc2FtcGxl
KGNvZGVCbG9jaywgdlBDKSBtX3NhbXBsZXItPnNhbXBsZShjb2RlQmxvY2ssIHZQQykKLSNkZWZp
bmUgTUFDSElORV9TQU1QTElOR19wcml2YXRlRXhlY3V0ZVJldHVybmVkKCkgbV9zYW1wbGVyLT5w
cml2YXRlRXhlY3V0ZVJldHVybmVkKCkKLSNkZWZpbmUgTUFDSElORV9TQU1QTElOR19jYWxsaW5n
TmF0aXZlRnVuY3Rpb24oKSBtX3NhbXBsZXItPmNhbGxpbmdOYXRpdmVGdW5jdGlvbigpCi0jZWxz
ZQotI2RlZmluZSBTQ09QRU5PREVfU0FNUExJTkdfbm90aWZ5T2ZTY29wZShzYW1wbGVyKQotI2Rl
ZmluZSBNQUNISU5FX1NBTVBMSU5HX3NhbXBsZShjb2RlQmxvY2ssIHZQQykKLSNkZWZpbmUgTUFD
SElORV9TQU1QTElOR19wcml2YXRlRXhlY3V0ZVJldHVybmVkKCkKLSNkZWZpbmUgTUFDSElORV9T
QU1QTElOR19jYWxsaW5nTmF0aXZlRnVuY3Rpb24oKQogI2VuZGlmCiAKLQogI2lmIERVTVBfT1BD
T0RFX1NUQVRTCiAKICAgICBzdHJ1Y3QgT3Bjb2RlU3RhdHMgewpJbmRleDogSmF2YVNjcmlwdENv
cmUvVk0vU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9T
YW1wbGluZ1Rvb2wuY3BwCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvVk0vU2FtcGxp
bmdUb29sLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIk1hY2hpbmUuaCIKKyNpbmNsdWRlICJPcGNvZGUuaCIKKworbmFtZXNwYWNl
IEtKUyB7CisKK3ZvaWQgU2NvcGVTYW1wbGVSZWNvcmQ6OnNhbXBsZShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSW5zdHJ1Y3Rpb24qIHZQQykKK3sKKyAgICBtX3RvdGFsQ291bnQrKzsKKworICAgIGlm
ICghbV92cGNDb3VudHMpIHsKKyAgICAgICAgbV9zaXplID0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMuc2l6ZSgpOworICAgICAgICBtX3ZwY0NvdW50cyA9IHN0YXRpY19jYXN0PGludCo+KGNhbGxv
YyhtX3NpemUsIHNpemVvZihpbnQpKSk7CisgICAgICAgIG1fY29kZUJsb2NrID0gY29kZUJsb2Nr
OworICAgIH0KKworICAgIHVuc2lnbmVkIGNvZGVPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KHZQQykgLSByZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSkpIC8gc2l6ZW9mKEluc3Ry
dWN0aW9uKik7CisgICAgLy8gVGhpcyBjb3VsZCBvY2N1ciBpZiBjb2RlQmxvY2sgJiB2UEMgYXJl
IG5vdCBjb25zaXN0ZW50IC0gZS5nLiBzYW1wbGUgbWlkIG9wX2NhbGwvb3BfcmV0LgorICAgIGlm
IChjb2RlT2Zmc2V0IDwgbV9zaXplKQorICAgICAgICBtX3ZwY0NvdW50c1tjb2RlT2Zmc2V0XSsr
OworfQorCisjaWYgUExBVEZPUk0oV0lOKQorCitzdGF0aWMgdm9pZCBzbGVlcEZvck1pY3Jvc2Vj
b25kcyh1bnNpZ25lZCB1cykKK3sKKyAgICB1bnNpZ25lZCBtcyA9IHVzLzEwMDA7CisgICAgaWYg
KHVzICYmICFtcykKKyAgICAgICAgbXMgPSAxOworICAgIFNsZWVwKG1zKTsKK30KKworI2Vsc2Ug
CisKK3N0YXRpYyB2b2lkIHNsZWVwRm9yTWljcm9zZWNvbmRzKHVuc2lnbmVkIHVzKQoreworICAg
IHVzbGVlcCh1cyk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGhlcnR6
MnVzKHVuc2lnbmVkIGhlcnR6KQoreworICAgIHJldHVybiAxMDAwMDAwIC8gaGVydHo7Cit9CisK
K3ZvaWQgU2FtcGxpbmdUb29sOjpydW4oKQoreworICAgIHdoaWxlIChtX3J1bm5pbmcpIHsKKyAg
ICAgICAgc2xlZXBGb3JNaWNyb3NlY29uZHMoaGVydHoydXMobV9oZXJ0eikpOworCisgICAgICAg
IG1fdG90YWxTYW1wbGVzKys7CisKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3Jl
Y29yZGVkQ29kZUJsb2NrOworICAgICAgICBJbnN0cnVjdGlvbiogdlBDID0gbV9yZWNvcmRlZFZQ
QzsKKworICAgICAgICBpZiAoY29kZUJsb2NrICYmIHZQQykgeworICAgICAgICAgICAgaWYgKFNj
b3BlU2FtcGxlUmVjb3JkKiByZWNvcmQgPSBtX3Njb3BlU2FtcGxlTWFwLT5nZXQoY29kZUJsb2Nr
LT5vd25lck5vZGUpKQorICAgICAgICAgICAgICAgIHJlY29yZC0+c2FtcGxlKGNvZGVCbG9jaywg
dlBDKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCogU2FtcGxpbmdUb29sOjp0aHJlYWRT
dGFydEZ1bmModm9pZCogc2FtcGxpbmdUb29sKQoreworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2Ft
cGxpbmdUb29sKj4oc2FtcGxpbmdUb29sKS0+cnVuKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgU2FtcGxpbmdUb29sOjpub3RpZnlPZlNjb3BlKFNjb3BlTm9kZSogc2NvcGUpCit7CisgICAg
bV9zY29wZVNhbXBsZU1hcC0+c2V0KHNjb3BlLCBuZXcgU2NvcGVTYW1wbGVSZWNvcmQoc2NvcGUp
KTsKK30KKwordm9pZCBTYW1wbGluZ1Rvb2w6OnN0YXJ0KHVuc2lnbmVkIGhlcnR6KQoreworICAg
IEFTU0VSVCghbV9ydW5uaW5nKTsKKyAgICBtX3J1bm5pbmcgPSB0cnVlOworICAgIG1faGVydHog
PSBoZXJ0ejsKKworICAgIG1fc2FtcGxpbmdUaHJlYWQgPSBjcmVhdGVUaHJlYWQodGhyZWFkU3Rh
cnRGdW5jLCB0aGlzKTsKK30KKwordm9pZCBTYW1wbGluZ1Rvb2w6OnN0b3AoKQoreworICAgIEFT
U0VSVChtX3J1bm5pbmcpOworICAgIG1fcnVubmluZyA9IGZhbHNlOworICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKG1fc2FtcGxpbmdUaHJlYWQsIDApOworfQorCisjaWYgRU5BQkxFKFNBTVBM
SU5HX1RPT0wpCisKK3N0cnVjdCBPcGNvZGVTYW1wbGVJbmZvCit7CisgICAgT3Bjb2RlSUQgb3Bj
b2RlOworICAgIGxvbmcgbG9uZyBjb3VudDsKK307CisKK3N0cnVjdCBMaW5lQ291bnRJbmZvCit7
CisgICAgdW5zaWduZWQgbGluZTsKKyAgICB1bnNpZ25lZCBjb3VudDsKK307CisKK3N0YXRpYyBp
bnQgY29tcGFyZUxpbmVDb3VudEluZm9TYW1wbGluZyhjb25zdCB2b2lkKiBsZWZ0LCBjb25zdCB2
b2lkKiByaWdodCkKK3sKKyAgICBjb25zdCBMaW5lQ291bnRJbmZvKiBsZWZ0TGluZUNvdW50ID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMaW5lQ291bnRJbmZvKj4obGVmdCk7CisgICAgY29uc3Qg
TGluZUNvdW50SW5mbyogcmlnaHRMaW5lQ291bnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IExp
bmVDb3VudEluZm8qPihyaWdodCk7CisKKyAgICByZXR1cm4gKGxlZnRMaW5lQ291bnQtPmxpbmUg
PiByaWdodExpbmVDb3VudC0+bGluZSkgPyAxIDogKGxlZnRMaW5lQ291bnQtPmxpbmUgPCByaWdo
dExpbmVDb3VudC0+bGluZSkgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZU9wY29k
ZUluZGljZXNTYW1wbGluZyhjb25zdCB2b2lkKiBsZWZ0LCBjb25zdCB2b2lkKiByaWdodCkKK3sK
KyAgICBjb25zdCBPcGNvZGVTYW1wbGVJbmZvKiBsZWZ0U2FtcGxlSW5mbyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgT3Bjb2RlU2FtcGxlSW5mbyo+KGxlZnQpOworICAgIGNvbnN0IE9wY29kZVNh
bXBsZUluZm8qIHJpZ2h0U2FtcGxlSW5mbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT3Bjb2Rl
U2FtcGxlSW5mbyo+KHJpZ2h0KTsKKworICAgIHJldHVybiAobGVmdFNhbXBsZUluZm8tPmNvdW50
IDwgcmlnaHRTYW1wbGVJbmZvLT5jb3VudCkgPyAxIDogKGxlZnRTYW1wbGVJbmZvLT5jb3VudCA+
IHJpZ2h0U2FtcGxlSW5mby0+Y291bnQpID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IGNvbXBh
cmVTY29wZVNhbXBsZVJlY29yZHMoY29uc3Qgdm9pZCogbGVmdCwgY29uc3Qgdm9pZCogcmlnaHQp
Cit7CisgICAgY29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0IGxlZnRWYWx1ZSA9ICpzdGF0
aWNfY2FzdDxjb25zdCBTY29wZVNhbXBsZVJlY29yZCogY29uc3QgKj4obGVmdCk7CisgICAgY29u
c3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0IHJpZ2h0VmFsdWUgPSAqc3RhdGljX2Nhc3Q8Y29u
c3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0ICo+KHJpZ2h0KTsKKworICAgIHJldHVybiAobGVm
dFZhbHVlLT5tX3RvdGFsQ291bnQgPCByaWdodFZhbHVlLT5tX3RvdGFsQ291bnQpID8gMSA6IChs
ZWZ0VmFsdWUtPm1fdG90YWxDb3VudCA+IHJpZ2h0VmFsdWUtPm1fdG90YWxDb3VudCkgPyAtMSA6
IDA7Cit9CisKK3ZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICAvLyBUaWRpZXMgdXAgU3VuU3BpZGVyIG91dHB1dCBieSByZW1vdmluZyBzaG9ydCBzY3JpcHRz
IC0gc3VjaCBhIHNtYWxsIG51bWJlciBvZiBzYW1wbGVzIHdvdWxkIGxpa2VseSBub3QgYmUgdXNl
ZnVsIGFueWhvdy4KKyAgICBpZiAobV90b3RhbFNhbXBsZXMgPCAxMCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIC8vICgxKSBDYWxjdWxhdGUgJ3RvdGFsQ29kZUJsb2NrU2FtcGxlcycsIGJ1
aWxkIGFuZCBzb3J0ICdjb2RlQmxvY2tTYW1wbGVzJyBhcnJheS4KKworICAgIGludCBzY29wZUNv
dW50ID0gbV9zY29wZVNhbXBsZU1hcC0+c2l6ZSgpOworICAgIGxvbmcgbG9uZyB0b3RhbENvZGVC
bG9ja1NhbXBsZXMgPSAwOworICAgIFZlY3RvcjxTY29wZVNhbXBsZVJlY29yZCo+IGNvZGVCbG9j
a1NhbXBsZXMoc2NvcGVDb3VudCk7CisgICAgU2NvcGVTYW1wbGVSZWNvcmRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3Njb3BlU2FtcGxlTWFwLT5iZWdpbigpOworICAgIGZvciAoaW50IGk9MDsgaSA8
IHNjb3BlQ291bnQ7ICsraSwgKytpdGVyKSB7CisgICAgICAgIGNvZGVCbG9ja1NhbXBsZXNbaV0g
PSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHRvdGFsQ29kZUJsb2NrU2FtcGxlcyArPSBjb2RlQmxv
Y2tTYW1wbGVzW2ldLT5tX3RvdGFsQ291bnQ7CisgICAgfQorI2lmIEhBVkUoTUVSR0VTT1JUKQor
ICAgIG1lcmdlc29ydChjb2RlQmxvY2tTYW1wbGVzLmJlZ2luKCksIHNjb3BlQ291bnQsIHNpemVv
ZihTY29wZVNhbXBsZVJlY29yZCopLCBjb21wYXJlU2NvcGVTYW1wbGVSZWNvcmRzKTsKKyNlbHNl
CisgICAgcXNvcnQoY29kZUJsb2NrU2FtcGxlcy5iZWdpbigpLCBzY29wZUNvdW50LCBzaXplb2Yo
U2NvcGVTYW1wbGVSZWNvcmQqKSwgY29tcGFyZVNjb3BlU2FtcGxlUmVjb3Jkcyk7CisjZW5kaWYK
KworICAgIC8vICgyKSBQcmludCBkYXRhIGZyb20gJ2NvZGVCbG9ja1NhbXBsZXMnIGFycmF5LCBj
YWxjdWxhdGUgJ3RvdGFsT3Bjb2RlU2FtcGxlcycsIHBvcHVsYXRlICdvcGNvZGVTYW1wbGVDb3Vu
dHMnIGFycmF5LgorCisgICAgbG9uZyBsb25nIHRvdGFsT3Bjb2RlU2FtcGxlcyA9IDA7CisgICAg
bG9uZyBsb25nIG9wY29kZVNhbXBsZUNvdW50c1tudW1PcGNvZGVJRHNdID0geyAwIH07CisKKyAg
ICBmcHJpbnRmKHN0ZG91dCwgIlxuQmxvY2sgc2FtcGxpbmcgcmVzdWx0c1xuXG4iKTsgCisgICAg
ZnByaW50ZihzdGRvdXQsICJUb3RhbCBibG9ja3Mgc2FtcGxlZCAodG90YWwgc2FtcGxlcyk6ICVs
bGQgKCVsbGQpXG5cbiIsIHRvdGFsQ29kZUJsb2NrU2FtcGxlcywgbV90b3RhbFNhbXBsZXMpOwor
CisgICAgZm9yIChpbnQgaT0wOyBpIDwgc2NvcGVDb3VudDsgaSsrKSB7CisgICAgICAgIFNjb3Bl
U2FtcGxlUmVjb3JkICpyZWNvcmQgPSBjb2RlQmxvY2tTYW1wbGVzW2ldOworICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IHJlY29yZC0+bV9jb2RlQmxvY2s7CisKKyAgICAgICAgZG91Ymxl
IHRvdGFsUGVyY2VudCA9IChyZWNvcmQtPm1fdG90YWxDb3VudCAqIDEwMC4wKS9tX3RvdGFsU2Ft
cGxlczsKKyAgICAgICAgZG91YmxlIGJsb2NrUGVyY2VudCA9IChyZWNvcmQtPm1fdG90YWxDb3Vu
dCAqIDEwMC4wKS90b3RhbENvZGVCbG9ja1NhbXBsZXM7CisKKyAgICAgICAgaWYgKChibG9ja1Bl
cmNlbnQgPj0gMSkgJiYgY29kZUJsb2NrKSB7CisgICAgICAgICAgICBJbnN0cnVjdGlvbiogY29k
ZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CisgICAgICAgICAgICBmcHJpbnRm
KHN0ZG91dCwgIiMlZDogJXM6JWQ6IHNhbXBsZWQgJWQgdGltZXMgLSAlLjNmJSUgKCUuM2YlJSlc
biIsIGkrMSwgcmVjb3JkLT5tX3Njb3BlLT5zb3VyY2VVUkwoKS5VVEY4U3RyaW5nKCkuY19zdHIo
KSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKGNvZGUpLCByZWNvcmQtPm1fdG90YWxDb3Vu
dCwgYmxvY2tQZXJjZW50LCB0b3RhbFBlcmNlbnQpOworICAgICAgICAgICAgaWYgKGkgPCAxMCkg
eworICAgICAgICAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsdW5zaWduZWQ+IGxpbmVDb3VudHM7
CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5kdW1wKGV4ZWMpOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgb3AgPSAwOyBvcCA8IHJlY29yZC0+bV9zaXplOyArK29wKSB7CisgICAg
ICAgICAgICAgICAgICAgIGludCBjb3VudCA9IHJlY29yZC0+bV92cGNDb3VudHNbb3BdOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
aW50ZigiICAgIFslIDRkXSBoYXMgc2FtcGxlIGNvdW50OiAlIDRkXG4iLCBvcCwgY291bnQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGluZSA9IGNvZGVCbG9jay0+bGluZU51
bWJlckZvclZQQyhjb2RlK29wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudHMu
c2V0KGxpbmUsIChsaW5lQ291bnRzLmNvbnRhaW5zKGxpbmUpID8gbGluZUNvdW50cy5nZXQobGlu
ZSkgOiAwKSArIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICAgICAgaW50IGxp
bmVzQ291bnQgPSBsaW5lQ291bnRzLnNpemUoKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8TGlu
ZUNvdW50SW5mbz4gbGluZUNvdW50SW5mbyhsaW5lc0NvdW50KTsKKyAgICAgICAgICAgICAgICBp
bnQgbGluZW5vID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsdW5z
aWduZWQ+OjppdGVyYXRvciBpdGVyID0gbGluZUNvdW50cy5iZWdpbigpOyBpdGVyICE9IGxpbmVD
b3VudHMuZW5kKCk7ICsraXRlciwgKytsaW5lbm8pIHsKKyAgICAgICAgICAgICAgICAgICAgbGlu
ZUNvdW50SW5mb1tsaW5lbm9dLmxpbmUgPSBpdGVyLT5maXJzdDsKKyAgICAgICAgICAgICAgICAg
ICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmNvdW50ID0gaXRlci0+c2Vjb25kOworICAgICAgICAg
ICAgICAgIH0KKyNpZiBIQVZFKE1FUkdFU09SVCkKKyAgICAgICAgICAgICAgICBtZXJnZXNvcnQo
bGluZUNvdW50SW5mby5iZWdpbigpLCBsaW5lc0NvdW50LCBzaXplb2YoTGluZUNvdW50SW5mbyks
IGNvbXBhcmVMaW5lQ291bnRJbmZvU2FtcGxpbmcpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBx
c29ydChsaW5lQ291bnRJbmZvLmJlZ2luKCksIGxpbmVzQ291bnQsIHNpemVvZihMaW5lQ291bnRJ
bmZvKSwgY29tcGFyZUxpbmVDb3VudEluZm9TYW1wbGluZyk7CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICBmb3IgKGxpbmVubyA9IDA7IGxpbmVubyA8IGxpbmVzQ291bnQ7ICsrbGluZW5vKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgIExpbmUgIyVkIGhhcyBzYW1wbGUgY291bnQg
JWQuXG4iLCBsaW5lQ291bnRJbmZvW2xpbmVub10ubGluZSwgbGluZUNvdW50SW5mb1tsaW5lbm9d
LmNvdW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVjb3Jk
LT5tX3ZwY0NvdW50cyAmJiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbnMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBvcCA9IDA7IG9wIDwgcmVjb3JkLT5tX3NpemU7ICsrb3ApIHsKKyAg
ICAgICAgICAgICAgICBPcGNvZGUgb3Bjb2RlID0gaW5zdHJ1Y3Rpb25zW29wXS51Lm9wY29kZTsK
KyAgICAgICAgICAgICAgICBpZiAoZXhlYy0+bWFjaGluZSgpLT5pc09wY29kZShvcGNvZGUpKSB7
CisgICAgICAgICAgICAgICAgICAgIHRvdGFsT3Bjb2RlU2FtcGxlcyArPSByZWNvcmQtPm1fdnBj
Q291bnRzW29wXTsKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlU2FtcGxlQ291bnRzW2V4ZWMt
Pm1hY2hpbmUoKS0+Z2V0T3Bjb2RlSUQob3Bjb2RlKV0gKz0gcmVjb3JkLT5tX3ZwY0NvdW50c1tv
cF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIHByaW50ZigiXG4iKTsKKworICAgIC8vICgzKSBCdWlsZCBhbmQgc29ydCAnb3Bjb2RlU2Ft
cGxlSW5mbycgYXJyYXkuCisKKyAgICBPcGNvZGVTYW1wbGVJbmZvIG9wY29kZVNhbXBsZUluZm9b
bnVtT3Bjb2RlSURzXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wY29kZUlEczsgKytp
KSB7CisgICAgICAgIG9wY29kZVNhbXBsZUluZm9baV0ub3Bjb2RlID0gKE9wY29kZUlEKWk7Cisg
ICAgICAgIG9wY29kZVNhbXBsZUluZm9baV0uY291bnQgPSBvcGNvZGVTYW1wbGVDb3VudHNbaV07
CisgICAgfQorI2lmIEhBVkUoTUVSR0VTT1JUKQorICAgIG1lcmdlc29ydChvcGNvZGVTYW1wbGVJ
bmZvLCBudW1PcGNvZGVJRHMsIHNpemVvZihPcGNvZGVTYW1wbGVJbmZvKSwgY29tcGFyZU9wY29k
ZUluZGljZXNTYW1wbGluZyk7CisjZWxzZQorICAgIHFzb3J0KG9wY29kZVNhbXBsZUluZm8sIG51
bU9wY29kZUlEcywgc2l6ZW9mKE9wY29kZVNhbXBsZUluZm8pLCBjb21wYXJlT3Bjb2RlSW5kaWNl
c1NhbXBsaW5nKTsKKyNlbmRpZgorCisgICAgLy8gKDQpIFByaW50IE9wY29kZSBzYW1wbGluZyBy
ZXN1bHRzLgorICAgIAorICAgIGZwcmludGYoc3Rkb3V0LCAiXG5PcGNvZGUgc2FtcGxpbmcgcmVz
dWx0c1xuXG4iKTsgCisgICAgCisgICAgZnByaW50ZihzdGRvdXQsICJUb3RhbCBvcGNvZGVzIHNh
bXBsZWQgKHRvdGFsIHNhbXBsZXMpOiAlbGxkICglbGxkKVxuXG4iLCB0b3RhbE9wY29kZVNhbXBs
ZXMsIG1fdG90YWxTYW1wbGVzKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIk9wY29kZXMgaW4gb3Jk
ZXI6XG5cbiIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtT3Bjb2RlSURzOyArK2kpIHsK
KyAgICAgICAgbG9uZyBsb25nIGNvdW50ID0gb3Bjb2RlU2FtcGxlQ291bnRzW2ldOworICAgICAg
ICBmcHJpbnRmKHN0ZG91dCwgIiVzOiVzJTZsbGRcdCUuM2YlJVx0KCUuM2YlJSlcbiIsIG9wY29k
ZU5hbWVzW2ldLCBwYWRPcGNvZGVOYW1lKChPcGNvZGVJRClpLCAyMCksIGNvdW50LCAoKGRvdWJs
ZSljb3VudCAqIDEwMCkvdG90YWxPcGNvZGVTYW1wbGVzLCAoKGRvdWJsZSljb3VudCAqIDEwMCkv
bV90b3RhbFNhbXBsZXMpOyAgICAKKyAgICB9CisgICAgZnByaW50ZihzdGRvdXQsICJcbiIpOwor
ICAgIGZwcmludGYoc3Rkb3V0LCAiT3Bjb2RlcyBieSBzYW1wbGUgY291bnQ6XG5cbiIpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtT3Bjb2RlSURzOyArK2kpIHsKKyAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlID0gb3Bjb2RlU2FtcGxlSW5mb1tpXS5vcGNvZGU7CisgICAgICAgIGxvbmcgbG9u
ZyBjb3VudCA9IG9wY29kZVNhbXBsZUluZm9baV0uY291bnQ7CisgICAgICAgIGZwcmludGYoc3Rk
b3V0LCAiJXM6JXMlNmxsZFx0JS4zZiUlXHQoJS4zZiUlKVxuIiwgb3Bjb2RlTmFtZXNbb3Bjb2Rl
XSwgcGFkT3Bjb2RlTmFtZShvcGNvZGUsIDIwKSwgY291bnQsICgoZG91YmxlKWNvdW50ICogMTAw
KS90b3RhbE9wY29kZVNhbXBsZXMsICgoZG91YmxlKWNvdW50ICogMTAwKS9tX3RvdGFsU2FtcGxl
cyk7ICAgIAorICAgIH0KKyAgICBmcHJpbnRmKHN0ZG91dCwgIlxuIik7Cit9CisKKyNlbHNlCisK
K3ZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSopCit7Cit9CisKKyNlbmRpZgorCit9
IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL1NhbXBsaW5nVG9vbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL1NhbXBsaW5nVG9vbC5oCShyZXZpc2lv
biAwKQorKysgSmF2YVNjcmlwdENvcmUvVk0vU2FtcGxpbmdUb29sLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNhbXBsaW5nVG9vbF9oCisjZGVmaW5lIFNhbXBsaW5n
VG9vbF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaW5jbHVkZSA8bm9kZXMuaD4K
KyNpbmNsdWRlIDxPcGNvZGUuaD4KKworbmFtZXNwYWNlIEtKUyB7CisKKyAgICBjbGFzcyBFeGVj
U3RhdGU7CisgICAgY2xhc3MgU2NvcGVOb2RlOworICAgIGNsYXNzIENvZGVCbG9jazsKKyAgICBz
dHJ1Y3QgSW5zdHJ1Y3Rpb247CisKKyAgICBzdHJ1Y3QgU2NvcGVTYW1wbGVSZWNvcmQKKyAgICB7
CisgICAgICAgIFJlZlB0cjxTY29wZU5vZGU+IG1fc2NvcGU7CisgICAgICAgIENvZGVCbG9jayog
bV9jb2RlQmxvY2s7CisgICAgICAgIGludCBtX3RvdGFsQ291bnQ7CisgICAgICAgIGludCogbV92
cGNDb3VudHM7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICAgICAgCisgICAgICAgIFNj
b3BlU2FtcGxlUmVjb3JkKFNjb3BlTm9kZSogc2NvcGUpCisgICAgICAgICAgICA6IG1fc2NvcGUo
c2NvcGUpCisgICAgICAgICAgICAsIG1fY29kZUJsb2NrKDApCisgICAgICAgICAgICAsIG1fdG90
YWxDb3VudCgwKQorICAgICAgICAgICAgLCBtX3ZwY0NvdW50cygwKQorICAgICAgICAgICAgLCBt
X3NpemUoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+U2NvcGVT
YW1wbGVSZWNvcmQoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV92cGNDb3VudHMpCisg
ICAgICAgICAgICAgICAgZnJlZShtX3ZwY0NvdW50cyk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgc2FtcGxlKENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBD
KTsKKyAgICB9OworCisgICAgdHlwZWRlZiBXVEY6Okhhc2hNYXA8U2NvcGVOb2RlKiwgU2NvcGVT
YW1wbGVSZWNvcmQqPiBTY29wZVNhbXBsZVJlY29yZE1hcDsKKworICAgIGNsYXNzIFNhbXBsaW5n
VG9vbAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNhbXBsaW5nVG9vbCgpCisgICAgICAg
ICAgICA6IG1fcnVubmluZyhmYWxzZSkKKyAgICAgICAgICAgICwgbV9yZWNvcmRlZENvZGVCbG9j
aygwKQorICAgICAgICAgICAgLCBtX3JlY29yZGVkVlBDKDApCisgICAgICAgICAgICAsIG1fdG90
YWxTYW1wbGVzKDApCisgICAgICAgICAgICAsIG1fc2NvcGVTYW1wbGVNYXAobmV3IFNjb3BlU2Ft
cGxlUmVjb3JkTWFwKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5TYW1wbGlu
Z1Rvb2woKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1fc2NvcGVT
YW1wbGVNYXApOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzdGFydCh1bnNpZ25lZCBoZXJ0
ej0xMDAwKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHZvaWQgZHVtcChFeGVjU3Rh
dGUqKTsKKworICAgICAgICB2b2lkIG5vdGlmeU9mU2NvcGUoU2NvcGVOb2RlKiBzY29wZSk7CisK
KyAgICAgICAgdm9pZCBzYW1wbGUoQ29kZUJsb2NrKiByZWNvcmRlZENvZGVCbG9jaywgSW5zdHJ1
Y3Rpb24qIHJlY29yZGVkVlBDKQorICAgICAgICB7CisgICAgICAgICAgICBtX3JlY29yZGVkQ29k
ZUJsb2NrID0gcmVjb3JkZWRDb2RlQmxvY2s7CisgICAgICAgICAgICBtX3JlY29yZGVkVlBDID0g
cmVjb3JkZWRWUEM7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHByaXZhdGVFeGVjdXRlUmV0
dXJuZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3JlY29yZGVkQ29kZUJsb2NrID0gMDsK
KyAgICAgICAgICAgIG1fcmVjb3JkZWRWUEMgPSAwOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB2b2lkIGNhbGxpbmdIb3N0RnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBt
X3JlY29yZGVkQ29kZUJsb2NrID0gMDsKKyAgICAgICAgICAgIG1fcmVjb3JkZWRWUEMgPSAwOwor
ICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyB2b2lkKiB0
aHJlYWRTdGFydEZ1bmModm9pZCopOworICAgICAgICB2b2lkIHJ1bigpOworICAgICAgICAKKyAg
ICAgICAgLy8gU2FtcGxpbmcgdGhyZWFkIHN0YXRlLgorICAgICAgICBib29sIG1fcnVubmluZzsK
KyAgICAgICAgdW5zaWduZWQgbV9oZXJ0ejsKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3Nh
bXBsaW5nVGhyZWFkOworCisgICAgICAgIC8vIFN0YXRlIHRyYWNrZWQgYnkgdGhlIG1haW4gdGhy
ZWFkLCB1c2VkIGJ5IHRoZSBzYW1wbGluZyB0aHJlYWQuCisgICAgICAgIENvZGVCbG9jayogbV9y
ZWNvcmRlZENvZGVCbG9jazsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIG1fcmVjb3JkZWRWUEM7CisK
KyAgICAgICAgLy8gR2F0aGVyZWQgc2FtcGxlIGRhdGEuCisgICAgICAgIGxvbmcgbG9uZyBtX3Rv
dGFsU2FtcGxlczsKKyAgICAgICAgT3duUHRyPFNjb3BlU2FtcGxlUmVjb3JkTWFwPiBtX3Njb3Bl
U2FtcGxlTWFwOworICAgIH07CisKKy8vIFNDT1BFTk9ERV8gLyBNQUNISU5FXyBtYWNyb3MgZm9y
IHVzZSBmcm9tIHdpdGhpbiBtZW1iZXIgbWV0aG9kcyBvbiBTY29wZU5vZGUgLyBNYWNoaW5lIHJl
c3BlY3RpdmVseS4KKyNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKKyNkZWZpbmUgU0NPUEVOT0RF
X1NBTVBMSU5HX25vdGlmeU9mU2NvcGUoc2FtcGxlcikgc2FtcGxlci0+bm90aWZ5T2ZTY29wZSh0
aGlzKQorI2RlZmluZSBNQUNISU5FX1NBTVBMSU5HX3NhbXBsZShjb2RlQmxvY2ssIHZQQykgbV9z
YW1wbGVyLT5zYW1wbGUoY29kZUJsb2NrLCB2UEMpCisjZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdf
cHJpdmF0ZUV4ZWN1dGVSZXR1cm5lZCgpIG1fc2FtcGxlci0+cHJpdmF0ZUV4ZWN1dGVSZXR1cm5l
ZCgpCisjZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbigpIG1fc2Ft
cGxlci0+Y2FsbGluZ0hvc3RGdW5jdGlvbigpCisjZWxzZQorI2RlZmluZSBTQ09QRU5PREVfU0FN
UExJTkdfbm90aWZ5T2ZTY29wZShzYW1wbGVyKQorI2RlZmluZSBNQUNISU5FX1NBTVBMSU5HX3Nh
bXBsZShjb2RlQmxvY2ssIHZQQykKKyNkZWZpbmUgTUFDSElORV9TQU1QTElOR19wcml2YXRlRXhl
Y3V0ZVJldHVybmVkKCkKKyNkZWZpbmUgTUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0
aW9uKCkKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBLSlMKKworI2VuZGlmIC8vIFNhbXBsaW5n
VG9vbF9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMzUz
NTgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNv
bW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgorI2luY2x1ZGUgIkFQ
SS9KU0NsYXNzUmVmLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiTWFjaGluZS5o
IgogI2luY2x1ZGUgIlBhcnNlci5oIgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1NoZWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvU2hlbGwuY3BwCShyZXZpc2lvbiAz
NTM1OCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlBhcnNlci5o
IgogI2luY2x1ZGUgIlByb3RvdHlwZUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiU2FtcGxpbmdUb29s
LmgiCiAjaW5jbHVkZSAiY29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiY29tcGxldGlvbi5oIgogI2lu
Y2x1ZGUgImludGVycHJldGVyLmgiCkBAIC0zMzksNyArMzQwLDcgQEAgc3RhdGljIGJvb2wgcnVu
V2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBpZiAocHJldHR5UHJpbnQpCiAgICAg
ICAgICAgICBwcmV0dHlQcmludFNjcmlwdChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZmls
ZU5hbWUsIHNjcmlwdCk7CiAgICAgICAgIGVsc2UgewotI2lmIFNBTVBMSU5HX1RPT0xfRU5BQkxF
RAorI2lmIEVOQUJMRShTQU1QTElOR19UT09MKQogICAgICAgICAgICAgTWFjaGluZSogbWFjaGlu
ZSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLT5tYWNoaW5lOwogICAgICAgICAgICAgbWFj
aGluZS0+bV9zYW1wbGVyID0gbmV3IFNhbXBsaW5nVG9vbCgpOwogICAgICAgICAgICAgbWFjaGlu
ZS0+bV9zYW1wbGVyLT5zdGFydCgpOwpAQCAtMzU0LDcgKzM1NSw3IEBAIHN0YXRpYyBib29sIHJ1
bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJF
eGNlcHRpb246ICVzXG4iLCBjb21wbGV0aW9uLnZhbHVlKCktPnRvU3RyaW5nKGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpKS5hc2NpaSgpKTsKICAgICAgICAgICAgIH0KIAotI2lmIFNBTVBMSU5H
X1RPT0xfRU5BQkxFRAorI2lmIEVOQUJMRShTQU1QTElOR19UT09MKQogICAgICAgICAgICAgbWFj
aGluZS0+bV9zYW1wbGVyLT5zdG9wKCk7CiAgICAgICAgICAgICBtYWNoaW5lLT5tX3NhbXBsZXIt
PmR1bXAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogICAgICAgICAgICAgZGVsZXRlIG1h
Y2hpbmUtPm1fc2FtcGxlcjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9jb25maWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvY29uZmlnLmgJKHJldmlzaW9uIDM1MzU4KQor
KysgSmF2YVNjcmlwdENvcmUva2pzL2NvbmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwzICs2
MCw1IEBACiAjaW5jbHVkZSA8d3RmL0Rpc2FsbG93Q1R5cGUuaD4KICNlbmRpZgogCisvLyBTZXQg
dG8gMSB0byBlbmFibGUgdGhlIHNhbXBsZXIsIFNhbXBsaW5nVG9vbC4KKyNkZWZpbmUgRU5BQkxF
X1NBTVBMSU5HX1RPT0wgMApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZpc2lvbiAzNTM1OCkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlICJkZWJ1Z2dlci5oIgogI2luY2x1ZGUgImxleGVyLmgiCiAjaW5j
bHVkZSAib3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUg
PG1hdGguaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22486</attachid>
            <date>2008-07-25 16:37:30 -0700</date>
            <delta_ts>2008-07-25 16:37:30 -0700</delta_ts>
            <desc>SunSpider results (no degradation)</desc>
            <filename>patch_multi_ball.sunspider.txt</filename>
            <type>text/plain</type>
            <size>5679</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">PT09IEJVSUxESU5HIEFHR1JFR0FURSBUQVJHRVQgRGVyaXZlZCBTb3VyY2VzIFdJVEggQ09ORklH
VVJBVElPTiBSZWxlYXNlID09PQoKQ2hlY2tpbmcgRGVwZW5kZW5jaWVzLi4uCgpQaGFzZVNjcmlw
dEV4ZWN1dGlvbiAiL1VzZXJzL2dhdmluL0Rlc2t0b3AvQm94ZXIvV2ViS2l0L1dlYktpdEJ1aWxk
L0phdmFTY3JpcHRDb3JlLmJ1aWxkL1JlbGVhc2UvRGVyaXZlZCBTb3VyY2VzLmJ1aWxkL1Njcmlw
dC02NUZCM0Y2NTA5RDExRTkxMDBGNDlERUIuc2giCiAgICBjZCAvVXNlcnMvZ2F2aW4vRGVza3Rv
cC9Cb3hlci9XZWJLaXQvSmF2YVNjcmlwdENvcmUKICAgIC9iaW4vc2ggLWMgIlwiL1VzZXJzL2dh
dmluL0Rlc2t0b3AvQm94ZXIvV2ViS2l0L1dlYktpdEJ1aWxkL0phdmFTY3JpcHRDb3JlLmJ1aWxk
L1JlbGVhc2UvRGVyaXZlZCBTb3VyY2VzLmJ1aWxkL1NjcmlwdC02NUZCM0Y2NTA5RDExRTkxMDBG
NDlERUIuc2hcIiIKbWFrZTogTm90aGluZyB0byBiZSBkb25lIGZvciBgYWxsJy4KClBoYXNlU2Ny
aXB0RXhlY3V0aW9uICIvVXNlcnMvZ2F2aW4vRGVza3RvcC9Cb3hlci9XZWJLaXQvV2ViS2l0QnVp
bGQvSmF2YVNjcmlwdENvcmUuYnVpbGQvUmVsZWFzZS9EZXJpdmVkIFNvdXJjZXMuYnVpbGQvU2Ny
aXB0LTVEMzVERUUxMEM3QzE0MEIwMDg2NDhCMi5zaCIKICAgIGNkIC9Vc2Vycy9nYXZpbi9EZXNr
dG9wL0JveGVyL1dlYktpdC9KYXZhU2NyaXB0Q29yZQogICAgL2Jpbi9zaCAtYyAiXCIvVXNlcnMv
Z2F2aW4vRGVza3RvcC9Cb3hlci9XZWJLaXQvV2ViS2l0QnVpbGQvSmF2YVNjcmlwdENvcmUuYnVp
bGQvUmVsZWFzZS9EZXJpdmVkIFNvdXJjZXMuYnVpbGQvU2NyaXB0LTVEMzVERUUxMEM3QzE0MEIw
MDg2NDhCMi5zaFwiIgoKCj09PSBCVUlMRElORyBOQVRJVkUgVEFSR0VUIEphdmFTY3JpcHRDb3Jl
IFdJVEggQ09ORklHVVJBVElPTiBSZWxlYXNlID09PQoKQ2hlY2tpbmcgRGVwZW5kZW5jaWVzLi4u
CgpQaGFzZVNjcmlwdEV4ZWN1dGlvbiAvVXNlcnMvZ2F2aW4vRGVza3RvcC9Cb3hlci9XZWJLaXQv
V2ViS2l0QnVpbGQvSmF2YVNjcmlwdENvcmUuYnVpbGQvUmVsZWFzZS9KYXZhU2NyaXB0Q29yZS5i
dWlsZC9TY3JpcHQtOTMxOTU4NkIwOUQ5RjkxQTAwQTU2RkQ0LnNoCiAgICBjZCAvVXNlcnMvZ2F2
aW4vRGVza3RvcC9Cb3hlci9XZWJLaXQvSmF2YVNjcmlwdENvcmUKICAgIC9iaW4vc2ggLWMgL1Vz
ZXJzL2dhdmluL0Rlc2t0b3AvQm94ZXIvV2ViS2l0L1dlYktpdEJ1aWxkL0phdmFTY3JpcHRDb3Jl
LmJ1aWxkL1JlbGVhc2UvSmF2YVNjcmlwdENvcmUuYnVpbGQvU2NyaXB0LTkzMTk1ODZCMDlEOUY5
MUEwMEE1NkZENC5zaAoKCj09PSBCVUlMRElORyBOQVRJVkUgVEFSR0VUIGpzYyBXSVRIIENPTkZJ
R1VSQVRJT04gUmVsZWFzZSA9PT0KCkNoZWNraW5nIERlcGVuZGVuY2llcy4uLgoKUGhhc2VTY3Jp
cHRFeGVjdXRpb24gL1VzZXJzL2dhdmluL0Rlc2t0b3AvQm94ZXIvV2ViS2l0L1dlYktpdEJ1aWxk
L0phdmFTY3JpcHRDb3JlLmJ1aWxkL1JlbGVhc2UvanNjLmJ1aWxkL1NjcmlwdC01RDVEOEFCRjBF
MEQwQjAzMDBGOUM2OTIuc2gKICAgIGNkIC9Vc2Vycy9nYXZpbi9EZXNrdG9wL0JveGVyL1dlYktp
dC9KYXZhU2NyaXB0Q29yZQogICAgL2Jpbi9zaCAtYyAvVXNlcnMvZ2F2aW4vRGVza3RvcC9Cb3hl
ci9XZWJLaXQvV2ViS2l0QnVpbGQvSmF2YVNjcmlwdENvcmUuYnVpbGQvUmVsZWFzZS9qc2MuYnVp
bGQvU2NyaXB0LTVENUQ4QUJGMEUwRDBCMDMwMEY5QzY5Mi5zaAoqKiBCVUlMRCBTVUNDRUVERUQg
KioKU3RhcnRpbmcgc3Vuc3BpZGVyLWNvbXBhcmUtcmVzdWx0cyB3aXRoIERZTERfRlJBTUVXT1JL
X1BBVEggc2V0IHRvIHBvaW50IHRvIGJ1aWx0IEphdmFTY3JpcHRDb3JlIGluIC9Vc2Vycy9nYXZp
bi9EZXNrdG9wL0JveGVyL1dlYktpdC9XZWJLaXRCdWlsZC9SZWxlYXNlLgoKClRFU1QgICAgICAg
ICAgICAgICAgICAgQ09NUEFSSVNPTiAgICAgICAgICAgIEZST00gICAgICAgICAgICAgICAgIFRP
ICAgICAgICAgICAgIERFVEFJTFMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqKiBUT1RBTCAqKjog
ICAgICAgICAgIC0gICAgICAgICAgICAgICAgIDE2MjAuOW1zICsvLSAwLjElICAgMTYyMC4xbXMg
Ky8tIDAuMSUgCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAzZDogICAgICAgICAgICAgICAgICAx
LjAwNHggYXMgZmFzdCAgICAgMjE4LjVtcyArLy0gMC4yJSAgICAyMTcuNm1zICsvLSAwLjMlICAg
ICBzaWduaWZpY2FudAogICAgY3ViZTogICAgICAgICAgICAgID8/ICAgICAgICAgICAgICAgICAg
NjkuMm1zICsvLSAwLjQlICAgICA2OS42bXMgKy8tIDAuNSUgICAgIG5vdCBjb25jbHVzaXZlOiBt
aWdodCBiZSAqMS4wMDZ4IGFzIHNsb3cqCiAgICBtb3JwaDogICAgICAgICAgICAgMS4wMDd4IGFz
IGZhc3QgICAgICA3My4xbXMgKy8tIDAuMyUgICAgIDcyLjZtcyArLy0gMC41JSAgICAgc2lnbmlm
aWNhbnQKICAgIHJheXRyYWNlOiAgICAgICAgICAxLjAxMXggYXMgZmFzdCAgICAgIDc2LjJtcyAr
Ly0gMC40JSAgICAgNzUuNG1zICsvLSAwLjUlICAgICBzaWduaWZpY2FudAoKICBhY2Nlc3M6ICAg
ICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgMjE2LjltcyArLy0gMC4yJSAgICAyMTYuNm1z
ICsvLSAwLjIlIAogICAgYmluYXJ5LXRyZWVzOiAgICAgICoxLjAwNHggYXMgc2xvdyogICAgMjgu
MG1zICsvLSAwLjAlICAgICAyOC4xbXMgKy8tIDAuOCUgICAgIHNpZ25pZmljYW50CiAgICBmYW5u
a3VjaDogICAgICAgICAgMS4wMjF4IGFzIGZhc3QgICAgICA1NC40bXMgKy8tIDAuNyUgICAgIDUz
LjNtcyArLy0gMC42JSAgICAgc2lnbmlmaWNhbnQKICAgIG5ib2R5OiAgICAgICAgICAgICAqMS4w
MDV4IGFzIHNsb3cqICAgMTEyLjBtcyArLy0gMC4zJSAgICAxMTIuNm1zICsvLSAwLjMlICAgICBz
aWduaWZpY2FudAogICAgbnNpZXZlOiAgICAgICAgICAgID8/ICAgICAgICAgICAgICAgICAgMjIu
NW1zICsvLSAxLjclICAgICAyMi42bXMgKy8tIDEuNiUgICAgIG5vdCBjb25jbHVzaXZlOiBtaWdo
dCBiZSAqMS4wMDR4IGFzIHNsb3cqCgogIGJpdG9wczogICAgICAgICAgICAgID8/ICAgICAgICAg
ICAgICAgICAxNTMuMm1zICsvLSAwLjMlICAgIDE1My43bXMgKy8tIDAuNCUgICAgIG5vdCBjb25j
bHVzaXZlOiBtaWdodCBiZSAqMS4wMDN4IGFzIHNsb3cqCiAgICAzYml0LWJpdHMtaW4tYnl0ZTog
Pz8gICAgICAgICAgICAgICAgICAyMS4ybXMgKy8tIDEuNCUgICAgIDIxLjZtcyArLy0gMS43JSAg
ICAgbm90IGNvbmNsdXNpdmU6IG1pZ2h0IGJlICoxLjAxOXggYXMgc2xvdyoKICAgIGJpdHMtaW4t
Ynl0ZTogICAgICA/PyAgICAgICAgICAgICAgICAgIDI3LjFtcyArLy0gMC44JSAgICAgMjcuM21z
ICsvLSAxLjMlICAgICBub3QgY29uY2x1c2l2ZTogbWlnaHQgYmUgKjEuMDA3eCBhcyBzbG93Kgog
ICAgYml0d2lzZS1hbmQ6ICAgICAgIC0gICAgICAgICAgICAgICAgICAgNTIuOW1zICsvLSAwLjgl
ICAgICA1Mi44bXMgKy8tIDEuMSUgCiAgICBuc2lldmUtYml0czogICAgICAgLSAgICAgICAgICAg
ICAgICAgICA1Mi4wbXMgKy8tIDAuMCUgICAgIDUyLjBtcyArLy0gMC4wJSAKCiAgY29udHJvbGZs
b3c6ICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAxNi45bXMgKy8tIDEuMyUgICAgIDE2Ljlt
cyArLy0gMS4zJSAKICAgIHJlY3Vyc2l2ZTogICAgICAgICAtICAgICAgICAgICAgICAgICAgIDE2
LjltcyArLy0gMS4zJSAgICAgMTYuOW1zICsvLSAxLjMlIAoKICBjcnlwdG86ICAgICAgICAgICAg
ICA/PyAgICAgICAgICAgICAgICAgIDk2LjRtcyArLy0gMC40JSAgICAgOTYuNm1zICsvLSAwLjQl
ICAgICBub3QgY29uY2x1c2l2ZTogbWlnaHQgYmUgKjEuMDAyeCBhcyBzbG93KgogICAgYWVzOiAg
ICAgICAgICAgICAgICoxLjAyMHggYXMgc2xvdyogICAgMzAuM21zICsvLSAxLjElICAgICAzMC45
bXMgKy8tIDAuNyUgICAgIHNpZ25pZmljYW50CiAgICBtZDU6ICAgICAgICAgICAgICAgLSAgICAg
ICAgICAgICAgICAgICAzMy41bXMgKy8tIDEuMSUgICAgIDMzLjFtcyArLy0gMC43JSAKICAgIHNo
YTE6ICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIDMyLjZtcyArLy0gMS4xJSAgICAg
MzIuNm1zICsvLSAxLjElIAoKICBkYXRlOiAgICAgICAgICAgICAgICAqMS4wMDZ4IGFzIHNsb3cq
ICAgMTQ5LjRtcyArLy0gMC4yJSAgICAxNTAuM21zICsvLSAwLjMlICAgICBzaWduaWZpY2FudAog
ICAgZm9ybWF0LXRvZnRlOiAgICAgICoxLjAxOHggYXMgc2xvdyogICAgOTAuMm1zICsvLSAwLjMl
ICAgICA5MS44bXMgKy8tIDAuMyUgICAgIHNpZ25pZmljYW50CiAgICBmb3JtYXQteHBhcmI6ICAg
ICAgMS4wMTJ4IGFzIGZhc3QgICAgICA1OS4ybXMgKy8tIDAuNSUgICAgIDU4LjVtcyArLy0gMC42
JSAgICAgc2lnbmlmaWNhbnQKCiAgbWF0aDogICAgICAgICAgICAgICAgMS4wMTF4IGFzIGZhc3Qg
ICAgIDE4MS45bXMgKy8tIDAuMiUgICAgMTc5LjltcyArLy0gMC4zJSAgICAgc2lnbmlmaWNhbnQK
ICAgIGNvcmRpYzogICAgICAgICAgICAqMS4wMTB4IGFzIHNsb3cqICAgIDUyLjNtcyArLy0gMC43
JSAgICAgNTIuOG1zICsvLSAwLjYlICAgICBzaWduaWZpY2FudAogICAgcGFydGlhbC1zdW1zOiAg
ICAgIDEuMDIzeCBhcyBmYXN0ICAgICAgOTcuMG1zICsvLSAwLjMlICAgICA5NC44bXMgKy8tIDAu
NSUgICAgIHNpZ25pZmljYW50CiAgICBzcGVjdHJhbC1ub3JtOiAgICAgLSAgICAgICAgICAgICAg
ICAgICAzMi42bXMgKy8tIDEuMSUgICAgIDMyLjNtcyArLy0gMS4xJSAKCiAgcmVnZXhwOiAgICAg
ICAgICAgICAgKjEuMDEyeCBhcyBzbG93KiAgIDE4Ny40bXMgKy8tIDAuMyUgICAgMTg5LjZtcyAr
Ly0gMC4zJSAgICAgc2lnbmlmaWNhbnQKICAgIGRuYTogICAgICAgICAgICAgICAqMS4wMTJ4IGFz
IHNsb3cqICAgMTg3LjRtcyArLy0gMC4zJSAgICAxODkuNm1zICsvLSAwLjMlICAgICBzaWduaWZp
Y2FudAoKICBzdHJpbmc6ICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgNDAwLjNtcyAr
Ly0gMC4zJSAgICAzOTguOW1zICsvLSAwLjIlIAogICAgYmFzZTY0OiAgICAgICAgICAgIDEuMDE5
eCBhcyBmYXN0ICAgICAgNTguMm1zICsvLSAwLjUlICAgICA1Ny4xbXMgKy8tIDAuNCUgICAgIHNp
Z25pZmljYW50CiAgICBmYXN0YTogICAgICAgICAgICAgMS4wMTV4IGFzIGZhc3QgICAgICA3NC43
bXMgKy8tIDAuNSUgICAgIDczLjZtcyArLy0gMC41JSAgICAgc2lnbmlmaWNhbnQKICAgIHRhZ2Ns
b3VkOiAgICAgICAgICA/PyAgICAgICAgICAgICAgICAgIDk4LjVtcyArLy0gMC42JSAgICAgOTku
MG1zICsvLSAwLjYlICAgICBub3QgY29uY2x1c2l2ZTogbWlnaHQgYmUgKjEuMDA1eCBhcyBzbG93
KgogICAgdW5wYWNrLWNvZGU6ICAgICAgID8/ICAgICAgICAgICAgICAgICAxMDYuMm1zICsvLSAw
LjMlICAgIDEwNi41bXMgKy8tIDAuNCUgICAgIG5vdCBjb25jbHVzaXZlOiBtaWdodCBiZSAqMS4w
MDN4IGFzIHNsb3cqCiAgICB2YWxpZGF0ZS1pbnB1dDogICAgLSAgICAgICAgICAgICAgICAgICA2
Mi43bXMgKy8tIDEuNiUgICAgIDYyLjdtcyArLy0gMS4xJSAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22487</attachid>
            <date>2008-07-25 17:04:31 -0700</date>
            <delta_ts>2008-07-29 14:43:26 -0700</delta_ts>
            <desc>minor fix - add missing padding for DUMP_OPCODE_STATS</desc>
            <filename>patch_multi_ball.014.txt</filename>
            <type>text/plain</type>
            <size>47321</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM1MzU4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDgtMDctMjUgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzIGZvciBXaW5kb3dzIGFuZCBub24tQWxs
SW5PbmUgZmlsZSBidWlsZCB3aXRoIFNhbXBsaW5nVG9vbCwgcGx1cyByZXZpZXcgZml4ZXMuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogICAgICAgICAgICAgIEFkZGluZyBTYW1wbGluZ1Rv
b2wuY3BwIHRvIGJ1aWxkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogICAgICAgICAg
RXhwb3J0IGhvb2tzIHRvIGluaXQgJiBjb250cm9sIFNhbXBsaW5nVG9vbC4KKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS5wcmk6ICAgICAgICAgIEFkZGluZyBTYW1wbGluZ1Rvb2wuY3BwIHRvIGJ1
aWxkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2o6IEFkZGluZyBTYW1wbGluZ1Rvb2wuY3BwIHRvIGJ1aWxkLgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGluZyBT
YW1wbGluZ1Rvb2wuY3BwIHRvIGJ1aWxkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlU291cmNl
cy5ia2w6ICAgQWRkaW5nIFNhbXBsaW5nVG9vbC5jcHAgdG8gYnVpbGQuCisgICAgICAgICogVk0v
TWFjaGluZS5jcHA6ICAgICAgICAgICAgICBNQUNISU5FX1NBTVBMSU5HX2NhbGxpbmdOYXRpdmVG
dW5jdGlvbiByZW5hbWVkIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbgorICAg
ICAgICAqIFZNL01hY2hpbmUuaDoKKyAgICAgICAgKiBWTS9PcGNvZGUuY3BwOiAgICAgICAgICAg
ICAgIFNhbXBsaW5nVG9vbCBtb3ZlZCB0byBTYW1wbGluZ1Rvb2wuY3BwLy5oLCBvcGNvZGVOYW1l
cyBnZW5lcmF0ZWQgZnJvbSBGT1JfRUFDSF9PUENPREVfSUQuCisgICAgICAgICogVk0vT3Bjb2Rl
Lmg6CisgICAgICAgICogVk0vU2FtcGxpbmdUb29sLmNwcDogICAgICAgICBBZGRlZCAuY3BwLy5o
IGZvciBTYW1wbGluZ1Rvb2wuCisgICAgICAgICogVk0vU2FtcGxpbmdUb29sLmg6CisgICAgICAg
ICoga2pzL0pTR2xvYmFsRGF0YS5jcHA6ICAgICAgICBGaXhlZCBtaXNzaW5nICJBUEkvIiBmb3Ig
d2luZG93cyBidWlsZC4KKyAgICAgICAgKiBranMvU2hlbGwuY3BwOiAgICAgICAgICAgICAgIFN3
aXRjaGVkIFNBTVBMSU5HX1RPT0xfRU5BQkxFRCB0byBFTkFCTEVfU0FNUExJTkdfVE9PTC4KKyAg
ICAgICAgKiBranMvY29uZmlnLmg6ICAgICAgICAgICAgICAgIEFkZGVkIEVOQUJMRV9TQU1QTElO
R19UT09MIGNvbmZpZyBvcHRpb24uCisgICAgICAgICoga2pzL25vZGVzLmNwcDogICAgICAgICAg
ICAgICBIZWFkZXIgaW5jbHVkZSB0byBmaXggbm9uLUFsbEluT25lIGJ1aWxkcy4KKwogMjAwOC0w
Ny0yNSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBi
dWlsZCBmaXgKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNTM1OCkKKysrIEph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL1ZNL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcCBc
CiAJSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvVk0vU2Ft
cGxpbmdUb29sLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2NvbXBpbGUuY3BwIFwK
IAlKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfZXhlYy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3Bj
cmUvcGNyZV90YWJsZXMuY3BwIFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJl
dmlzaW9uIDM1MzU4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDkgQEAgX19aTjNLSlMxMkpTR2xvYmFsRGF0YTE0c2hh
cmVkSW5zdGFuY2VFdgogX19aTjNLSlMxMkpTR2xvYmFsRGF0YTZjcmVhdGVFdgogX19aTjNLSlMx
MkpTR2xvYmFsRGF0YUQxRXYKIF9fWk4zS0pTMTJQcm9wZXJ0eVNsb3QxNXVuZGVmaW5lZEdldHRl
ckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSS1MwXworX19aTjNLSlMxMlNhbXBs
aW5nVG9vbDRkdW1wRVBOU185RXhlY1N0YXRlRQorX19aTjNLSlMxMlNhbXBsaW5nVG9vbDRzdG9w
RXYKK19fWk4zS0pTMTJTYW1wbGluZ1Rvb2w1c3RhcnRFagogX19aTjNLSlMxMlN0cmluZ09iamVj
dDE0ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pO
M0tKUzEyU3RyaW5nT2JqZWN0MTR0b1RoaXNKU1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4z
S0pTMTJTdHJpbmdPYmplY3QxNmdldFByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3
UHJvcGVydHlOYW1lQXJyYXlFCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCShyZXZp
c2lvbiAzNTM1OCkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBWTS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmNwcCBcCiAgICAgVk0vTWFjaGluZS5jcHAgXAogICAgIFZNL09wY29kZS5j
cHAgXAorICAgIFZNL1NhbXBsaW5nVG9vbC5jcHAgXAogICAgIFZNL1JlZ2lzdGVyRmlsZS5jcHAK
IAogIyBBbGxJbk9uZUZpbGUuY3BwIGhlbHBzIGdjYyBhbmFsaXplIGFuZCBvcHRpbWl6ZSBjb2Rl
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wJKHJldmlzaW9u
IDM1MzU4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAkod29y
a2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0Myw3IEBAIFNvdXJjZSBmaWxlcyBmb3IgSlNDb3JlLgog
ICAgICAgICBWTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAogICAgICAgICBWTS9NYWNoaW5l
LmNwcAogICAgICAgICBWTS9PcGNvZGUuY3BwCisgICAgICAgIFZNL1NhbXBsaW5nVG9vbC5jcHAK
ICAgICAgICAgVk0vUmVnaXN0ZXJGaWxlLmNwcAogICAgIDwvc2V0PgogICAgIDxzZXQgYXBwZW5k
PSIxIiB2YXI9IkpTQ09SRV9XVEZfU09VUkNFUyI+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDM1MzU4KQorKysgSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI2Miw2ICsxMjYyLDE0IEBACiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFZNXFNhbXBs
aW5nVG9vbC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxWTVxTYW1wbGluZ1Rvb2wuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFZNXFJlZ2lzdGVyLmgiDQogCQkJCT4N
CiAJCQk8L0ZpbGU+DQpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNTM1OCkKKysrIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDggQEAKIAkJNjU5MTI2QkQwQkREMTcyODAwMTkyMUZC
IC8qIEFsbEluT25lRmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NTkxMjZCQzBCREQxNzI4MDAxOTIxRkIgLyogQWxsSW5PbmVGaWxlLmNwcCAq
LzsgfTsKIAkJNjVERkM5MzMwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGQzkyRDA4RUExNzNB
MDBGNzMwMEIgLyogSGFzaFRhYmxlLmNwcCAqLzsgfTsKIAkJNjVGREU0OUMwQkREMUQ0QTAwRTgw
MTExIC8qIEFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVFMjE3QjgwOEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuY3BwICov
OyB9OworCQk4NjEzRjQ1QTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MTNGNDU4MEUzQTQz
M0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuY3BwICovOyB9OworCQk4NjEzRjQ1QjBFM0E0MzNF
MDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjEzRjQ1OTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdUb29s
LmggKi87IH07CiAJCTkwNUIwMkFFMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVha0Nv
dW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTA1QjAyQUQwRTI4NjQwRjAwNkRGODgyIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgKi87
IH07CiAJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDM0NjlC
MEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA3NTRDMTA4QjBGNjgwMDBB
QjMwNTYgLyogcGNyZV9jb21waWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMDc1NEJGMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUu
Y3BwICovOyB9OwpAQCAtNTU1LDYgKzU1Nyw4IEBACiAJCTY1RkIzRjQ4MDlEMTFCMjQwMEY0OURF
QiAvKiBncmFtbWFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBn
cmFtbWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2
RDAwM0RCRUQ5IC8qIEJvb2xlYW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm9vbGVhbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBT
Y29wZUNoYWluTWFyay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZUNo
YWluTWFyay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjEzRjQ1ODBFM0E0MzNF
MDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFNhbXBsaW5nVG9vbC5jcHA7IHBhdGggPSBWTS9TYW1wbGluZ1Rvb2wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjEzRjQ1OTBFM0E0MzNFMDBDOTQ4RkQgLyog
U2FtcGxpbmdUb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNhbXBsaW5n
VG9vbC5oOyBwYXRoID0gVk0vU2FtcGxpbmdUb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkwNUIwMkFEMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmQ291bnRlZExlYWtD
b3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTBEMzQ2OUIwRTI4NTI4
MDAwOTQ5MkVFIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWZDb3VudGVkTGVha0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8qIE93blB0ci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25QdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTk1OSw2ICs5NjMsOCBAQAogCQkxNDlCMTVFMDBEODFGODhEMDA5Q0I4QzcgLyog
dm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTg2MTNG
NDU4MEUzQTQzM0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuY3BwICovLAorCQkJCTg2MTNGNDU5
MEUzQTQzM0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuaCAqLywKIAkJCQkxNDlCMUE5RTBEODZF
RDczMDA5Q0I4QzcgLyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQkxNDlCMUE5RDBEODZFRDczMDA5
Q0I4QzcgLyogQ29kZUJsb2NrLmggKi8sCiAJCQkJQTcyNzAxQjQwREFERTk0OTAwRTU0OEQ3IC8q
IEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovLApAQCAtMTUwNCw2ICsxNTEwLDcgQEAKIAkJCQlCQzc1
NkZDOTBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRjYwNTE0MEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NUZERkExNjBFMjI5OTk4MDAwNkZCMDAgLyogSGVhdnlQcm9maWxlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk4NjEzRjQ1QjBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdU
b29sLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MDcsNiArMTgxNCw3IEBACiAJCQkJOTVDRDQ1NzYw
RTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTVGREZBMTQwRTIyOTk4RjAwMDZGQjAwIC8qIEhlYXZ5UHJvZmlsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MDVCMDJBRTBFMjg2NDBGMDA2REY4ODIgLyogUmVmQ291bnRlZExlYWtDb3Vu
dGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg2MTNGNDVBMEUzQTQzM0UwMEM5NDhGRCAvKiBT
YW1wbGluZ1Rvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9N
YWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAko
cmV2aXNpb24gMzUzNTgpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImNvbGxlY3Rvci5oIgogI2luY2x1
ZGUgImRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAib3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlNhbXBs
aW5nVG9vbC5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpZiBIQVZFKFNZU19USU1FX0gpCkBA
IC00NzMsMTIgKzQ3NCw4IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBNYWNoaW5lOjpjYWxsRXZh
bCgKIH0KIAogTWFjaGluZTo6TWFjaGluZSgpCi0gICAgOgotI2lmIFNBTVBMSU5HX1RPT0xfRU5B
QkxFRAotICAgICAgbV9zYW1wbGVyKDApLAotI2Vsc2UKLSAgICAgIG1fcmVlbnRyeURlcHRoKDAp
Ci0jZW5kaWYKKyAgICA6IG1fc2FtcGxlcigwKQorICAgICwgbV9yZWVudHJ5RGVwdGgoMCkKICAg
ICAsIG1fdGltZW91dFRpbWUoMCkKICAgICAsIG1fdGltZUF0TGFzdENoZWNrVGltZW91dCgwKQog
ICAgICwgbV90aW1lRXhlY3V0aW5nKDApCkBAIC0yMzcyLDcgKzIzNjksNyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICBKU1ZhbHVlKiB0aGlz
VmFsdWUgPSB0aGlzVmFsID09IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkgPyBleGVjLT5nbG9i
YWxUaGlzVmFsdWUoKSA6IHJbdGhpc1ZhbF0uanNWYWx1ZShleGVjKTsKICAgICAgICAgICAgIEFy
Z0xpc3QgYXJncyhyICsgZmlyc3RBcmcgKyAxLCBhcmdDb3VudCAtIDEpOwogCi0gICAgICAgICAg
ICBNQUNISU5FX1NBTVBMSU5HX2NhbGxpbmdOYXRpdmVGdW5jdGlvbigpOworICAgICAgICAgICAg
TUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0aW9uKCk7CiAKICAgICAgICAgICAgIEpT
VmFsdWUqIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4odiksIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAgICAgICAgICBWTV9D
SEVDS19FWENFUFRJT04oKTsKQEAgLTI0OTksNiArMjQ5Niw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGV4ZWMsIGNvbnN0cnVjdG9yKTsKIAogICAgICAgICAg
ICAgQXJnTGlzdCBhcmdzKHIgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7CisKKyAgICAg
ICAgICAgIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbigpOworCiAgICAgICAg
ICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdzKTsKIAogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCShyZXZpc2lvbiAzNTM1OCkKKysrIEphdmFTY3Jp
cHRDb3JlL1ZNL01hY2hpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBjbGFzcyBQcm9ncmFtTm9kZTsKICAgICBjbGFzcyBSZWdpc3RlcjsK
ICAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKKyAgICBjbGFzcyBTYW1wbGluZ1Rvb2w7CiAKICAg
ICBlbnVtIERlYnVnSG9va0lEIHsKICAgICAgICAgV2lsbEV4ZWN1dGVQcm9ncmFtLApAQCAtMTE5
LDEwICsxMjAsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIG1fdGltZW91dFRpbWUg
PSAwOwogICAgICAgICAgICAgbV90aW1lb3V0Q2hlY2tDb3VudCA9IDA7CiAgICAgICAgIH0KLSAg
ICAgICAgCi0jaWYgU0FNUExJTkdfVE9PTF9FTkFCTEVECisKICAgICAgICAgU2FtcGxpbmdUb29s
KiBtX3NhbXBsZXI7Ci0jZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gRXhlY3V0
aW9uRmxhZyB7IE5vcm1hbCwgSW5pdGlhbGl6ZUFuZFJldHVybiB9OwpJbmRleDogSmF2YVNjcmlw
dENvcmUvVk0vT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9PcGNv
ZGUuY3BwCShyZXZpc2lvbiAzNTM1OCkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL09wY29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDMyNCArMzAsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJPcGNvZGUuaCIKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgotI2luY2x1ZGUgIk1hY2hpbmUuaCIKLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIEtKUyB7CiAKLSNpZiBTQU1QTElOR19UT09MX0VOQUJMRUQgfHwgRFVNUF9P
UENPREVfU1RBVFMKLQotc3RhdGljIGNvbnN0IGNoYXIqIG9wY29kZU5hbWVzW10gPSB7Ci0gICAg
ImxvYWQgICAgICAgICAgICAgIiwKLSAgICAibmV3X29iamVjdCAgICAgICAiLAotICAgICJuZXdf
YXJyYXkgICAgICAgICIsCi0gICAgIm5ld19yZWdleHAgICAgICAgIiwKLSAgICAibW92ICAgICAg
ICAgICAgICAiLAotICAgIAotICAgICJub3QgICAgICAgICAgICAgICIsCi0gICAgImVxICAgICAg
ICAgICAgICAgIiwKLSAgICAibmVxICAgICAgICAgICAgICAiLAotICAgICJzdHJpY3RlcSAgICAg
ICAgICIsCi0gICAgIm5zdHJpY3RlcSAgICAgICAgIiwKLSAgICAibGVzcyAgICAgICAgICAgICAi
LAotICAgICJsZXNzZXEgICAgICAgICAgICIsCi0gICAgCi0gICAgInByZV9pbmMgICAgICAgICAg
IiwKLSAgICAicHJlX2RlYyAgICAgICAgICAiLAotICAgICJwb3N0X2luYyAgICAgICAgICIsCi0g
ICAgInBvc3RfZGVjICAgICAgICAgIiwKLSAgICAidG9fanNudW1iZXIgICAgICAiLAotICAgICJu
ZWdhdGUgICAgICAgICAgICIsCi0gICAgImFkZCAgICAgICAgICAgICAgIiwKLSAgICAibXVsICAg
ICAgICAgICAgICAiLAotICAgICJkaXYgICAgICAgICAgICAgICIsCi0gICAgIm1vZCAgICAgICAg
ICAgICAgIiwKLSAgICAic3ViICAgICAgICAgICAgICAiLAotICAgIAotICAgICJsc2hpZnQgICAg
ICAgICAgICIsCi0gICAgInJzaGlmdCAgICAgICAgICAgIiwKLSAgICAidXJzaGlmdCAgICAgICAg
ICAiLAotICAgICJiaXRhbmQgICAgICAgICAgICIsCi0gICAgImJpdHhvciAgICAgICAgICAgIiwK
LSAgICAiYml0b3IgICAgICAgICAgICAiLAotICAgICJiaXRub3QgICAgICAgICAgICIsCi0gICAg
Ci0gICAgImluc3RhbmNlb2YgICAgICAgIiwKLSAgICAidHlwZW9mICAgICAgICAgICAiLAotICAg
ICJpbiAgICAgICAgICAgICAgICIsCi0KLSAgICAicmVzb2x2ZSAgICAgICAgICAiLAotICAgICJy
ZXNvbHZlX3NraXAgICAgICIsCi0gICAgImdldF9zY29wZWRfdmFyICAgIiwKLSAgICAicHV0X3Nj
b3BlZF92YXIgICAiLAotICAgICJyZXNvbHZlX2Jhc2UgICAgICIsCi0gICAgInJlc29sdmVfd2l0
aF9iYXNlIiwKLSAgICAicmVzb2x2ZV9mdW5jICAgICAiLAotICAgICJnZXRfYnlfaWQgICAgICAg
ICIsCi0gICAgInB1dF9ieV9pZCAgICAgICAgIiwKLSAgICAiZGVsX2J5X2lkICAgICAgICAiLAot
ICAgICJnZXRfYnlfdmFsICAgICAgICIsCi0gICAgInB1dF9ieV92YWwgICAgICAgIiwKLSAgICAi
ZGVsX2J5X3ZhbCAgICAgICAiLAotICAgICJwdXRfYnlfaW5kZXggICAgICIsCi0gICAgInB1dF9n
ZXR0ZXIgICAgICAgIiwKLSAgICAicHV0X3NldHRlciAgICAgICAiLAotCi0gICAgImptcCAgICAg
ICAgICAgICAgIiwKLSAgICAianRydWUgICAgICAgICAgICAiLAotICAgICJqZmFsc2UgICAgICAg
ICAgICIsCi0gICAgImpsZXNzICAgICAgICAgICAgIiwKLSAgICAiam5sZXNzICAgICAgICAgICAi
LAotICAgICJqbXBfc2NvcGVzICAgICAgICIsCi0gICAgImxvb3AgICAgICAgICAgICAgIiwKLSAg
ICAibG9vcF9pZl90cnVlICAgICAiLAotICAgICJsb29wX2lmX2xlc3MgICAgICIsCi0gICAgInN3
aXRjaF9pbW0gICAgICAgIiwKLSAgICAic3dpdGNoX2NoYXIgICAgICAiLAotICAgICJzd2l0Y2hf
c3RyaW5nICAgICIsCi0KLSAgICAibmV3X2Z1bmMgICAgICAgICAiLAotICAgICJuZXdfZnVuY19l
eHAgICAgICIsCi0gICAgImNhbGwgICAgICAgICAgICAgIiwKLSAgICAiY2FsbF9ldmFsICAgICAg
ICAiLAotICAgICJyZXQgICAgICAgICAgICAgICIsCi0KLSAgICAiY29uc3RydWN0ICAgICAgICAi
LAotCi0gICAgImdldF9wbmFtZXMgICAgICAgIiwKLSAgICAibmV4dF9wbmFtZSAgICAgICAiLAot
Ci0gICAgInB1c2hfc2NvcGUgICAgICAgIiwKLSAgICAicG9wX3Njb3BlICAgICAgICAiLAotCi0g
ICAgImNhdGNoICAgICAgICAgICAgIiwKLSAgICAidGhyb3cgICAgICAgICAgICAiLAotICAgICJu
ZXdfZXJyb3IgICAgICAgICIsCi0KLSAgICAianNyICAgICAgICAgICAgICAiLAotICAgICJzcmV0
ICAgICAgICAgICAgICIsCi0KLSAgICAiZGVidWcgICAgICAgICAgICAiLAotCi0gICAgImVuZCAg
ICAgICAgICAgICAgIgotfTsKLQotI2VuZGlmCi0KLSNpZiBTQU1QTElOR19UT09MX0VOQUJMRUQK
LQotdm9pZCBTY29wZVNhbXBsZVJlY29yZDo6c2FtcGxlKENvZGVCbG9jayogY29kZUJsb2NrLCBJ
bnN0cnVjdGlvbiogdlBDKQotewotICAgIG1fdG90YWxDb3VudCsrOwotCi0gICAgaWYgKCFtX3Zw
Y0NvdW50cykgewotICAgICAgICBtX3NpemUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5zaXpl
KCk7Ci0gICAgICAgIG1fdnBjQ291bnRzID0gc3RhdGljX2Nhc3Q8aW50Kj4oY2FsbG9jKG1fc2l6
ZSwgc2l6ZW9mKGludCkpKTsKLSAgICAgICAgbV9jb2RlQmxvY2sgPSBjb2RlQmxvY2s7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgY29kZU9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWlu
dGVycHJldF9jYXN0PHB0cmRpZmZfdD4odlBDKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90
Pihjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpKSkgLyBzaXplb2YoSW5zdHJ1Y3Rpb24q
KTsKLSAgICAvLyBUaGlzIGNvdWxkIG9jY3VyIGlmIGNvZGVCbG9jayAmIHZQQyBhcmUgbm90IGNv
bnNpc3RlbnQgLSBlLmcuIHNhbXBsZSBtaWQgb3BfY2FsbC9vcF9yZXQuCi0gICAgaWYgKGNvZGVP
ZmZzZXQgPCBtX3NpemUpCi0gICAgICAgIG1fdnBjQ291bnRzW2NvZGVPZmZzZXRdKys7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaGVydHoydXModW5zaWduZWQgaGVydHopCi17Ci0gICAg
cmV0dXJuIDEwMDAwMDAgLyBoZXJ0ejsKLX0KLQotdm9pZCBTYW1wbGluZ1Rvb2w6OnJ1bigpCi17
Ci0gICAgd2hpbGUgKG1fcnVubmluZykgewotICAgICAgICB1c2xlZXAoaGVydHoydXMobV9oZXJ0
eikpOwotCi0gICAgICAgIG1fdG90YWxTYW1wbGVzKys7Ci0KLSAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX3JlY29yZGVkQ29kZUJsb2NrOwotICAgICAgICBJbnN0cnVjdGlvbiogdlBD
ID0gbV9yZWNvcmRlZFZQQzsKLQotICAgICAgICBpZiAoY29kZUJsb2NrICYmIHZQQykgewotICAg
ICAgICAgICAgU2NvcGVTYW1wbGVSZWNvcmQqIHJlY29yZCA9IG1fc2NvcGVTYW1wbGVNYXAtPmdl
dChjb2RlQmxvY2stPm93bmVyTm9kZSk7Ci0gICAgICAgICAgICBpZiAocmVjb3JkKQotICAgICAg
ICAgICAgICAgIHJlY29yZC0+c2FtcGxlKGNvZGVCbG9jaywgdlBDKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCogU2FtcGxpbmdUb29sOjp0aHJlYWRTdGFydEZ1bmModm9pZCogc2FtcGxp
bmdUb29sKQotewotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2FtcGxpbmdUb29sKj4oc2FtcGxpbmdU
b29sKS0+cnVuKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU2FtcGxpbmdUb29sOjpub3Rp
ZnlPZlNjb3BlKFNjb3BlTm9kZSogc2NvcGUpCi17Ci0gICAgbV9zY29wZVNhbXBsZU1hcC0+c2V0
KHNjb3BlLCBuZXcgU2NvcGVTYW1wbGVSZWNvcmQoc2NvcGUpKTsKLX0KLQotdm9pZCBTYW1wbGlu
Z1Rvb2w6OnN0YXJ0KHVuc2lnbmVkIGhlcnR6KQotewotICAgIEFTU0VSVCghbV9ydW5uaW5nKTsK
LSAgICBtX3J1bm5pbmcgPSB0cnVlOwotICAgIG1faGVydHogPSBoZXJ0ejsKLSAgICBwdGhyZWFk
X2NyZWF0ZSgmbV9zYW1wbGluZ1RocmVhZCwgMCwgdGhyZWFkU3RhcnRGdW5jLCB0aGlzKTsKLX0K
LQotdm9pZCBTYW1wbGluZ1Rvb2w6OnN0b3AoKQotewotICAgIEFTU0VSVChtX3J1bm5pbmcpOwot
ICAgIG1fcnVubmluZyA9IGZhbHNlOwotICAgIHB0aHJlYWRfam9pbihtX3NhbXBsaW5nVGhyZWFk
LCAwKTsKLX0KLQotc3RydWN0IE9wY29kZVNhbXBsZUluZm8KLXsKLSAgICBPcGNvZGVJRCBvcGNv
ZGU7Ci0gICAgbG9uZyBsb25nIGNvdW50OwotfTsKKyNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkg
fHwgRFVNUF9PUENPREVfU1RBVFMKIAotc3RydWN0IExpbmVDb3VudEluZm8KLXsKLSAgICB1bnNp
Z25lZCBsaW5lOwotICAgIHVuc2lnbmVkIGNvdW50OworY29uc3QgY2hhciogY29uc3Qgb3Bjb2Rl
TmFtZXNbXSA9IHsKKyNkZWZpbmUgT1BDT0RFX05BTUVfRU5UUlkob3Bjb2RlKSAjb3Bjb2RlLAor
ICAgIEZPUl9FQUNIX09QQ09ERV9JRChPUENPREVfTkFNRV9FTlRSWSkKKyN1bmRlZiBPUENPREVf
TkFNRV9FTlRSWQogfTsKIAotc3RhdGljIGludCBjb21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5n
KGNvbnN0IHZvaWQqIGxlZnQsIGNvbnN0IHZvaWQqIHJpZ2h0KQotewotICAgIGNvbnN0IExpbmVD
b3VudEluZm8gKmxlZnRMaW5lQ291bnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IExpbmVDb3Vu
dEluZm8gKj4obGVmdCk7Ci0gICAgY29uc3QgTGluZUNvdW50SW5mbyAqcmlnaHRMaW5lQ291bnQg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IExpbmVDb3VudEluZm8gKj4ocmlnaHQpOwotCi0gICAg
cmV0dXJuIChsZWZ0TGluZUNvdW50LT5saW5lID4gcmlnaHRMaW5lQ291bnQtPmxpbmUpID8gMSA6
IChsZWZ0TGluZUNvdW50LT5saW5lIDwgcmlnaHRMaW5lQ291bnQtPmxpbmUpID8gLTEgOiAwOwot
fQotCi1zdGF0aWMgaW50IGNvbXBhcmVPcGNvZGVJbmRpY2VzU2FtcGxpbmcoY29uc3Qgdm9pZCog
bGVmdCwgY29uc3Qgdm9pZCogcmlnaHQpCi17Ci0gICAgY29uc3QgT3Bjb2RlU2FtcGxlSW5mbyAq
bGVmdFNhbXBsZUluZm8gPSByZWludGVycHJldF9jYXN0PGNvbnN0IE9wY29kZVNhbXBsZUluZm8g
Kj4obGVmdCk7Ci0gICAgY29uc3QgT3Bjb2RlU2FtcGxlSW5mbyAqcmlnaHRTYW1wbGVJbmZvID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBPcGNvZGVTYW1wbGVJbmZvICo+KHJpZ2h0KTsKLQotICAg
IHJldHVybiAobGVmdFNhbXBsZUluZm8tPmNvdW50IDwgcmlnaHRTYW1wbGVJbmZvLT5jb3VudCkg
PyAxIDogKGxlZnRTYW1wbGVJbmZvLT5jb3VudCA+IHJpZ2h0U2FtcGxlSW5mby0+Y291bnQpID8g
LTEgOiAwOwotfQotCi1zdGF0aWMgaW50IGNvbXBhcmVTY29wZVNhbXBsZVJlY29yZHMoY29uc3Qg
dm9pZCogbGVmdCwgY29uc3Qgdm9pZCogcmlnaHQpCi17Ci0gICAgY29uc3QgU2NvcGVTYW1wbGVS
ZWNvcmQqIGNvbnN0IGxlZnRWYWx1ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBTY29wZVNhbXBsZVJl
Y29yZCogY29uc3QgKj4obGVmdCk7Ci0gICAgY29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0
IHJpZ2h0VmFsdWUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0
ICo+KHJpZ2h0KTsKLQotICAgIHJldHVybiAobGVmdFZhbHVlLT5tX3RvdGFsQ291bnQgPCByaWdo
dFZhbHVlLT5tX3RvdGFsQ291bnQpID8gMSA6IChsZWZ0VmFsdWUtPm1fdG90YWxDb3VudCA+IHJp
Z2h0VmFsdWUtPm1fdG90YWxDb3VudCkgPyAtMSA6IDA7Ci19Ci0KLXZvaWQgU2FtcGxpbmdUb29s
OjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBUaWRpZXMgdXAgU3VuU3BpZGVyIG91
dHB1dCBieSByZW1vdmluZyBzaG9ydCBzY3JpcHRzIC0gc3VjaCBhIHNtYWxsIG51bWJlciBvZiBz
YW1wbGVzIHdvdWxkIGxpa2VseSBub3QgYmUgdXNlZnVsIGFueWhvdy4KLSAgICBpZiAobV90b3Rh
bFNhbXBsZXMgPCAxMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vICgxKSBDYWxjdWxh
dGUgJ3RvdGFsQ29kZUJsb2NrU2FtcGxlcycsIGJ1aWxkIGFuZCBzb3J0ICdjb2RlQmxvY2tTYW1w
bGVzJyBhcnJheS4KLQotICAgIGludCBzY29wZUNvdW50ID0gbV9zY29wZVNhbXBsZU1hcC0+c2l6
ZSgpOwotICAgIGxvbmcgbG9uZyB0b3RhbENvZGVCbG9ja1NhbXBsZXMgPSAwOwotICAgIFNjb3Bl
U2FtcGxlUmVjb3JkKiBjb2RlQmxvY2tTYW1wbGVzW3Njb3BlQ291bnRdOwotICAgIFNjb3BlU2Ft
cGxlUmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gbV9zY29wZVNhbXBsZU1hcC0+YmVnaW4oKTsK
LSAgICBmb3IgKGludCBpPTA7IGkgPCBzY29wZUNvdW50OyArK2ksICsraXRlcikgewotICAgICAg
ICBjb2RlQmxvY2tTYW1wbGVzW2ldID0gaXRlci0+c2Vjb25kOwotICAgICAgICB0b3RhbENvZGVC
bG9ja1NhbXBsZXMgKz0gY29kZUJsb2NrU2FtcGxlc1tpXS0+bV90b3RhbENvdW50OwotICAgIH0K
LSAgICBtZXJnZXNvcnQoY29kZUJsb2NrU2FtcGxlcywgc2NvcGVDb3VudCwgc2l6ZW9mKFNjb3Bl
U2FtcGxlUmVjb3JkKiksIGNvbXBhcmVTY29wZVNhbXBsZVJlY29yZHMpOwotCi0gICAgLy8gKDIp
IFByaW50IGRhdGEgZnJvbSAnY29kZUJsb2NrU2FtcGxlcycgYXJyYXksIGNhbGN1bGF0ZSAndG90
YWxPcGNvZGVTYW1wbGVzJywgcG9wdWxhdGUgJ29wY29kZVNhbXBsZUNvdW50cycgYXJyYXkuCi0K
LSAgICBsb25nIGxvbmcgdG90YWxPcGNvZGVTYW1wbGVzID0gMDsKLSAgICBsb25nIGxvbmcgb3Bj
b2RlU2FtcGxlQ291bnRzW251bU9wY29kZUlEc10gPSB7IDAgfTsKLQotICAgIGZwcmludGYoc3Rk
b3V0LCAiXG5CbG9jayBzYW1wbGluZyByZXN1bHRzXG5cbiIpOyAKLSAgICBmcHJpbnRmKHN0ZG91
dCwgIlRvdGFsIGJsb2NrcyBzYW1wbGVkICh0b3RhbCBzYW1wbGVzKTogJWxsZCAoJWxsZClcblxu
IiwgdG90YWxDb2RlQmxvY2tTYW1wbGVzLCBtX3RvdGFsU2FtcGxlcyk7Ci0KLSAgICBmb3IgKGlu
dCBpPTA7IGkgPCBzY29wZUNvdW50OyBpKyspIHsKLSAgICAgICAgU2NvcGVTYW1wbGVSZWNvcmQg
KnJlY29yZCA9IGNvZGVCbG9ja1NhbXBsZXNbaV07Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gcmVjb3JkLT5tX2NvZGVCbG9jazsKLQotICAgICAgICBkb3VibGUgdG90YWxQZXJjZW50
ID0gKHJlY29yZC0+bV90b3RhbENvdW50ICogMTAwLjApL21fdG90YWxTYW1wbGVzOwotICAgICAg
ICBkb3VibGUgYmxvY2tQZXJjZW50ID0gKHJlY29yZC0+bV90b3RhbENvdW50ICogMTAwLjApL3Rv
dGFsQ29kZUJsb2NrU2FtcGxlczsKLQotICAgICAgICBpZiAoKGJsb2NrUGVyY2VudCA+PSAxKSAm
JiBjb2RlQmxvY2spIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBjb2RlID0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKLSAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiIyVk
OiAlczolZDogc2FtcGxlZCAlZCB0aW1lcyAtICUuM2YlJSAoJS4zZiUlKVxuIiwgaSsxLCByZWNv
cmQtPm1fc2NvcGUtPnNvdXJjZVVSTCgpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBjb2RlQmxvY2st
PmxpbmVOdW1iZXJGb3JWUEMoY29kZSksIHJlY29yZC0+bV90b3RhbENvdW50LCBibG9ja1BlcmNl
bnQsIHRvdGFsUGVyY2VudCk7Ci0gICAgICAgICAgICBpZiAoaSA8IDEwKSB7Ci0gICAgICAgICAg
ICAgICAgSGFzaE1hcDx1bnNpZ25lZCx1bnNpZ25lZD4gbGluZUNvdW50czsKLSAgICAgICAgICAg
ICAgICBjb2RlQmxvY2stPmR1bXAoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBvcCA9IDA7IG9wIDwgcmVjb3JkLT5tX3NpemU7ICsrb3ApIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGNvdW50ID0gcmVjb3JkLT5tX3ZwY0NvdW50c1tvcF07Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjb3VudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgWyUg
NGRdIGhhcyBzYW1wbGUgY291bnQ6ICUgNGRcbiIsIG9wLCBjb3VudCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsaW5lID0gY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKGNv
ZGUrb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50cy5zZXQobGluZSwgKGxp
bmVDb3VudHMuY29udGFpbnMobGluZSkgPyBsaW5lQ291bnRzLmdldChsaW5lKSA6IDApICsgY291
bnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgICAgICBpbnQgbGluZXNDb3VudCA9IGxp
bmVDb3VudHMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIExpbmVDb3VudEluZm8gbGluZUNvdW50
SW5mb1tsaW5lc0NvdW50XTsKLSAgICAgICAgICAgICAgICBpbnQgbGluZW5vID0gMDsKLSAgICAg
ICAgICAgICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsdW5zaWduZWQ+OjppdGVyYXRvciBpdGVy
ID0gbGluZUNvdW50cy5iZWdpbigpOyBpdGVyICE9IGxpbmVDb3VudHMuZW5kKCk7ICsraXRlciwg
KytsaW5lbm8pIHsKLSAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmxp
bmUgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5l
bm9dLmNvdW50ID0gaXRlci0+c2Vjb25kOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBtZXJnZXNvcnQobGluZUNvdW50SW5mbywgbGluZXNDb3VudCwgc2l6ZW9mKExpbmVDb3Vu
dEluZm8pLCBjb21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5nKTsKLSAgICAgICAgICAgICAgICBm
b3IgKGxpbmVubyA9IDA7IGxpbmVubyA8IGxpbmVzQ291bnQ7ICsrbGluZW5vKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHByaW50ZigiICAgIExpbmUgIyVkIGhhcyBzYW1wbGUgY291bnQgJWQuXG4i
LCBsaW5lQ291bnRJbmZvW2xpbmVub10ubGluZSwgbGluZUNvdW50SW5mb1tsaW5lbm9dLmNvdW50
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocmVjb3JkLT5tX3Zw
Y0NvdW50cyAmJiBjb2RlQmxvY2spIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbnMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBvcCA9IDA7IG9wIDwgcmVjb3JkLT5tX3NpemU7ICsrb3ApIHsKLSAgICAgICAg
ICAgICAgICBPcGNvZGUgb3Bjb2RlID0gaW5zdHJ1Y3Rpb25zW29wXS51Lm9wY29kZTsKLSAgICAg
ICAgICAgICAgICBpZiAoZXhlYy0+bWFjaGluZSgpLT5pc09wY29kZShvcGNvZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRvdGFsT3Bjb2RlU2FtcGxlcyArPSByZWNvcmQtPm1fdnBjQ291bnRz
W29wXTsKLSAgICAgICAgICAgICAgICAgICAgb3Bjb2RlU2FtcGxlQ291bnRzW2V4ZWMtPm1hY2hp
bmUoKS0+Z2V0T3Bjb2RlSUQob3Bjb2RlKV0gKz0gcmVjb3JkLT5tX3ZwY0NvdW50c1tvcF07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHBy
aW50ZigiXG4iKTsKLQotICAgIC8vICgzKSBCdWlsZCBhbmQgc29ydCAnb3Bjb2RlU2FtcGxlSW5m
bycgYXJyYXkuCi0KLSAgICBPcGNvZGVTYW1wbGVJbmZvIG9wY29kZVNhbXBsZUluZm9bbnVtT3Bj
b2RlSURzXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wY29kZUlEczsgKytpKSB7Ci0g
ICAgICAgIG9wY29kZVNhbXBsZUluZm9baV0ub3Bjb2RlID0gKE9wY29kZUlEKWk7Ci0gICAgICAg
IG9wY29kZVNhbXBsZUluZm9baV0uY291bnQgPSBvcGNvZGVTYW1wbGVDb3VudHNbaV07Ci0gICAg
fQotICAgIG1lcmdlc29ydChvcGNvZGVTYW1wbGVJbmZvLCBudW1PcGNvZGVJRHMsIHNpemVvZihP
cGNvZGVTYW1wbGVJbmZvKSwgY29tcGFyZU9wY29kZUluZGljZXNTYW1wbGluZyk7Ci0KLSAgICAv
LyAoNCkgUHJpbnQgT3Bjb2RlIHNhbXBsaW5nIHJlc3VsdHMuCi0gICAgCi0gICAgZnByaW50Zihz
dGRvdXQsICJcbk9wY29kZSBzYW1wbGluZyByZXN1bHRzXG5cbiIpOyAKLSAgICAKLSAgICBmcHJp
bnRmKHN0ZG91dCwgIlRvdGFsIG9wY29kZXMgc2FtcGxlZCAodG90YWwgc2FtcGxlcyk6ICVsbGQg
KCVsbGQpXG5cbiIsIHRvdGFsT3Bjb2RlU2FtcGxlcywgbV90b3RhbFNhbXBsZXMpOwotICAgIGZw
cmludGYoc3Rkb3V0LCAiT3Bjb2RlcyBpbiBvcmRlcjpcblxuIik7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1PcGNvZGVJRHM7ICsraSkgewotICAgICAgICBsb25nIGxvbmcgY291bnQgPSBv
cGNvZGVTYW1wbGVDb3VudHNbaV07Ci0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJXM6XHQlNmxs
ZFx0JS4zZiUlXHQoJS4zZiUlKVxuIiwgb3Bjb2RlTmFtZXNbaV0sIGNvdW50LCAoKGRvdWJsZSlj
b3VudCAqIDEwMCkvdG90YWxPcGNvZGVTYW1wbGVzLCAoKGRvdWJsZSljb3VudCAqIDEwMCkvbV90
b3RhbFNhbXBsZXMpOyAgICAKLSAgICB9Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbiIpOwotICAg
IGZwcmludGYoc3Rkb3V0LCAiT3Bjb2RlcyBieSBzYW1wbGUgY291bnQ6XG5cbiIpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtT3Bjb2RlSURzOyArK2kpIHsKLSAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlID0gb3Bjb2RlU2FtcGxlSW5mb1tpXS5vcGNvZGU7Ci0gICAgICAgIGxvbmcgbG9uZyBj
b3VudCA9IG9wY29kZVNhbXBsZUluZm9baV0uY291bnQ7Ci0gICAgICAgIGZwcmludGYoc3Rkb3V0
LCAiJXM6XHQlNmxsZFx0JS4zZiUlXHQoJS4zZiUlKVxuIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlXSwg
Y291bnQsICgoZG91YmxlKWNvdW50ICogMTAwKS90b3RhbE9wY29kZVNhbXBsZXMsICgoZG91Ymxl
KWNvdW50ICogMTAwKS9tX3RvdGFsU2FtcGxlcyk7ICAgIAotICAgIH0KLSAgICBmcHJpbnRmKHN0
ZG91dCwgIlxuIik7Ci19Ci0KICNlbmRpZgogCi0KICNpZiBEVU1QX09QQ09ERV9TVEFUUwogCiBs
b25nIGxvbmcgT3Bjb2RlU3RhdHM6Om9wY29kZUNvdW50c1tudW1PcGNvZGVJRHNdOwpAQCAtNDI1
LDcgKzEyMSw3IEBAIE9wY29kZVN0YXRzOjp+T3Bjb2RlU3RhdHMoKQogCiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1PcGNvZGVJRHM7ICsraSkgewogICAgICAgICBpbnQgaW5kZXggPSBzb3J0
ZWRJbmRpY2VzW2ldOwotICAgICAgICBwcmludGYoIiVzOiAlbGxkIC0gJS4yZiUlXG4iLCBvcGNv
ZGVOYW1lc1tpbmRleF0sIG9wY29kZUNvdW50c1tpbmRleF0sICgoZG91YmxlKSBvcGNvZGVDb3Vu
dHNbaW5kZXhdKSAvICgoZG91YmxlKSB0b3RhbEluc3RydWN0aW9ucykgKiAxMDAuMCk7ICAgIAor
ICAgICAgICBwcmludGYoIiVzOiVzICVsbGQgLSAlLjJmJSVcbiIsIG9wY29kZU5hbWVzW2luZGV4
XSwgcGFkT3Bjb2RlTmFtZSgoT3Bjb2RlSUQpaW5kZXgsIDI0KSwgb3Bjb2RlQ291bnRzW2luZGV4
XSwgKChkb3VibGUpIG9wY29kZUNvdW50c1tpbmRleF0pIC8gKChkb3VibGUpIHRvdGFsSW5zdHJ1
Y3Rpb25zKSAqIDEwMC4wKTsgICAgCiAgICAgfQogICAgIAogICAgIHByaW50ZigiXG4iKTsKQEAg
LTQzOCw3ICsxMzQsNyBAQCBPcGNvZGVTdGF0czo6fk9wY29kZVN0YXRzKCkKICAgICAgICAgaWYg
KCFjb3VudCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCIl
cyAlczogJWxsZCAlLjJmJSVcbiIsIG9wY29kZU5hbWVzW2luZGV4UGFpci5maXJzdF0sIG9wY29k
ZU5hbWVzW2luZGV4UGFpci5zZWNvbmRdLCBjb3VudCwgKChkb3VibGUpIGNvdW50KSAvICgoZG91
YmxlKSB0b3RhbEluc3RydWN0aW9uUGFpcnMpICogMTAwLjApOworICAgICAgICBwcmludGYoIiVz
JXMgJXM6JXMgJWxsZCAlLjJmJSVcbiIsIG9wY29kZU5hbWVzW2luZGV4UGFpci5maXJzdF0sIHBh
ZE9wY29kZU5hbWUoKE9wY29kZUlEKWluZGV4UGFpci5maXJzdCwgMjQpLCBvcGNvZGVOYW1lc1tp
bmRleFBhaXIuc2Vjb25kXSwgcGFkT3Bjb2RlTmFtZSgoT3Bjb2RlSUQpaW5kZXhQYWlyLnNlY29u
ZCwgMjQpLCBjb3VudCwgKChkb3VibGUpIGNvdW50KSAvICgoZG91YmxlKSB0b3RhbEluc3RydWN0
aW9uUGFpcnMpICogMTAwLjApOwogICAgIH0KICAgICAKICAgICBwcmludGYoIlxuIik7CkBAIC00
NTAsNyArMTQ2LDcgQEAgT3Bjb2RlU3RhdHM6On5PcGNvZGVTdGF0cygpCiAgICAgICAgIGRvdWJs
ZSBvcGNvZGVQcm9wb3J0aW9uID0gKChkb3VibGUpIG9wY29kZUNvdW50KSAvICgoZG91YmxlKSB0
b3RhbEluc3RydWN0aW9ucyk7CiAgICAgICAgIGlmIChvcGNvZGVQcm9wb3J0aW9uIDwgMC4wMDAx
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHByaW50ZigiXG4lczogJWxsZCAtICUuMmYl
JVxuIiwgb3Bjb2RlTmFtZXNbaW5kZXhdLCBvcGNvZGVDb3VudCwgb3Bjb2RlUHJvcG9ydGlvbiAq
IDEwMC4wKTsKKyAgICAgICAgcHJpbnRmKCJcbiVzOiVzICVsbGQgLSAlLjJmJSVcbiIsIG9wY29k
ZU5hbWVzW2luZGV4XSwgcGFkT3Bjb2RlTmFtZSgoT3Bjb2RlSUQpaW5kZXgsIDI0KSwgb3Bjb2Rl
Q291bnQsIG9wY29kZVByb3BvcnRpb24gKiAxMDAuMCk7CiAKICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCBudW1PcGNvZGVJRHMgKiBudW1PcGNvZGVJRHM7ICsraikgewogICAgICAgICAgICAg
cGFpcjxpbnQsIGludD4gaW5kZXhQYWlyID0gc29ydGVkUGFpckluZGljZXNbal07CkBAIC00NjMs
NyArMTU5LDcgQEAgT3Bjb2RlU3RhdHM6On5PcGNvZGVTdGF0cygpCiAgICAgICAgICAgICBpZiAo
aW5kZXhQYWlyLmZpcnN0ICE9IGluZGV4ICYmIGluZGV4UGFpci5zZWNvbmQgIT0gaW5kZXgpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIHByaW50ZigiICAgICVzICVz
OiAlbGxkIC0gJS4yZiUlXG4iLCBvcGNvZGVOYW1lc1tpbmRleFBhaXIuZmlyc3RdLCBvcGNvZGVO
YW1lc1tpbmRleFBhaXIuc2Vjb25kXSwgcGFpckNvdW50LCBwYWlyUHJvcG9ydGlvbiAqIDEwMC4w
KTsKKyAgICAgICAgICAgIHByaW50ZigiICAgICVzJXMgJXM6JXMgJWxsZCAtICUuMmYlJVxuIiwg
b3Bjb2RlTmFtZXNbaW5kZXhQYWlyLmZpcnN0XSwgcGFkT3Bjb2RlTmFtZSgoT3Bjb2RlSUQpaW5k
ZXhQYWlyLmZpcnN0LCAyNCksIG9wY29kZU5hbWVzW2luZGV4UGFpci5zZWNvbmRdLCBwYWRPcGNv
ZGVOYW1lKChPcGNvZGVJRClpbmRleFBhaXIuc2Vjb25kLCAyNCksIHBhaXJDb3VudCwgcGFpclBy
b3BvcnRpb24gKiAxMDAuMCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgfQpAQCAtNDg3LDQg
KzE4Myw0IEBAIHZvaWQgT3Bjb2RlU3RhdHM6OnJlc2V0TGFzdEluc3RydWN0aW9uKCkKIAogI2Vu
ZGlmCiAKLX0gLy8gbmFtZXNwYWNlIFdURgorfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9WTS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9P
cGNvZGUuaAkocmV2aXNpb24gMzUzNTgpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEzIEBACiAjaWZuZGVmIE9wY29kZXNfaAogI2Rl
ZmluZSBPcGNvZGVzX2gKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KIAogbmFtZXNwYWNlIEtKUyB7CiAKLSNkZWZpbmUgU0FNUExJTkdfVE9PTF9FTkFCTEVEIDAK
ICNkZWZpbmUgRFVNUF9PUENPREVfU1RBVFMgMAogCiAgICAgI2RlZmluZSBGT1JfRUFDSF9PUENP
REVfSUQobWFjcm8pIFwKQEAgLTE0OCwxMTggKzE0OSwyNSBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICB0eXBlZGVmIE9wY29kZUlEIE9wY29kZTsKICNlbmRpZgogCi0gICAgY2xhc3MgRXhlY1N0YXRl
OwotICAgIGNsYXNzIFNjb3BlTm9kZTsKLSAgICBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgc3RydWN0
IEluc3RydWN0aW9uOwotCi0jaWYgU0FNUExJTkdfVE9PTF9FTkFCTEVECisjaWYgRU5BQkxFKFNB
TVBMSU5HX1RPT0wpIHx8IERVTVBfT1BDT0RFX1NUQVRTCiAKLSAgICBzdHJ1Y3QgU2NvcGVTYW1w
bGVSZWNvcmQKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxTY29wZU5vZGU+IG1fc2NvcGU7Ci0gICAg
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0gICAgICAgIGludCBtX3RvdGFsQ291bnQ7Ci0g
ICAgICAgIGludCogbV92cGNDb3VudHM7Ci0gICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAgICAg
ICAgCi0gICAgICAgIFNjb3BlU2FtcGxlUmVjb3JkKFNjb3BlTm9kZSogc2NvcGUpCi0gICAgICAg
ICAgICA6IG1fc2NvcGUoc2NvcGUpCi0gICAgICAgICAgICAsIG1fY29kZUJsb2NrKDApCi0gICAg
ICAgICAgICAsIG1fdG90YWxDb3VudCgwKQotICAgICAgICAgICAgLCBtX3ZwY0NvdW50cygwKQot
ICAgICAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICB+U2NvcGVTYW1wbGVSZWNvcmQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bV92cGNDb3VudHMpCi0gICAgICAgICAgICAgICAgZnJlZShtX3ZwY0NvdW50cyk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2FtcGxlKENvZGVCbG9jayogY29kZUJsb2NrLCBJ
bnN0cnVjdGlvbiogdlBDKTsKLSAgICB9OworI2RlZmluZSBQQURESU5HX1NUUklORyAiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiCisjZGVmaW5lIFBBRERJTkdfU1RSSU5HX0xFTkdU
SCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RybGVuKFBBRERJTkdfU1RSSU5HKSkKIAotICAgIHR5
cGVkZWYgV1RGOjpIYXNoTWFwPFNjb3BlTm9kZSosIFNjb3BlU2FtcGxlUmVjb3JkKj4gU2NvcGVT
YW1wbGVSZWNvcmRNYXA7CisgICAgZXh0ZXJuIGNvbnN0IGNoYXIqIGNvbnN0IG9wY29kZU5hbWVz
W107CiAKLSAgICBjbGFzcyBTYW1wbGluZ1Rvb2wKKyAgICBpbmxpbmUgY29uc3QgY2hhciogcGFk
T3Bjb2RlTmFtZShPcGNvZGVJRCBvcCwgdW5zaWduZWQgd2lkdGgpCiAgICAgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgU2FtcGxpbmdUb29sKCkKLSAgICAgICAgICAgIDogbV9ydW5uaW5nKGZhbHNl
KQotICAgICAgICAgICAgLCBtX3JlY29yZGVkQ29kZUJsb2NrKDApCi0gICAgICAgICAgICAsIG1f
cmVjb3JkZWRWUEMoMCkKLSAgICAgICAgICAgICwgbV90b3RhbFNhbXBsZXMoMCkKLSAgICAgICAg
ICAgICwgbV9zY29wZVNhbXBsZU1hcChuZXcgU2NvcGVTYW1wbGVSZWNvcmRNYXAoKSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgflNhbXBsaW5nVG9vbCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoU2NvcGVTYW1wbGVSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nj
b3BlU2FtcGxlTWFwLT5iZWdpbigpOyBpdGVyICE9IG1fc2NvcGVTYW1wbGVNYXAtPmVuZCgpOyAr
K2l0ZXIpCi0gICAgICAgICAgICAgICAgZGVsZXRlIGl0ZXItPnNlY29uZDsKLSAgICAgICAgICAg
IGRlbGV0ZSBtX3Njb3BlU2FtcGxlTWFwOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzdGFy
dCh1bnNpZ25lZCBoZXJ0ej0xMDAwKTsKLSAgICAgICAgdm9pZCBzdG9wKCk7Ci0gICAgICAgIHZv
aWQgZHVtcChFeGVjU3RhdGUqKTsKLQotICAgICAgICB2b2lkIG5vdGlmeU9mU2NvcGUoU2NvcGVO
b2RlKiBzY29wZSk7Ci0KLSAgICAgICAgdm9pZCBzYW1wbGUoQ29kZUJsb2NrKiByZWNvcmRlZENv
ZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHJlY29yZGVkVlBDKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX3JlY29yZGVkQ29kZUJsb2NrID0gcmVjb3JkZWRDb2RlQmxvY2s7Ci0gICAgICAgICAgICBt
X3JlY29yZGVkVlBDID0gcmVjb3JkZWRWUEM7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBy
aXZhdGVFeGVjdXRlUmV0dXJuZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3JlY29yZGVk
Q29kZUJsb2NrID0gMDsKLSAgICAgICAgICAgIG1fcmVjb3JkZWRWUEMgPSAwOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICB2b2lkIGNhbGxpbmdOYXRpdmVGdW5jdGlvbigpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1fcmVjb3JkZWRDb2RlQmxvY2sgPSAwOwotICAgICAgICAgICAgbV9y
ZWNvcmRlZFZQQyA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgc3RhdGljIHZvaWQqIHRocmVhZFN0YXJ0RnVuYyh2b2lkKik7Ci0gICAgICAgIHZvaWQgcnVu
KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBTYW1wbGluZyB0aHJlYWQgc3RhdGUuCi0gICAgICAg
IGJvb2wgbV9ydW5uaW5nOwotICAgICAgICB1bnNpZ25lZCBtX2hlcnR6OwotICAgICAgICBwdGhy
ZWFkX3QgbV9zYW1wbGluZ1RocmVhZDsKLQotICAgICAgICAvLyBTdGF0ZSB0cmFja2VkIGJ5IHRo
ZSBtYWluIHRocmVhZCwgdXNlZCBieSB0aGUgc2FtcGxpbmcgdGhyZWFkLgotICAgICAgICBDb2Rl
QmxvY2sqIG1fcmVjb3JkZWRDb2RlQmxvY2s7Ci0gICAgICAgIEluc3RydWN0aW9uKiBtX3JlY29y
ZGVkVlBDOwotCi0gICAgICAgIC8vIEdhdGhlcmVkIHNhbXBsZSBkYXRhLgotICAgICAgICBsb25n
IGxvbmcgbV90b3RhbFNhbXBsZXM7Ci0gICAgICAgIFNjb3BlU2FtcGxlUmVjb3JkTWFwKiBtX3Nj
b3BlU2FtcGxlTWFwOwotICAgIH07CisgICAgICAgIHVuc2lnbmVkIHBhZCA9IHdpZHRoIC0gc3Ry
bGVuKG9wY29kZU5hbWVzW29wXSk7CisgICAgICAgIHBhZCA9IHN0ZDo6bWluKHBhZCwgUEFERElO
R19TVFJJTkdfTEVOR1RIKTsKKyAgICAgICAgcmV0dXJuIFBBRERJTkdfU1RSSU5HICsgUEFERElO
R19TVFJJTkdfTEVOR1RIIC0gcGFkOworICAgIH0KIAotI2VuZGlmCisjdW5kZWYgUEFERElOR19T
VFJJTkdfTEVOR1RICisjdW5kZWYgUEFERElOR19TVFJJTkcKIAotLy8gU0NPUEVOT0RFXyAvIE1B
Q0hJTkVfIG1hY3JvcyBmb3IgdXNlIGZyb20gd2l0aGluIG1lbWJlciBtZXRob2RzIG9uIFNjb3Bl
Tm9kZSAvIE1hY2hpbmUgcmVzcGVjdGl2ZWx5LgotI2lmIFNBTVBMSU5HX1RPT0xfRU5BQkxFRAot
I2RlZmluZSBTQ09QRU5PREVfU0FNUExJTkdfbm90aWZ5T2ZTY29wZShzYW1wbGVyKSBzYW1wbGVy
LT5ub3RpZnlPZlNjb3BlKHRoaXMpCi0jZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfc2FtcGxlKGNv
ZGVCbG9jaywgdlBDKSBtX3NhbXBsZXItPnNhbXBsZShjb2RlQmxvY2ssIHZQQykKLSNkZWZpbmUg
TUFDSElORV9TQU1QTElOR19wcml2YXRlRXhlY3V0ZVJldHVybmVkKCkgbV9zYW1wbGVyLT5wcml2
YXRlRXhlY3V0ZVJldHVybmVkKCkKLSNkZWZpbmUgTUFDSElORV9TQU1QTElOR19jYWxsaW5nTmF0
aXZlRnVuY3Rpb24oKSBtX3NhbXBsZXItPmNhbGxpbmdOYXRpdmVGdW5jdGlvbigpCi0jZWxzZQot
I2RlZmluZSBTQ09QRU5PREVfU0FNUExJTkdfbm90aWZ5T2ZTY29wZShzYW1wbGVyKQotI2RlZmlu
ZSBNQUNISU5FX1NBTVBMSU5HX3NhbXBsZShjb2RlQmxvY2ssIHZQQykKLSNkZWZpbmUgTUFDSElO
RV9TQU1QTElOR19wcml2YXRlRXhlY3V0ZVJldHVybmVkKCkKLSNkZWZpbmUgTUFDSElORV9TQU1Q
TElOR19jYWxsaW5nTmF0aXZlRnVuY3Rpb24oKQogI2VuZGlmCiAKLQogI2lmIERVTVBfT1BDT0RF
X1NUQVRTCiAKICAgICBzdHJ1Y3QgT3Bjb2RlU3RhdHMgewpJbmRleDogSmF2YVNjcmlwdENvcmUv
Vk0vU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9TYW1w
bGluZ1Rvb2wuY3BwCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvVk0vU2FtcGxpbmdU
b29sLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIk1hY2hpbmUuaCIKKyNpbmNsdWRlICJPcGNvZGUuaCIKKworbmFtZXNwYWNlIEtK
UyB7CisKK3ZvaWQgU2NvcGVTYW1wbGVSZWNvcmQ6OnNhbXBsZShDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSW5zdHJ1Y3Rpb24qIHZQQykKK3sKKyAgICBtX3RvdGFsQ291bnQrKzsKKworICAgIGlmICgh
bV92cGNDb3VudHMpIHsKKyAgICAgICAgbV9zaXplID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMu
c2l6ZSgpOworICAgICAgICBtX3ZwY0NvdW50cyA9IHN0YXRpY19jYXN0PGludCo+KGNhbGxvYyht
X3NpemUsIHNpemVvZihpbnQpKSk7CisgICAgICAgIG1fY29kZUJsb2NrID0gY29kZUJsb2NrOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGNvZGVPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KHZQQykgLSByZWludGVycHJldF9jYXN0PHB0cmRp
ZmZfdD4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSkpIC8gc2l6ZW9mKEluc3RydWN0
aW9uKik7CisgICAgLy8gVGhpcyBjb3VsZCBvY2N1ciBpZiBjb2RlQmxvY2sgJiB2UEMgYXJlIG5v
dCBjb25zaXN0ZW50IC0gZS5nLiBzYW1wbGUgbWlkIG9wX2NhbGwvb3BfcmV0LgorICAgIGlmIChj
b2RlT2Zmc2V0IDwgbV9zaXplKQorICAgICAgICBtX3ZwY0NvdW50c1tjb2RlT2Zmc2V0XSsrOwor
fQorCisjaWYgUExBVEZPUk0oV0lOKQorCitzdGF0aWMgdm9pZCBzbGVlcEZvck1pY3Jvc2Vjb25k
cyh1bnNpZ25lZCB1cykKK3sKKyAgICB1bnNpZ25lZCBtcyA9IHVzLzEwMDA7CisgICAgaWYgKHVz
ICYmICFtcykKKyAgICAgICAgbXMgPSAxOworICAgIFNsZWVwKG1zKTsKK30KKworI2Vsc2UgCisK
K3N0YXRpYyB2b2lkIHNsZWVwRm9yTWljcm9zZWNvbmRzKHVuc2lnbmVkIHVzKQoreworICAgIHVz
bGVlcCh1cyk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGhlcnR6MnVz
KHVuc2lnbmVkIGhlcnR6KQoreworICAgIHJldHVybiAxMDAwMDAwIC8gaGVydHo7Cit9CisKK3Zv
aWQgU2FtcGxpbmdUb29sOjpydW4oKQoreworICAgIHdoaWxlIChtX3J1bm5pbmcpIHsKKyAgICAg
ICAgc2xlZXBGb3JNaWNyb3NlY29uZHMoaGVydHoydXMobV9oZXJ0eikpOworCisgICAgICAgIG1f
dG90YWxTYW1wbGVzKys7CisKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3JlY29y
ZGVkQ29kZUJsb2NrOworICAgICAgICBJbnN0cnVjdGlvbiogdlBDID0gbV9yZWNvcmRlZFZQQzsK
KworICAgICAgICBpZiAoY29kZUJsb2NrICYmIHZQQykgeworICAgICAgICAgICAgaWYgKFNjb3Bl
U2FtcGxlUmVjb3JkKiByZWNvcmQgPSBtX3Njb3BlU2FtcGxlTWFwLT5nZXQoY29kZUJsb2NrLT5v
d25lck5vZGUpKQorICAgICAgICAgICAgICAgIHJlY29yZC0+c2FtcGxlKGNvZGVCbG9jaywgdlBD
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCogU2FtcGxpbmdUb29sOjp0aHJlYWRTdGFy
dEZ1bmModm9pZCogc2FtcGxpbmdUb29sKQoreworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2FtcGxp
bmdUb29sKj4oc2FtcGxpbmdUb29sKS0+cnVuKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
U2FtcGxpbmdUb29sOjpub3RpZnlPZlNjb3BlKFNjb3BlTm9kZSogc2NvcGUpCit7CisgICAgbV9z
Y29wZVNhbXBsZU1hcC0+c2V0KHNjb3BlLCBuZXcgU2NvcGVTYW1wbGVSZWNvcmQoc2NvcGUpKTsK
K30KKwordm9pZCBTYW1wbGluZ1Rvb2w6OnN0YXJ0KHVuc2lnbmVkIGhlcnR6KQoreworICAgIEFT
U0VSVCghbV9ydW5uaW5nKTsKKyAgICBtX3J1bm5pbmcgPSB0cnVlOworICAgIG1faGVydHogPSBo
ZXJ0ejsKKworICAgIG1fc2FtcGxpbmdUaHJlYWQgPSBjcmVhdGVUaHJlYWQodGhyZWFkU3RhcnRG
dW5jLCB0aGlzKTsKK30KKwordm9pZCBTYW1wbGluZ1Rvb2w6OnN0b3AoKQoreworICAgIEFTU0VS
VChtX3J1bm5pbmcpOworICAgIG1fcnVubmluZyA9IGZhbHNlOworICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKG1fc2FtcGxpbmdUaHJlYWQsIDApOworfQorCisjaWYgRU5BQkxFKFNBTVBMSU5H
X1RPT0wpCisKK3N0cnVjdCBPcGNvZGVTYW1wbGVJbmZvCit7CisgICAgT3Bjb2RlSUQgb3Bjb2Rl
OworICAgIGxvbmcgbG9uZyBjb3VudDsKK307CisKK3N0cnVjdCBMaW5lQ291bnRJbmZvCit7Cisg
ICAgdW5zaWduZWQgbGluZTsKKyAgICB1bnNpZ25lZCBjb3VudDsKK307CisKK3N0YXRpYyBpbnQg
Y29tcGFyZUxpbmVDb3VudEluZm9TYW1wbGluZyhjb25zdCB2b2lkKiBsZWZ0LCBjb25zdCB2b2lk
KiByaWdodCkKK3sKKyAgICBjb25zdCBMaW5lQ291bnRJbmZvKiBsZWZ0TGluZUNvdW50ID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMaW5lQ291bnRJbmZvKj4obGVmdCk7CisgICAgY29uc3QgTGlu
ZUNvdW50SW5mbyogcmlnaHRMaW5lQ291bnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IExpbmVD
b3VudEluZm8qPihyaWdodCk7CisKKyAgICByZXR1cm4gKGxlZnRMaW5lQ291bnQtPmxpbmUgPiBy
aWdodExpbmVDb3VudC0+bGluZSkgPyAxIDogKGxlZnRMaW5lQ291bnQtPmxpbmUgPCByaWdodExp
bmVDb3VudC0+bGluZSkgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZU9wY29kZUlu
ZGljZXNTYW1wbGluZyhjb25zdCB2b2lkKiBsZWZ0LCBjb25zdCB2b2lkKiByaWdodCkKK3sKKyAg
ICBjb25zdCBPcGNvZGVTYW1wbGVJbmZvKiBsZWZ0U2FtcGxlSW5mbyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgT3Bjb2RlU2FtcGxlSW5mbyo+KGxlZnQpOworICAgIGNvbnN0IE9wY29kZVNhbXBs
ZUluZm8qIHJpZ2h0U2FtcGxlSW5mbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT3Bjb2RlU2Ft
cGxlSW5mbyo+KHJpZ2h0KTsKKworICAgIHJldHVybiAobGVmdFNhbXBsZUluZm8tPmNvdW50IDwg
cmlnaHRTYW1wbGVJbmZvLT5jb3VudCkgPyAxIDogKGxlZnRTYW1wbGVJbmZvLT5jb3VudCA+IHJp
Z2h0U2FtcGxlSW5mby0+Y291bnQpID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVT
Y29wZVNhbXBsZVJlY29yZHMoY29uc3Qgdm9pZCogbGVmdCwgY29uc3Qgdm9pZCogcmlnaHQpCit7
CisgICAgY29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0IGxlZnRWYWx1ZSA9ICpzdGF0aWNf
Y2FzdDxjb25zdCBTY29wZVNhbXBsZVJlY29yZCogY29uc3QgKj4obGVmdCk7CisgICAgY29uc3Qg
U2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0IHJpZ2h0VmFsdWUgPSAqc3RhdGljX2Nhc3Q8Y29uc3Qg
U2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0ICo+KHJpZ2h0KTsKKworICAgIHJldHVybiAobGVmdFZh
bHVlLT5tX3RvdGFsQ291bnQgPCByaWdodFZhbHVlLT5tX3RvdGFsQ291bnQpID8gMSA6IChsZWZ0
VmFsdWUtPm1fdG90YWxDb3VudCA+IHJpZ2h0VmFsdWUtPm1fdG90YWxDb3VudCkgPyAtMSA6IDA7
Cit9CisKK3ZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAv
LyBUaWRpZXMgdXAgU3VuU3BpZGVyIG91dHB1dCBieSByZW1vdmluZyBzaG9ydCBzY3JpcHRzIC0g
c3VjaCBhIHNtYWxsIG51bWJlciBvZiBzYW1wbGVzIHdvdWxkIGxpa2VseSBub3QgYmUgdXNlZnVs
IGFueWhvdy4KKyAgICBpZiAobV90b3RhbFNhbXBsZXMgPCAxMCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIC8vICgxKSBDYWxjdWxhdGUgJ3RvdGFsQ29kZUJsb2NrU2FtcGxlcycsIGJ1aWxk
IGFuZCBzb3J0ICdjb2RlQmxvY2tTYW1wbGVzJyBhcnJheS4KKworICAgIGludCBzY29wZUNvdW50
ID0gbV9zY29wZVNhbXBsZU1hcC0+c2l6ZSgpOworICAgIGxvbmcgbG9uZyB0b3RhbENvZGVCbG9j
a1NhbXBsZXMgPSAwOworICAgIFZlY3RvcjxTY29wZVNhbXBsZVJlY29yZCo+IGNvZGVCbG9ja1Nh
bXBsZXMoc2NvcGVDb3VudCk7CisgICAgU2NvcGVTYW1wbGVSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3Njb3BlU2FtcGxlTWFwLT5iZWdpbigpOworICAgIGZvciAoaW50IGk9MDsgaSA8IHNj
b3BlQ291bnQ7ICsraSwgKytpdGVyKSB7CisgICAgICAgIGNvZGVCbG9ja1NhbXBsZXNbaV0gPSBp
dGVyLT5zZWNvbmQ7CisgICAgICAgIHRvdGFsQ29kZUJsb2NrU2FtcGxlcyArPSBjb2RlQmxvY2tT
YW1wbGVzW2ldLT5tX3RvdGFsQ291bnQ7CisgICAgfQorI2lmIEhBVkUoTUVSR0VTT1JUKQorICAg
IG1lcmdlc29ydChjb2RlQmxvY2tTYW1wbGVzLmJlZ2luKCksIHNjb3BlQ291bnQsIHNpemVvZihT
Y29wZVNhbXBsZVJlY29yZCopLCBjb21wYXJlU2NvcGVTYW1wbGVSZWNvcmRzKTsKKyNlbHNlCisg
ICAgcXNvcnQoY29kZUJsb2NrU2FtcGxlcy5iZWdpbigpLCBzY29wZUNvdW50LCBzaXplb2YoU2Nv
cGVTYW1wbGVSZWNvcmQqKSwgY29tcGFyZVNjb3BlU2FtcGxlUmVjb3Jkcyk7CisjZW5kaWYKKwor
ICAgIC8vICgyKSBQcmludCBkYXRhIGZyb20gJ2NvZGVCbG9ja1NhbXBsZXMnIGFycmF5LCBjYWxj
dWxhdGUgJ3RvdGFsT3Bjb2RlU2FtcGxlcycsIHBvcHVsYXRlICdvcGNvZGVTYW1wbGVDb3VudHMn
IGFycmF5LgorCisgICAgbG9uZyBsb25nIHRvdGFsT3Bjb2RlU2FtcGxlcyA9IDA7CisgICAgbG9u
ZyBsb25nIG9wY29kZVNhbXBsZUNvdW50c1tudW1PcGNvZGVJRHNdID0geyAwIH07CisKKyAgICBm
cHJpbnRmKHN0ZG91dCwgIlxuQmxvY2sgc2FtcGxpbmcgcmVzdWx0c1xuXG4iKTsgCisgICAgZnBy
aW50ZihzdGRvdXQsICJUb3RhbCBibG9ja3Mgc2FtcGxlZCAodG90YWwgc2FtcGxlcyk6ICVsbGQg
KCVsbGQpXG5cbiIsIHRvdGFsQ29kZUJsb2NrU2FtcGxlcywgbV90b3RhbFNhbXBsZXMpOworCisg
ICAgZm9yIChpbnQgaT0wOyBpIDwgc2NvcGVDb3VudDsgaSsrKSB7CisgICAgICAgIFNjb3BlU2Ft
cGxlUmVjb3JkICpyZWNvcmQgPSBjb2RlQmxvY2tTYW1wbGVzW2ldOworICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHJlY29yZC0+bV9jb2RlQmxvY2s7CisKKyAgICAgICAgZG91YmxlIHRv
dGFsUGVyY2VudCA9IChyZWNvcmQtPm1fdG90YWxDb3VudCAqIDEwMC4wKS9tX3RvdGFsU2FtcGxl
czsKKyAgICAgICAgZG91YmxlIGJsb2NrUGVyY2VudCA9IChyZWNvcmQtPm1fdG90YWxDb3VudCAq
IDEwMC4wKS90b3RhbENvZGVCbG9ja1NhbXBsZXM7CisKKyAgICAgICAgaWYgKChibG9ja1BlcmNl
bnQgPj0gMSkgJiYgY29kZUJsb2NrKSB7CisgICAgICAgICAgICBJbnN0cnVjdGlvbiogY29kZSA9
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZG91dCwgIiMlZDogJXM6JWQ6IHNhbXBsZWQgJWQgdGltZXMgLSAlLjNmJSUgKCUuM2YlJSlcbiIs
IGkrMSwgcmVjb3JkLT5tX3Njb3BlLT5zb3VyY2VVUkwoKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwg
Y29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKGNvZGUpLCByZWNvcmQtPm1fdG90YWxDb3VudCwg
YmxvY2tQZXJjZW50LCB0b3RhbFBlcmNlbnQpOworICAgICAgICAgICAgaWYgKGkgPCAxMCkgewor
ICAgICAgICAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsdW5zaWduZWQ+IGxpbmVDb3VudHM7Cisg
ICAgICAgICAgICAgICAgY29kZUJsb2NrLT5kdW1wKGV4ZWMpOworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgb3AgPSAwOyBvcCA8IHJlY29yZC0+bV9zaXplOyArK29wKSB7CisgICAgICAg
ICAgICAgICAgICAgIGludCBjb3VudCA9IHJlY29yZC0+bV92cGNDb3VudHNbb3BdOworICAgICAg
ICAgICAgICAgICAgICBpZiAoY291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50
ZigiICAgIFslIDRkXSBoYXMgc2FtcGxlIGNvdW50OiAlIDRkXG4iLCBvcCwgY291bnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGluZSA9IGNvZGVCbG9jay0+bGluZU51bWJl
ckZvclZQQyhjb2RlK29wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudHMuc2V0
KGxpbmUsIChsaW5lQ291bnRzLmNvbnRhaW5zKGxpbmUpID8gbGluZUNvdW50cy5nZXQobGluZSkg
OiAwKSArIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICAgICAgaW50IGxpbmVz
Q291bnQgPSBsaW5lQ291bnRzLnNpemUoKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8TGluZUNv
dW50SW5mbz4gbGluZUNvdW50SW5mbyhsaW5lc0NvdW50KTsKKyAgICAgICAgICAgICAgICBpbnQg
bGluZW5vID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsdW5zaWdu
ZWQ+OjppdGVyYXRvciBpdGVyID0gbGluZUNvdW50cy5iZWdpbigpOyBpdGVyICE9IGxpbmVDb3Vu
dHMuZW5kKCk7ICsraXRlciwgKytsaW5lbm8pIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZUNv
dW50SW5mb1tsaW5lbm9dLmxpbmUgPSBpdGVyLT5maXJzdDsKKyAgICAgICAgICAgICAgICAgICAg
bGluZUNvdW50SW5mb1tsaW5lbm9dLmNvdW50ID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAg
ICAgIH0KKyNpZiBIQVZFKE1FUkdFU09SVCkKKyAgICAgICAgICAgICAgICBtZXJnZXNvcnQobGlu
ZUNvdW50SW5mby5iZWdpbigpLCBsaW5lc0NvdW50LCBzaXplb2YoTGluZUNvdW50SW5mbyksIGNv
bXBhcmVMaW5lQ291bnRJbmZvU2FtcGxpbmcpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBxc29y
dChsaW5lQ291bnRJbmZvLmJlZ2luKCksIGxpbmVzQ291bnQsIHNpemVvZihMaW5lQ291bnRJbmZv
KSwgY29tcGFyZUxpbmVDb3VudEluZm9TYW1wbGluZyk7CisjZW5kaWYKKyAgICAgICAgICAgICAg
ICBmb3IgKGxpbmVubyA9IDA7IGxpbmVubyA8IGxpbmVzQ291bnQ7ICsrbGluZW5vKSB7CisgICAg
ICAgICAgICAgICAgICAgIHByaW50ZigiICAgIExpbmUgIyVkIGhhcyBzYW1wbGUgY291bnQgJWQu
XG4iLCBsaW5lQ291bnRJbmZvW2xpbmVub10ubGluZSwgbGluZUNvdW50SW5mb1tsaW5lbm9dLmNv
dW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVjb3JkLT5t
X3ZwY0NvdW50cyAmJiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbnMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBvcCA9IDA7IG9wIDwgcmVjb3JkLT5tX3NpemU7ICsrb3ApIHsKKyAgICAg
ICAgICAgICAgICBPcGNvZGUgb3Bjb2RlID0gaW5zdHJ1Y3Rpb25zW29wXS51Lm9wY29kZTsKKyAg
ICAgICAgICAgICAgICBpZiAoZXhlYy0+bWFjaGluZSgpLT5pc09wY29kZShvcGNvZGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRvdGFsT3Bjb2RlU2FtcGxlcyArPSByZWNvcmQtPm1fdnBjQ291
bnRzW29wXTsKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlU2FtcGxlQ291bnRzW2V4ZWMtPm1h
Y2hpbmUoKS0+Z2V0T3Bjb2RlSUQob3Bjb2RlKV0gKz0gcmVjb3JkLT5tX3ZwY0NvdW50c1tvcF07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IHByaW50ZigiXG4iKTsKKworICAgIC8vICgzKSBCdWlsZCBhbmQgc29ydCAnb3Bjb2RlU2FtcGxl
SW5mbycgYXJyYXkuCisKKyAgICBPcGNvZGVTYW1wbGVJbmZvIG9wY29kZVNhbXBsZUluZm9bbnVt
T3Bjb2RlSURzXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wY29kZUlEczsgKytpKSB7
CisgICAgICAgIG9wY29kZVNhbXBsZUluZm9baV0ub3Bjb2RlID0gKE9wY29kZUlEKWk7CisgICAg
ICAgIG9wY29kZVNhbXBsZUluZm9baV0uY291bnQgPSBvcGNvZGVTYW1wbGVDb3VudHNbaV07Cisg
ICAgfQorI2lmIEhBVkUoTUVSR0VTT1JUKQorICAgIG1lcmdlc29ydChvcGNvZGVTYW1wbGVJbmZv
LCBudW1PcGNvZGVJRHMsIHNpemVvZihPcGNvZGVTYW1wbGVJbmZvKSwgY29tcGFyZU9wY29kZUlu
ZGljZXNTYW1wbGluZyk7CisjZWxzZQorICAgIHFzb3J0KG9wY29kZVNhbXBsZUluZm8sIG51bU9w
Y29kZUlEcywgc2l6ZW9mKE9wY29kZVNhbXBsZUluZm8pLCBjb21wYXJlT3Bjb2RlSW5kaWNlc1Nh
bXBsaW5nKTsKKyNlbmRpZgorCisgICAgLy8gKDQpIFByaW50IE9wY29kZSBzYW1wbGluZyByZXN1
bHRzLgorICAgIAorICAgIGZwcmludGYoc3Rkb3V0LCAiXG5PcGNvZGUgc2FtcGxpbmcgcmVzdWx0
c1xuXG4iKTsgCisgICAgCisgICAgZnByaW50ZihzdGRvdXQsICJUb3RhbCBvcGNvZGVzIHNhbXBs
ZWQgKHRvdGFsIHNhbXBsZXMpOiAlbGxkICglbGxkKVxuXG4iLCB0b3RhbE9wY29kZVNhbXBsZXMs
IG1fdG90YWxTYW1wbGVzKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIk9wY29kZXMgaW4gb3JkZXI6
XG5cbiIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtT3Bjb2RlSURzOyArK2kpIHsKKyAg
ICAgICAgbG9uZyBsb25nIGNvdW50ID0gb3Bjb2RlU2FtcGxlQ291bnRzW2ldOworICAgICAgICBm
cHJpbnRmKHN0ZG91dCwgIiVzOiVzJTZsbGRcdCUuM2YlJVx0KCUuM2YlJSlcbiIsIG9wY29kZU5h
bWVzW2ldLCBwYWRPcGNvZGVOYW1lKChPcGNvZGVJRClpLCAyMCksIGNvdW50LCAoKGRvdWJsZSlj
b3VudCAqIDEwMCkvdG90YWxPcGNvZGVTYW1wbGVzLCAoKGRvdWJsZSljb3VudCAqIDEwMCkvbV90
b3RhbFNhbXBsZXMpOyAgICAKKyAgICB9CisgICAgZnByaW50ZihzdGRvdXQsICJcbiIpOworICAg
IGZwcmludGYoc3Rkb3V0LCAiT3Bjb2RlcyBieSBzYW1wbGUgY291bnQ6XG5cbiIpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtT3Bjb2RlSURzOyArK2kpIHsKKyAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlID0gb3Bjb2RlU2FtcGxlSW5mb1tpXS5vcGNvZGU7CisgICAgICAgIGxvbmcgbG9uZyBj
b3VudCA9IG9wY29kZVNhbXBsZUluZm9baV0uY291bnQ7CisgICAgICAgIGZwcmludGYoc3Rkb3V0
LCAiJXM6JXMlNmxsZFx0JS4zZiUlXHQoJS4zZiUlKVxuIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlXSwg
cGFkT3Bjb2RlTmFtZShvcGNvZGUsIDIwKSwgY291bnQsICgoZG91YmxlKWNvdW50ICogMTAwKS90
b3RhbE9wY29kZVNhbXBsZXMsICgoZG91YmxlKWNvdW50ICogMTAwKS9tX3RvdGFsU2FtcGxlcyk7
ICAgIAorICAgIH0KKyAgICBmcHJpbnRmKHN0ZG91dCwgIlxuIik7Cit9CisKKyNlbHNlCisKK3Zv
aWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSopCit7Cit9CisKKyNlbmRpZgorCit9IC8v
IG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL1NhbXBsaW5nVG9vbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL1NhbXBsaW5nVG9vbC5oCShyZXZpc2lvbiAw
KQorKysgSmF2YVNjcmlwdENvcmUvVk0vU2FtcGxpbmdUb29sLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNhbXBsaW5nVG9vbF9oCisjZGVmaW5lIFNhbXBsaW5nVG9v
bF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaW5jbHVkZSA8bm9kZXMuaD4KKyNp
bmNsdWRlIDxPcGNvZGUuaD4KKworbmFtZXNwYWNlIEtKUyB7CisKKyAgICBjbGFzcyBFeGVjU3Rh
dGU7CisgICAgY2xhc3MgU2NvcGVOb2RlOworICAgIGNsYXNzIENvZGVCbG9jazsKKyAgICBzdHJ1
Y3QgSW5zdHJ1Y3Rpb247CisKKyAgICBzdHJ1Y3QgU2NvcGVTYW1wbGVSZWNvcmQKKyAgICB7Cisg
ICAgICAgIFJlZlB0cjxTY29wZU5vZGU+IG1fc2NvcGU7CisgICAgICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CisgICAgICAgIGludCBtX3RvdGFsQ291bnQ7CisgICAgICAgIGludCogbV92cGND
b3VudHM7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICAgICAgCisgICAgICAgIFNjb3Bl
U2FtcGxlUmVjb3JkKFNjb3BlTm9kZSogc2NvcGUpCisgICAgICAgICAgICA6IG1fc2NvcGUoc2Nv
cGUpCisgICAgICAgICAgICAsIG1fY29kZUJsb2NrKDApCisgICAgICAgICAgICAsIG1fdG90YWxD
b3VudCgwKQorICAgICAgICAgICAgLCBtX3ZwY0NvdW50cygwKQorICAgICAgICAgICAgLCBtX3Np
emUoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+U2NvcGVTYW1w
bGVSZWNvcmQoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV92cGNDb3VudHMpCisgICAg
ICAgICAgICAgICAgZnJlZShtX3ZwY0NvdW50cyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgc2FtcGxlKENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDKTsK
KyAgICB9OworCisgICAgdHlwZWRlZiBXVEY6Okhhc2hNYXA8U2NvcGVOb2RlKiwgU2NvcGVTYW1w
bGVSZWNvcmQqPiBTY29wZVNhbXBsZVJlY29yZE1hcDsKKworICAgIGNsYXNzIFNhbXBsaW5nVG9v
bAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNhbXBsaW5nVG9vbCgpCisgICAgICAgICAg
ICA6IG1fcnVubmluZyhmYWxzZSkKKyAgICAgICAgICAgICwgbV9yZWNvcmRlZENvZGVCbG9jaygw
KQorICAgICAgICAgICAgLCBtX3JlY29yZGVkVlBDKDApCisgICAgICAgICAgICAsIG1fdG90YWxT
YW1wbGVzKDApCisgICAgICAgICAgICAsIG1fc2NvcGVTYW1wbGVNYXAobmV3IFNjb3BlU2FtcGxl
UmVjb3JkTWFwKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5TYW1wbGluZ1Rv
b2woKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1fc2NvcGVTYW1w
bGVNYXApOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzdGFydCh1bnNpZ25lZCBoZXJ0ej0x
MDAwKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUq
KTsKKworICAgICAgICB2b2lkIG5vdGlmeU9mU2NvcGUoU2NvcGVOb2RlKiBzY29wZSk7CisKKyAg
ICAgICAgdm9pZCBzYW1wbGUoQ29kZUJsb2NrKiByZWNvcmRlZENvZGVCbG9jaywgSW5zdHJ1Y3Rp
b24qIHJlY29yZGVkVlBDKQorICAgICAgICB7CisgICAgICAgICAgICBtX3JlY29yZGVkQ29kZUJs
b2NrID0gcmVjb3JkZWRDb2RlQmxvY2s7CisgICAgICAgICAgICBtX3JlY29yZGVkVlBDID0gcmVj
b3JkZWRWUEM7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHByaXZhdGVFeGVjdXRlUmV0dXJu
ZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3JlY29yZGVkQ29kZUJsb2NrID0gMDsKKyAg
ICAgICAgICAgIG1fcmVjb3JkZWRWUEMgPSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIGNhbGxpbmdIb3N0RnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBtX3Jl
Y29yZGVkQ29kZUJsb2NrID0gMDsKKyAgICAgICAgICAgIG1fcmVjb3JkZWRWUEMgPSAwOworICAg
ICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyB2b2lkKiB0aHJl
YWRTdGFydEZ1bmModm9pZCopOworICAgICAgICB2b2lkIHJ1bigpOworICAgICAgICAKKyAgICAg
ICAgLy8gU2FtcGxpbmcgdGhyZWFkIHN0YXRlLgorICAgICAgICBib29sIG1fcnVubmluZzsKKyAg
ICAgICAgdW5zaWduZWQgbV9oZXJ0ejsKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3NhbXBs
aW5nVGhyZWFkOworCisgICAgICAgIC8vIFN0YXRlIHRyYWNrZWQgYnkgdGhlIG1haW4gdGhyZWFk
LCB1c2VkIGJ5IHRoZSBzYW1wbGluZyB0aHJlYWQuCisgICAgICAgIENvZGVCbG9jayogbV9yZWNv
cmRlZENvZGVCbG9jazsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIG1fcmVjb3JkZWRWUEM7CisKKyAg
ICAgICAgLy8gR2F0aGVyZWQgc2FtcGxlIGRhdGEuCisgICAgICAgIGxvbmcgbG9uZyBtX3RvdGFs
U2FtcGxlczsKKyAgICAgICAgT3duUHRyPFNjb3BlU2FtcGxlUmVjb3JkTWFwPiBtX3Njb3BlU2Ft
cGxlTWFwOworICAgIH07CisKKy8vIFNDT1BFTk9ERV8gLyBNQUNISU5FXyBtYWNyb3MgZm9yIHVz
ZSBmcm9tIHdpdGhpbiBtZW1iZXIgbWV0aG9kcyBvbiBTY29wZU5vZGUgLyBNYWNoaW5lIHJlc3Bl
Y3RpdmVseS4KKyNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTCkKKyNkZWZpbmUgU0NPUEVOT0RFX1NB
TVBMSU5HX25vdGlmeU9mU2NvcGUoc2FtcGxlcikgc2FtcGxlci0+bm90aWZ5T2ZTY29wZSh0aGlz
KQorI2RlZmluZSBNQUNISU5FX1NBTVBMSU5HX3NhbXBsZShjb2RlQmxvY2ssIHZQQykgbV9zYW1w
bGVyLT5zYW1wbGUoY29kZUJsb2NrLCB2UEMpCisjZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfcHJp
dmF0ZUV4ZWN1dGVSZXR1cm5lZCgpIG1fc2FtcGxlci0+cHJpdmF0ZUV4ZWN1dGVSZXR1cm5lZCgp
CisjZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbigpIG1fc2FtcGxl
ci0+Y2FsbGluZ0hvc3RGdW5jdGlvbigpCisjZWxzZQorI2RlZmluZSBTQ09QRU5PREVfU0FNUExJ
Tkdfbm90aWZ5T2ZTY29wZShzYW1wbGVyKQorI2RlZmluZSBNQUNISU5FX1NBTVBMSU5HX3NhbXBs
ZShjb2RlQmxvY2ssIHZQQykKKyNkZWZpbmUgTUFDSElORV9TQU1QTElOR19wcml2YXRlRXhlY3V0
ZVJldHVybmVkKCkKKyNkZWZpbmUgTUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0aW9u
KCkKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBLSlMKKworI2VuZGlmIC8vIFNhbXBsaW5nVG9v
bF9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMzUzNTgp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNvbW1v
bklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgorI2luY2x1ZGUgIkFQSS9K
U0NsYXNzUmVmLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiTWFjaGluZS5oIgog
I2luY2x1ZGUgIlBhcnNlci5oIgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1NoZWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvU2hlbGwuY3BwCShyZXZpc2lvbiAzNTM1
OCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgog
I2luY2x1ZGUgIlByb3RvdHlwZUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgi
CiAjaW5jbHVkZSAiY29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiY29tcGxldGlvbi5oIgogI2luY2x1
ZGUgImludGVycHJldGVyLmgiCkBAIC0zMzksNyArMzQwLDcgQEAgc3RhdGljIGJvb2wgcnVuV2l0
aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBpZiAocHJldHR5UHJpbnQpCiAgICAgICAg
ICAgICBwcmV0dHlQcmludFNjcmlwdChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZmlsZU5h
bWUsIHNjcmlwdCk7CiAgICAgICAgIGVsc2UgewotI2lmIFNBTVBMSU5HX1RPT0xfRU5BQkxFRAor
I2lmIEVOQUJMRShTQU1QTElOR19UT09MKQogICAgICAgICAgICAgTWFjaGluZSogbWFjaGluZSA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLT5tYWNoaW5lOwogICAgICAgICAgICAgbWFjaGlu
ZS0+bV9zYW1wbGVyID0gbmV3IFNhbXBsaW5nVG9vbCgpOwogICAgICAgICAgICAgbWFjaGluZS0+
bV9zYW1wbGVyLT5zdGFydCgpOwpAQCAtMzU0LDcgKzM1NSw3IEBAIHN0YXRpYyBib29sIHJ1bldp
dGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNl
cHRpb246ICVzXG4iLCBjb21wbGV0aW9uLnZhbHVlKCktPnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS5hc2NpaSgpKTsKICAgICAgICAgICAgIH0KIAotI2lmIFNBTVBMSU5HX1RP
T0xfRU5BQkxFRAorI2lmIEVOQUJMRShTQU1QTElOR19UT09MKQogICAgICAgICAgICAgbWFjaGlu
ZS0+bV9zYW1wbGVyLT5zdG9wKCk7CiAgICAgICAgICAgICBtYWNoaW5lLT5tX3NhbXBsZXItPmR1
bXAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogICAgICAgICAgICAgZGVsZXRlIG1hY2hp
bmUtPm1fc2FtcGxlcjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9jb25maWcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvY29uZmlnLmgJKHJldmlzaW9uIDM1MzU4KQorKysg
SmF2YVNjcmlwdENvcmUva2pzL2NvbmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwzICs2MCw1
IEBACiAjaW5jbHVkZSA8d3RmL0Rpc2FsbG93Q1R5cGUuaD4KICNlbmRpZgogCisvLyBTZXQgdG8g
MSB0byBlbmFibGUgdGhlIHNhbXBsZXIsIFNhbXBsaW5nVG9vbC4KKyNkZWZpbmUgRU5BQkxFX1NB
TVBMSU5HX1RPT0wgMApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZpc2lvbiAzNTM1OCkKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDcgQEAKICNpbmNsdWRlICJkZWJ1Z2dlci5oIgogI2luY2x1ZGUgImxleGVyLmgiCiAjaW5jbHVk
ZSAib3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgPG1h
dGguaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291
bnRlZFNldC5oPgo=
</data>
<flag name="review"
          id="9919"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22514</attachid>
            <date>2008-07-27 21:37:04 -0700</date>
            <delta_ts>2008-07-29 16:35:19 -0700</delta_ts>
            <desc>Alternative patch - single build version.</desc>
            <filename>patch_multi_ball.017.txt</filename>
            <type>text/plain</type>
            <size>58333</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNTM3NikKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAJSmF2
YVNjcmlwdENvcmUvVk0vSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgXAogCUphdmFTY3JpcHRD
b3JlL1ZNL01hY2hpbmUuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuY3BwIFwKKwlK
YXZhU2NyaXB0Q29yZS9WTS9TYW1wbGluZ1Rvb2wuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9wY3Jl
L3BjcmVfY29tcGlsZS5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9leGVjLmNwcCBc
CiAJSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3RhYmxlcy5jcHAgXApJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMuY3BwCShyZXZpc2lvbiAzNTM3NikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJkZWJ1Z2dlci5oIgog
I2luY2x1ZGUgImxleGVyLmgiCiAjaW5jbHVkZSAib3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlNh
bXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgpAQCAtMTY1Myw3ICsxNjU0LDgg
QEAKICAgICBpZiAoZnVuY1N0YWNrKQogICAgICAgICBtX2Z1bmN0aW9uU3RhY2sgPSAqZnVuY1N0
YWNrOwogCi0gICAgU0NPUEVOT0RFX1NBTVBMSU5HX25vdGlmeU9mU2NvcGUoZ2xvYmFsRGF0YS0+
bWFjaGluZS0+bV9zYW1wbGVyKTsKKyAgICBpZiAoZ2xvYmFsRGF0YS0+bWFjaGluZS0+bV9zYW1w
bGVyKQorICAgICAgICBnbG9iYWxEYXRhLT5tYWNoaW5lLT5tX3NhbXBsZXItPm5vdGlmeU9mU2Nv
cGUodGhpcyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFt
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL2NvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9jb25maWcuaAko
cmV2aXNpb24gMzUzNzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvY29uZmlnLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDMgKzYwLDUgQEAKICNpbmNsdWRlIDx3dGYvRGlzYWxsb3dDVHlwZS5oPgog
I2VuZGlmCiAKKyNkZWZpbmUgRU5BQkxFX1NBTVBMSU5HX1RPT0xfRFVNUCAwCisjZGVmaW5lIEVO
QUJMRV9TQU1QTElOR19UT09MX0FMV0FZUyAwCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvU2hl
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9TaGVsbC5jcHAJKHJldmlz
aW9uIDM1Mzc2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1NoZWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGFy
c2VyLmgiCiAjaW5jbHVkZSAiUHJvdG90eXBlRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJTYW1wbGlu
Z1Rvb2wuaCIKICNpbmNsdWRlICJjb2xsZWN0b3IuaCIKICNpbmNsdWRlICJjb21wbGV0aW9uLmgi
CiAjaW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKQEAgLTkwLDEyICs5MSwxNCBAQAogICAgICAgICA6
IGludGVyYWN0aXZlKGZhbHNlKQogICAgICAgICAsIHByZXR0eVByaW50KGZhbHNlKQogICAgICAg
ICAsIGR1bXAoZmFsc2UpCisgICAgICAgICwgc2FtcGxlKGZhbHNlKQogICAgIHsKICAgICB9CiAK
ICAgICBib29sIGludGVyYWN0aXZlOwogICAgIGJvb2wgcHJldHR5UHJpbnQ7CiAgICAgYm9vbCBk
dW1wOworICAgIGJvb2wgc2FtcGxlOwogICAgIFZlY3RvcjxVU3RyaW5nPiBmaWxlTmFtZXM7CiAg
ICAgVmVjdG9yPFVTdHJpbmc+IGFyZ3VtZW50czsKIH07CkBAIC0zMjIsNyArMzI1LDcgQEAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgZmlsZU5hbWVzLCBib29s
IHByZXR0eVByaW50LCBib29sIGR1bXApCitzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFVTdHJpbmc+JiBmaWxlTmFtZXMs
IGJvb2wgcHJldHR5UHJpbnQsIGJvb2wgZHVtcCwgYm9vbCBzYW1wbGUpCiB7CiAgICAgVmVjdG9y
PGNoYXI+IHNjcmlwdDsKIApAQCAtMzM5LDExICszNDIsMTEgQEAKICAgICAgICAgaWYgKHByZXR0
eVByaW50KQogICAgICAgICAgICAgcHJldHR5UHJpbnRTY3JpcHQoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGZpbGVOYW1lLCBzY3JpcHQpOwogICAgICAgICBlbHNlIHsKLSNpZiBTQU1QTElO
R19UT09MX0VOQUJMRUQKLSAgICAgICAgICAgIE1hY2hpbmUqIG1hY2hpbmUgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKS0+bWFjaGluZTsKLSAgICAgICAgICAgIG1hY2hpbmUtPm1fc2FtcGxl
ciA9IG5ldyBTYW1wbGluZ1Rvb2woKTsKLSAgICAgICAgICAgIG1hY2hpbmUtPm1fc2FtcGxlci0+
c3RhcnQoKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKHNhbXBsZSkgeworICAgICAgICAgICAg
ICAgIE1hY2hpbmUqIG1hY2hpbmUgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS0+bWFjaGlu
ZTsKKyAgICAgICAgICAgICAgICBtYWNoaW5lLT5tX3NhbXBsZXIgPSBuZXcgU2FtcGxpbmdUb29s
KCk7CisgICAgICAgICAgICAgICAgbWFjaGluZS0+bV9zYW1wbGVyLT5zdGFydCgpOworICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBJbnRlcnByZXRl
cjo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xv
YmFsU2NvcGVDaGFpbigpLCBmaWxlTmFtZSwgMSwgc2NyaXB0LmRhdGEoKSk7CiAgICAgICAgICAg
ICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb21wbGV0aW9uLmNvbXBsVHlwZSgpICE9IFRocm93OwpA
QCAtMzU0LDExICszNTcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRp
b246ICVzXG4iLCBjb21wbGV0aW9uLnZhbHVlKCktPnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS5hc2NpaSgpKTsKICAgICAgICAgICAgIH0KIAotI2lmIFNBTVBMSU5HX1RPT0xf
RU5BQkxFRAotICAgICAgICAgICAgbWFjaGluZS0+bV9zYW1wbGVyLT5zdG9wKCk7Ci0gICAgICAg
ICAgICBtYWNoaW5lLT5tX3NhbXBsZXItPmR1bXAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkp
OwotICAgICAgICAgICAgZGVsZXRlIG1hY2hpbmUtPm1fc2FtcGxlcjsKLSNlbmRpZgorICAgICAg
ICAgICAgaWYgKHNhbXBsZSkgeworICAgICAgICAgICAgICAgIE1hY2hpbmUqIG1hY2hpbmUgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS0+bWFjaGluZTsKKyAgICAgICAgICAgICAgICBtYWNo
aW5lLT5tX3NhbXBsZXItPnN0b3AoKTsKKyAgICAgICAgICAgICAgICBtYWNoaW5lLT5tX3NhbXBs
ZXItPmR1bXAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOworICAgICAgICAgICAgICAgIGRl
bGV0ZSBtYWNoaW5lLT5tX3NhbXBsZXI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CkBAIC0zOTgsNiArNDAyLDcgQEAKIHsKICAgICBmcHJpbnRm
KHN0ZGVyciwgIlVzYWdlOiBqc2MgW29wdGlvbnNdIFtmaWxlc10gWy0tIGFyZ3VtZW50c11cbiIp
OwogICAgIGZwcmludGYoc3RkZXJyLCAiICAtZCAgICAgICAgIER1bXBzIGJ5dGVjb2RlIChkZWJ1
ZyBidWlsZHMgb25seSlcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICAtUyAgICAgICAgIEVu
YWJsZSBzYW1wbGluZyAob3V0cHV0IHJlcXVpcmVzIEVOQUJMRV9TQU1QTElOR19UT09MX0RVTVAg
YnVpbGQpXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLWYgICAgICAgICBTcGVjaWZpZXMg
YSBzb3VyY2UgZmlsZSAoZGVwcmVjYXRlZClcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiICAt
aHwtLWhlbHAgIFByaW50cyB0aGlzIGhlbHAgbWVzc2FnZVxuIik7CiAgICAgZnByaW50ZihzdGRl
cnIsICIgIC1pICAgICAgICAgRW5hYmxlcyBpbnRlcmFjdGl2ZSBtb2RlIChkZWZhdWx0IGlmIG5v
IGZpbGVzIGFyZSBzcGVjaWZpZWQpXG4iKTsKQEAgLTQzMiw2ICs0MzcsMTAgQEAKICAgICAgICAg
ICAgIG9wdGlvbnMuZHVtcCA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQorICAgICAgICBpZiAoc3RyY21wKGFyZywgIi1TIikgPT0gMCkgeworICAgICAgICAgICAgb3B0
aW9ucy5zYW1wbGUgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAg
ICAgICAgaWYgKHN0cmNtcChhcmcsICItcyIpID09IDApIHsKICNpZiBQTEFURk9STShVTklYKQog
ICAgICAgICAgICAgc2lnbmFsKFNJR0lMTCwgX2V4aXQpOwpAQCAtNDY1LDcgKzQ3NCw3IEBACiAg
ICAgcGFyc2VBcmd1bWVudHMoYXJnYywgYXJndiwgb3B0aW9ucyk7CiAKICAgICBHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoZ2xvYmFsRGF0YSkgR2xvYmFsT2JqZWN0KG9wdGlvbnMu
YXJndW1lbnRzKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBydW5XaXRoU2NyaXB0cyhnbG9iYWxPYmpl
Y3QsIG9wdGlvbnMuZmlsZU5hbWVzLCBvcHRpb25zLnByZXR0eVByaW50LCBvcHRpb25zLmR1bXAp
OworICAgIGJvb2wgc3VjY2VzcyA9IHJ1bldpdGhTY3JpcHRzKGdsb2JhbE9iamVjdCwgb3B0aW9u
cy5maWxlTmFtZXMsIG9wdGlvbnMucHJldHR5UHJpbnQsIG9wdGlvbnMuZHVtcCwgb3B0aW9ucy5z
YW1wbGUpOwogICAgIGlmIChvcHRpb25zLmludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCiAgICAgICAg
IHJ1bkludGVyYWN0aXZlKGdsb2JhbE9iamVjdCk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0ds
b2JhbERhdGEuY3BwCShyZXZpc2lvbiAzNTM3NikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0ds
b2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRl
ICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJK
U0NsYXNzUmVmLmgiCisjaW5jbHVkZSAiQVBJL0pTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJKU0xv
Y2suaCIKICNpbmNsdWRlICJNYWNoaW5lLmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9u
IDM1Mzc2KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI3MCw2ICsx
MjcwLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXFZNXFNhbXBsaW5nVG9vbC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxWTVxTYW1wbGluZ1Rvb2wuaCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFZNXFJl
Z2lzdGVyLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0v
TWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJ
KHJldmlzaW9uIDM1Mzc2KQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJjb2xsZWN0b3IuaCIKICNpbmNs
dWRlICJkZWJ1Z2dlci5oIgogI2luY2x1ZGUgIm9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJTYW1w
bGluZ1Rvb2wuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogCiAjaWYgSEFWRShTWVNfVElNRV9IKQpA
QCAtNDczLDEyICs0NzQsOCBAQAogfQogCiBNYWNoaW5lOjpNYWNoaW5lKCkKLSAgICA6Ci0jaWYg
U0FNUExJTkdfVE9PTF9FTkFCTEVECi0gICAgICBtX3NhbXBsZXIoMCksCi0jZWxzZQotICAgICAg
bV9yZWVudHJ5RGVwdGgoMCkKLSNlbmRpZgorICAgIDogbV9zYW1wbGVyKDApCisgICAgLCBtX3Jl
ZW50cnlEZXB0aCgwKQogICAgICwgbV90aW1lb3V0VGltZSgwKQogICAgICwgbV90aW1lQXRMYXN0
Q2hlY2tUaW1lb3V0KDApCiAgICAgLCBtX3RpbWVFeGVjdXRpbmcoMCkKQEAgLTczNSw3ICs3MzIs
OCBAQAogICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm5ld0V4
ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbiwgY29kZUJsb2NrLCBleGNlcHRpb24p
OwogICAgIG1fcmVlbnRyeURlcHRoLS07CiAKLSAgICBNQUNISU5FX1NBTVBMSU5HX3ByaXZhdGVF
eGVjdXRlUmV0dXJuZWQoKTsKKyAgICBpZiAobV9zYW1wbGVyKQorICAgICAgICBtX3NhbXBsZXIt
PnByaXZhdGVFeGVjdXRlUmV0dXJuZWQoKTsKIAogICAgIGlmICgqcHJvZmlsZXIpIHsKICAgICAg
ICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoZXhlYywgcHJvZ3JhbU5vZGUtPnNvdXJjZVVSTCgp
LCBwcm9ncmFtTm9kZS0+bGluZU5vKCkpOwpAQCAtNzk4LDcgKzc5Niw4IEBACiAgICAgSlNWYWx1
ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbmV3RXhlYywgJm1fcmVnaXN0ZXJG
aWxlLCByLCBzY29wZUNoYWluLCBuZXdDb2RlQmxvY2ssIGV4Y2VwdGlvbik7CiAgICAgbV9yZWVu
dHJ5RGVwdGgtLTsKIAotICAgIE1BQ0hJTkVfU0FNUExJTkdfcHJpdmF0ZUV4ZWN1dGVSZXR1cm5l
ZCgpOworICAgIGlmIChtX3NhbXBsZXIpCisgICAgICAgIG1fc2FtcGxlci0+cHJpdmF0ZUV4ZWN1
dGVSZXR1cm5lZCgpOwogCiAgICAgaWYgKCpwcm9maWxlciAmJiAhbV9yZWVudHJ5RGVwdGgpCiAg
ICAgICAgICgqcHJvZmlsZXIpLT5kaWRGaW5pc2hBbGxFeGVjdXRpb24oZXhlYyk7CkBAIC04NjYs
NyArODY1LDggQEAKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWws
ICZuZXdFeGVjLCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGNvZGVCbG9jaywgZXhj
ZXB0aW9uKTsKICAgICBtX3JlZW50cnlEZXB0aC0tOwogCi0gICAgTUFDSElORV9TQU1QTElOR19w
cml2YXRlRXhlY3V0ZVJldHVybmVkKCk7CisgICAgaWYgKG1fc2FtcGxlcikKKyAgICAgICAgbV9z
YW1wbGVyLT5wcml2YXRlRXhlY3V0ZVJldHVybmVkKCk7CiAKICAgICBpZiAoKnByb2ZpbGVyKSB7
CiAgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKGV4ZWMsIGV2YWxOb2RlLT5zb3VyY2VV
UkwoKSwgZXZhbE5vZGUtPmxpbmVObygpKTsKQEAgLTg4NCw0NCArODg0LDUyIEBACiAgICAgZXhl
Yy0+bV9zY29wZUNoYWluID0gbmV3U2NvcGVDaGFpbjsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQg
TWFjaGluZTo6ZGVidWcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDLCBj
b25zdCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFJl
Z2lzdGVyKiByKQorTkVWRVJfSU5MSU5FIGludCBNYWNoaW5lOjpkZWJ1ZyhFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMsIGNvbnN0IENvZGVCbG9jayogY29kZUJsb2NrLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgUmVnaXN0ZXIqIHIpCiB7CiAgICAgaW50IGRlYnVn
SG9va0lEID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgIAorICAgIGlmIChkZWJ1Z0hvb2tJRCA9
PSBEb1NhbXBsZSkgeworICAgICAgICBpZiAobV9zYW1wbGVyKQorICAgICAgICAgICAgbV9zYW1w
bGVyLT5zYW1wbGUoY29uc3RfY2FzdDxDb2RlQmxvY2sqPihjb2RlQmxvY2spLCBjb25zdF9jYXN0
PEluc3RydWN0aW9uKj4odlBDKSsxKTsKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorICAgIAog
ICAgIGludCBmaXJzdExpbmUgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgaW50IGxhc3RMaW5l
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCiAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmICghZGVidWdnZXIpCi0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVidWdnZXIpIHsKKyAgICAgICAgRGVidWdnZXJDYWxs
RnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLCBjb2Rl
QmxvY2ssIHNjb3BlQ2hhaW4sIHIsIDApOwogCi0gICAgRGVidWdnZXJDYWxsRnJhbWUgZGVidWdn
ZXJDYWxsRnJhbWUoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLCBjb2RlQmxvY2ssIHNjb3Bl
Q2hhaW4sIHIsIDApOwotCi0gICAgc3dpdGNoKChEZWJ1Z0hvb2tJRClkZWJ1Z0hvb2tJRCkgewot
ICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6IHsKLSAgICAgICAgZGVidWdnZXItPmNhbGxFdmVu
dChkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZUlkKCksIGZp
cnN0TGluZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgc3dpdGNoKChEZWJ1Z0hvb2tJRClk
ZWJ1Z0hvb2tJRCkgeworICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOiB7CisgICAgICAg
ICAgICBkZWJ1Z2dlci0+Y2FsbEV2ZW50KGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2stPm93
bmVyTm9kZS0+c291cmNlSWQoKSwgZmlyc3RMaW5lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgV2lsbExlYXZlQ2FsbEZyYW1lOiB7CisgICAgICAgICAgICBk
ZWJ1Z2dlci0+cmV0dXJuRXZlbnQoZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJO
b2RlLT5zb3VyY2VJZCgpLCBsYXN0TGluZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFdpbGxFeGVjdXRlU3RhdGVtZW50OiB7CisgICAgICAgICAgICBkZWJ1
Z2dlci0+YXRTdGF0ZW1lbnQoZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2Rl
LT5zb3VyY2VJZCgpLCBmaXJzdExpbmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVByb2dyYW06IHsKKyAgICAgICAgICAgIGRlYnVnZ2Vy
LT53aWxsRXhlY3V0ZVByb2dyYW0oZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJO
b2RlLT5zb3VyY2VJZCgpLCBmaXJzdExpbmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBEaWRFeGVjdXRlUHJvZ3JhbTogeworICAgICAgICAgICAgZGVidWdn
ZXItPmRpZEV4ZWN1dGVQcm9ncmFtKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVy
Tm9kZS0+c291cmNlSWQoKSwgbGFzdExpbmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBEaWRSZWFjaEJyZWFrcG9pbnQ6IHsKKyAgICAgICAgICAgIGRlYnVn
Z2VyLT5kaWRSZWFjaEJyZWFrcG9pbnQoZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3du
ZXJOb2RlLT5zb3VyY2VJZCgpLCBsYXN0TGluZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICB9CiAgICAgfQotICAgIGNhc2UgV2lsbExlYXZlQ2FsbEZyYW1lOiB7Ci0g
ICAgICAgIGRlYnVnZ2VyLT5yZXR1cm5FdmVudChkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2Nr
LT5vd25lck5vZGUtPnNvdXJjZUlkKCksIGxhc3RMaW5lKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjYXNlIFdpbGxFeGVjdXRlU3RhdGVtZW50OiB7Ci0gICAgICAgIGRlYnVnZ2VyLT5h
dFN0YXRlbWVudChkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJj
ZUlkKCksIGZpcnN0TGluZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBXaWxs
RXhlY3V0ZVByb2dyYW06IHsKLSAgICAgICAgZGVidWdnZXItPndpbGxFeGVjdXRlUHJvZ3JhbShk
ZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZUlkKCksIGZpcnN0
TGluZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBEaWRFeGVjdXRlUHJvZ3Jh
bTogewotICAgICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oZGVidWdnZXJDYWxsRnJh
bWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJZCgpLCBsYXN0TGluZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBEaWRSZWFjaEJyZWFrcG9pbnQ6IHsKLSAgICAgICAg
ZGVidWdnZXItPmRpZFJlYWNoQnJlYWtwb2ludChkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2Nr
LT5vd25lck5vZGUtPnNvdXJjZUlkKCksIGxhc3RMaW5lKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICB9CisgICAgCisgICAgcmV0dXJuIDQ7CiB9CiAKIHZvaWQgTWFjaGluZTo6cmVzZXRU
aW1lb3V0Q2hlY2soKQpAQCAtMjM3Miw3ICsyMzgwLDggQEAKICAgICAgICAgICAgIEpTVmFsdWUq
IHRoaXNWYWx1ZSA9IHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSA/IGV4ZWMt
Pmdsb2JhbFRoaXNWYWx1ZSgpIDogclt0aGlzVmFsXS5qc1ZhbHVlKGV4ZWMpOwogICAgICAgICAg
ICAgQXJnTGlzdCBhcmdzKHIgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7CiAKLSAgICAg
ICAgICAgIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ05hdGl2ZUZ1bmN0aW9uKCk7CisgICAgICAg
ICAgICBpZiAobV9zYW1wbGVyKQorICAgICAgICAgICAgICAgIG1fc2FtcGxlci0+Y2FsbGluZ0hv
c3RGdW5jdGlvbigpOwogCiAgICAgICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNhbGxE
YXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLCB0aGlz
VmFsdWUsIGFyZ3MpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0yNDk5
LDYgKzI1MDgsMTAgQEAKICAgICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5j
ZSktPndpbGxFeGVjdXRlKGV4ZWMsIGNvbnN0cnVjdG9yKTsKIAogICAgICAgICAgICAgQXJnTGlz
dCBhcmdzKHIgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7CisKKyAgICAgICAgICAgIGlm
IChtX3NhbXBsZXIpCisgICAgICAgICAgICAgICAgbV9zYW1wbGVyLT5jYWxsaW5nSG9zdEZ1bmN0
aW9uKCk7CisKICAgICAgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgY29uc3RydWN0b3IsIGFyZ3MpOwogCiAgICAgICAgICAg
ICBWTV9DSEVDS19FWENFUFRJT04oKTsKQEAgLTI3NTcsMTAgKzI3NzAsNyBAQAogICAgICAgICAg
Tm90aWZpZXMgdGhlIGRlYnVnZ2VyIG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIGV4ZWN1dGlvbi4g
VGhpcyBvcGNvZGUKICAgICAgICAgIGlzIG9ubHkgZ2VuZXJhdGVkIHdoaWxlIHRoZSBkZWJ1Z2dl
ciBpcyBhdHRhY2hlZC4KICAgICAgICAgKi8KLQotICAgICAgICBkZWJ1ZyhleGVjLCB2UEMsIGNv
ZGVCbG9jaywgc2NvcGVDaGFpbiwgcik7Ci0KLSAgICAgICAgdlBDICs9IDQ7CisgICAgICAgIHZQ
QyArPSBkZWJ1ZyhleGVjLCB2UEMsIGNvZGVCbG9jaywgc2NvcGVDaGFpbiwgcik7CiAgICAgICAg
IE5FWFRfT1BDT0RFOwogICAgIH0KICAgICB2bV90aHJvdzogewpJbmRleDogSmF2YVNjcmlwdENv
cmUvVk0vU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9T
YW1wbGluZ1Rvb2wuY3BwCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvVk0vU2FtcGxp
bmdUb29sLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIk1hY2hpbmUuaCIKKyNpbmNsdWRlICJPcGNvZGUuaCIKKworbmFtZXNwYWNl
IEtKUyB7CisKK3ZvaWQgU2NvcGVTYW1wbGVSZWNvcmQ6OnNhbXBsZShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSW5zdHJ1Y3Rpb24qIHZQQykKK3sKKyAgICBtX3RvdGFsQ291bnQrKzsKKworICAgIGlm
ICghbV92cGNDb3VudHMpIHsKKyAgICAgICAgbV9zaXplID0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMuc2l6ZSgpOworICAgICAgICBtX3ZwY0NvdW50cyA9IHN0YXRpY19jYXN0PGludCo+KGNhbGxv
YyhtX3NpemUsIHNpemVvZihpbnQpKSk7CisgICAgICAgIG1fY29kZUJsb2NrID0gY29kZUJsb2Nr
OworICAgIH0KKworICAgIHVuc2lnbmVkIGNvZGVPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KHZQQykgLSByZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSkpIC8gc2l6ZW9mKEluc3Ry
dWN0aW9uKik7CisgICAgLy8gVGhpcyBjb3VsZCBvY2N1ciBpZiBjb2RlQmxvY2sgJiB2UEMgYXJl
IG5vdCBjb25zaXN0ZW50IC0gZS5nLiBzYW1wbGUgbWlkIG9wX2NhbGwvb3BfcmV0LgorICAgIGlm
IChjb2RlT2Zmc2V0IDwgbV9zaXplKQorICAgICAgICBtX3ZwY0NvdW50c1tjb2RlT2Zmc2V0XSsr
OworfQorCisjaWYgUExBVEZPUk0oV0lOKQorCitzdGF0aWMgdm9pZCBzbGVlcEZvck1pY3Jvc2Vj
b25kcyh1bnNpZ25lZCB1cykKK3sKKyAgICB1bnNpZ25lZCBtcyA9IHVzLzEwMDA7CisgICAgaWYg
KHVzICYmICFtcykKKyAgICAgICAgbXMgPSAxOworICAgIFNsZWVwKG1zKTsKK30KKworI2Vsc2Ug
CisKK3N0YXRpYyB2b2lkIHNsZWVwRm9yTWljcm9zZWNvbmRzKHVuc2lnbmVkIHVzKQoreworICAg
IHVzbGVlcCh1cyk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGhlcnR6
MnVzKHVuc2lnbmVkIGhlcnR6KQoreworICAgIHJldHVybiAxMDAwMDAwIC8gaGVydHo7Cit9CisK
K3ZvaWQgU2FtcGxpbmdUb29sOjpydW4oKQoreworICAgIHdoaWxlIChtX3J1bm5pbmcpIHsKKyAg
ICAgICAgc2xlZXBGb3JNaWNyb3NlY29uZHMoaGVydHoydXMobV9oZXJ0eikpOworCisgICAgICAg
IG1fdG90YWxTYW1wbGVzKys7CisKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3Jl
Y29yZGVkQ29kZUJsb2NrOworICAgICAgICBJbnN0cnVjdGlvbiogdlBDID0gbV9yZWNvcmRlZFZQ
QzsKKworICAgICAgICBpZiAoY29kZUJsb2NrICYmIHZQQykgeworICAgICAgICAgICAgaWYgKFNj
b3BlU2FtcGxlUmVjb3JkKiByZWNvcmQgPSBtX3Njb3BlU2FtcGxlTWFwLT5nZXQoY29kZUJsb2Nr
LT5vd25lck5vZGUpKQorICAgICAgICAgICAgICAgIHJlY29yZC0+c2FtcGxlKGNvZGVCbG9jaywg
dlBDKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCogU2FtcGxpbmdUb29sOjp0aHJlYWRT
dGFydEZ1bmModm9pZCogc2FtcGxpbmdUb29sKQoreworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2Ft
cGxpbmdUb29sKj4oc2FtcGxpbmdUb29sKS0+cnVuKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgU2FtcGxpbmdUb29sOjpub3RpZnlPZlNjb3BlKFNjb3BlTm9kZSogc2NvcGUpCit7CisgICAg
bV9zY29wZVNhbXBsZU1hcC0+c2V0KHNjb3BlLCBuZXcgU2NvcGVTYW1wbGVSZWNvcmQoc2NvcGUp
KTsKK30KKwordm9pZCBTYW1wbGluZ1Rvb2w6OnN0YXJ0KHVuc2lnbmVkIGhlcnR6KQoreworICAg
IEFTU0VSVCghbV9ydW5uaW5nKTsKKyAgICBtX3J1bm5pbmcgPSB0cnVlOworICAgIG1faGVydHog
PSBoZXJ0ejsKKworICAgIG1fc2FtcGxpbmdUaHJlYWQgPSBjcmVhdGVUaHJlYWQodGhyZWFkU3Rh
cnRGdW5jLCB0aGlzKTsKK30KKwordm9pZCBTYW1wbGluZ1Rvb2w6OnN0b3AoKQoreworICAgIEFT
U0VSVChtX3J1bm5pbmcpOworICAgIG1fcnVubmluZyA9IGZhbHNlOworICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKG1fc2FtcGxpbmdUaHJlYWQsIDApOworfQorCitzdGF0aWMgaW50IGNvbXBh
cmVTY29wZVNhbXBsZVJlY29yZHMoY29uc3Qgdm9pZCogbGVmdCwgY29uc3Qgdm9pZCogcmlnaHQp
Cit7CisgICAgY29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0IGxlZnRWYWx1ZSA9ICpzdGF0
aWNfY2FzdDxjb25zdCBTY29wZVNhbXBsZVJlY29yZCogY29uc3QgKj4obGVmdCk7CisgICAgY29u
c3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0IHJpZ2h0VmFsdWUgPSAqc3RhdGljX2Nhc3Q8Y29u
c3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0ICo+KHJpZ2h0KTsKKworICAgIHJldHVybiAobGVm
dFZhbHVlLT5tX3RvdGFsQ291bnQgPCByaWdodFZhbHVlLT5tX3RvdGFsQ291bnQpID8gMSA6IChs
ZWZ0VmFsdWUtPm1fdG90YWxDb3VudCA+IHJpZ2h0VmFsdWUtPm1fdG90YWxDb3VudCkgPyAtMSA6
IDA7Cit9CisKK3ZvaWQgU2FtcGxpbmdUb29sOjpnZXRTY29wZVNhbXBsZVJlY29yZHMoVmVjdG9y
PFNjb3BlU2FtcGxlUmVjb3JkKj4gJnJlY29yZHMpCit7CisgICAgaW50IHNjb3BlQ291bnQgPSAw
LCBtYXBDb3VudCA9IG1fc2NvcGVTYW1wbGVNYXAtPnNpemUoKTsKKworICAgIHJlY29yZHMuZ3Jv
dyhtYXBDb3VudCk7CisgICAgU2NvcGVTYW1wbGVSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3Njb3BlU2FtcGxlTWFwLT5iZWdpbigpOworICAgIGZvciAoaW50IGk9MDsgaSA8IG1hcENvdW50
OyArK2ksICsraXRlcikgeworICAgICAgICBTY29wZVNhbXBsZVJlY29yZCogcmVjb3JkID0gaXRl
ci0+c2Vjb25kOworICAgICAgICBpZiAocmVjb3JkLT5tX3RvdGFsQ291bnQpCisgICAgICAgICAg
ICByZWNvcmRzW3Njb3BlQ291bnQrK10gPSByZWNvcmQ7CisgICAgfQorICAgIHJlY29yZHMuc2hy
aW5rKHNjb3BlQ291bnQpOworCisjaWYgSEFWRShNRVJHRVNPUlQpCisgICAgbWVyZ2Vzb3J0KHJl
Y29yZHMuYmVnaW4oKSwgc2NvcGVDb3VudCwgc2l6ZW9mKFNjb3BlU2FtcGxlUmVjb3JkKiksIGNv
bXBhcmVTY29wZVNhbXBsZVJlY29yZHMpOworI2Vsc2UKKyAgICBxc29ydChyZWNvcmRzLmJlZ2lu
KCksIHNjb3BlQ291bnQsIHNpemVvZihTY29wZVNhbXBsZVJlY29yZCopLCBjb21wYXJlU2NvcGVT
YW1wbGVSZWNvcmRzKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGNvbXBhcmVMaW5lQ291bnRJ
bmZvU2FtcGxpbmcoY29uc3Qgdm9pZCogbGVmdCwgY29uc3Qgdm9pZCogcmlnaHQpCit7CisgICAg
Y29uc3QgTGluZUNvdW50SW5mbyogbGVmdExpbmVDb3VudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTGluZUNvdW50SW5mbyo+KGxlZnQpOworICAgIGNvbnN0IExpbmVDb3VudEluZm8qIHJpZ2h0
TGluZUNvdW50ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMaW5lQ291bnRJbmZvKj4ocmlnaHQp
OworCisgICAgcmV0dXJuIChsZWZ0TGluZUNvdW50LT5saW5lID4gcmlnaHRMaW5lQ291bnQtPmxp
bmUpID8gMSA6IChsZWZ0TGluZUNvdW50LT5saW5lIDwgcmlnaHRMaW5lQ291bnQtPmxpbmUpID8g
LTEgOiAwOworfQorCit2b2lkIFNjb3BlU2FtcGxlUmVjb3JkOjpnZXRMaW5lQ291bnRzKFZlY3Rv
cjxMaW5lQ291bnRJbmZvPiAmbGluZUNvdW50SW5mbykKK3sKKyAgICBJbnN0cnVjdGlvbiogY29k
ZSA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKKworICAgIC8vICgxKSBDb2xs
YXRlIHRoZSBkYXRhIGluIGEgbWFwLgorCisgICAgSGFzaE1hcDx1bnNpZ25lZCx1bnNpZ25lZD4g
bGluZUNvdW50czsKKyAgICBmb3IgKHVuc2lnbmVkIG9wID0gMDsgb3AgPCBtX3NpemU7ICsrb3Ap
IHsKKyAgICAgICAgaWYgKGludCBjb3VudCA9IG1fdnBjQ291bnRzW29wXSkgeworICAgICAgICAg
ICAgdW5zaWduZWQgbGluZSA9IG1fY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKGNvZGUrb3Ap
OworICAgICAgICAgICAgbGluZUNvdW50cy5zZXQobGluZSwgKGxpbmVDb3VudHMuY29udGFpbnMo
bGluZSkgPyBsaW5lQ291bnRzLmdldChsaW5lKSA6IDApICsgY291bnQpOworICAgICAgICB9Cisg
ICAgfQorICAgIGludCBsaW5lc0NvdW50ID0gbGluZUNvdW50cy5zaXplKCk7CisKKyAgICAvLyAo
MikgU29ydCB0aGUgZGF0YSBpbnRvIHRoZSBvdXRwdXQgYXJyYXkuCisKKyAgICBsaW5lQ291bnRJ
bmZvLmdyb3cobGluZXNDb3VudCk7CisgICAgaW50IGxpbmVubyA9IDA7CisgICAgZm9yIChIYXNo
TWFwPHVuc2lnbmVkLHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IGxpbmVDb3VudHMuYmVnaW4o
KTsgaXRlciAhPSBsaW5lQ291bnRzLmVuZCgpOyArK2l0ZXIsICsrbGluZW5vKSB7CisgICAgICAg
IGxpbmVDb3VudEluZm9bbGluZW5vXS5saW5lID0gaXRlci0+Zmlyc3Q7CisgICAgICAgIGxpbmVD
b3VudEluZm9bbGluZW5vXS5jb3VudCA9IGl0ZXItPnNlY29uZDsKKyAgICB9CisjaWYgSEFWRShN
RVJHRVNPUlQpCisgICAgbWVyZ2Vzb3J0KGxpbmVDb3VudEluZm8uYmVnaW4oKSwgbGluZXNDb3Vu
dCwgc2l6ZW9mKExpbmVDb3VudEluZm8pLCBjb21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5nKTsK
KyNlbHNlCisgICAgcXNvcnQobGluZUNvdW50SW5mby5iZWdpbigpLCBsaW5lc0NvdW50LCBzaXpl
b2YoTGluZUNvdW50SW5mbyksIGNvbXBhcmVMaW5lQ291bnRJbmZvU2FtcGxpbmcpOworI2VuZGlm
Cit9CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfVE9PTF9EVU1QKQorCitzdHJ1Y3QgT3Bjb2RlU2Ft
cGxlSW5mbworeworICAgIE9wY29kZUlEIG9wY29kZTsKKyAgICBsb25nIGxvbmcgY291bnQ7Cit9
OworCitzdGF0aWMgaW50IGNvbXBhcmVPcGNvZGVJbmRpY2VzU2FtcGxpbmcoY29uc3Qgdm9pZCog
bGVmdCwgY29uc3Qgdm9pZCogcmlnaHQpCit7CisgICAgY29uc3QgT3Bjb2RlU2FtcGxlSW5mbyog
bGVmdFNhbXBsZUluZm8gPSByZWludGVycHJldF9jYXN0PGNvbnN0IE9wY29kZVNhbXBsZUluZm8q
PihsZWZ0KTsKKyAgICBjb25zdCBPcGNvZGVTYW1wbGVJbmZvKiByaWdodFNhbXBsZUluZm8gPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IE9wY29kZVNhbXBsZUluZm8qPihyaWdodCk7CisKKyAgICBy
ZXR1cm4gKGxlZnRTYW1wbGVJbmZvLT5jb3VudCA8IHJpZ2h0U2FtcGxlSW5mby0+Y291bnQpID8g
MSA6IChsZWZ0U2FtcGxlSW5mby0+Y291bnQgPiByaWdodFNhbXBsZUluZm8tPmNvdW50KSA/IC0x
IDogMDsKK30KKwordm9pZCBTYW1wbGluZ1Rvb2w6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIC8vIFRpZGllcyB1cCBTdW5TcGlkZXIgb3V0cHV0IGJ5IHJlbW92aW5nIHNob3J0IHNjcmlw
dHMgLSBzdWNoIGEgc21hbGwgbnVtYmVyIG9mIHNhbXBsZXMgd291bGQgbGlrZWx5IG5vdCBiZSB1
c2VmdWwgYW55aG93LgorICAgIGlmIChtX3RvdGFsU2FtcGxlcyA8IDEwKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gKDEpIENhbGN1bGF0ZSAndG90YWxDb2RlQmxvY2tTYW1wbGVzJywg
YnVpbGQgYW5kIHNvcnQgJ2NvZGVCbG9ja1NhbXBsZXMnIGFycmF5LgorCisgICAgVmVjdG9yPFNj
b3BlU2FtcGxlUmVjb3JkKj4gY29kZUJsb2NrU2FtcGxlczsKKyAgICBnZXRTY29wZVNhbXBsZVJl
Y29yZHMoY29kZUJsb2NrU2FtcGxlcyk7CisgICAgaW50IHNjb3BlQ291bnQgPSBjb2RlQmxvY2tT
YW1wbGVzLnNpemUoKTsKKworICAgIGxvbmcgbG9uZyB0b3RhbENvZGVCbG9ja1NhbXBsZXMgPSAw
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2NvcGVDb3VudDsgKytpKQorICAgICAgICB0b3Rh
bENvZGVCbG9ja1NhbXBsZXMgKz0gY29kZUJsb2NrU2FtcGxlc1tpXS0+bV90b3RhbENvdW50Owor
CisgICAgLy8gKDIpIFByaW50IGRhdGEgZnJvbSAnY29kZUJsb2NrU2FtcGxlcycgYXJyYXksIGNh
bGN1bGF0ZSAndG90YWxPcGNvZGVTYW1wbGVzJywgcG9wdWxhdGUgJ29wY29kZVNhbXBsZUNvdW50
cycgYXJyYXkuCisKKyAgICBsb25nIGxvbmcgdG90YWxPcGNvZGVTYW1wbGVzID0gMDsKKyAgICBs
b25nIGxvbmcgb3Bjb2RlU2FtcGxlQ291bnRzW251bU9wY29kZUlEc10gPSB7IDAgfTsKKworICAg
IGZwcmludGYoc3Rkb3V0LCAiXG5CbG9jayBzYW1wbGluZyByZXN1bHRzXG5cbiIpOyAKKyAgICBm
cHJpbnRmKHN0ZG91dCwgIlRvdGFsIGJsb2NrcyBzYW1wbGVkICh0b3RhbCBzYW1wbGVzKTogJWxs
ZCAoJWxsZClcblxuIiwgdG90YWxDb2RlQmxvY2tTYW1wbGVzLCBtX3RvdGFsU2FtcGxlcyk7CisK
KyAgICBmb3IgKGludCBpPTA7IGkgPCBzY29wZUNvdW50OyBpKyspIHsKKyAgICAgICAgU2NvcGVT
YW1wbGVSZWNvcmQgKnJlY29yZCA9IGNvZGVCbG9ja1NhbXBsZXNbaV07CisgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gcmVjb3JkLT5tX2NvZGVCbG9jazsKKworICAgICAgICBkb3VibGUg
dG90YWxQZXJjZW50ID0gKHJlY29yZC0+bV90b3RhbENvdW50ICogMTAwLjApL21fdG90YWxTYW1w
bGVzOworICAgICAgICBkb3VibGUgYmxvY2tQZXJjZW50ID0gKHJlY29yZC0+bV90b3RhbENvdW50
ICogMTAwLjApL3RvdGFsQ29kZUJsb2NrU2FtcGxlczsKKworICAgICAgICBpZiAoKGJsb2NrUGVy
Y2VudCA+PSAxKSAmJiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAi
IyVkOiAlczolZDogc2FtcGxlZCAlZCB0aW1lcyAtICUuM2YlJSAoJS4zZiUlKVxuIiwgaSsxLCBy
ZWNvcmQtPm1fc2NvcGUtPnNvdXJjZVVSTCgpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBjb2RlQmxv
Y2stPmxpbmVOdW1iZXJGb3JWUEMoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSksIHJl
Y29yZC0+bV90b3RhbENvdW50LCBibG9ja1BlcmNlbnQsIHRvdGFsUGVyY2VudCk7CisgICAgICAg
ICAgICBpZiAoaSA8IDEwKSB7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5kdW1wKGV4ZWMp
OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3AgPSAwOyBvcCA8IHJlY29yZC0+bV9z
aXplOyArK29wKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnQgY291bnQgPSByZWNvcmQt
Pm1fdnBjQ291bnRzW29wXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAg
WyUgNGRdIGhhcyBzYW1wbGUgY291bnQ6ICUgNGRcbiIsIG9wLCBjb3VudCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmKCJc
biIpOworCisgICAgICAgICAgICAgICAgVmVjdG9yPExpbmVDb3VudEluZm8+IGxpbmVDb3VudElu
Zm87CisgICAgICAgICAgICAgICAgcmVjb3JkLT5nZXRMaW5lQ291bnRzKGxpbmVDb3VudEluZm8p
OworICAgICAgICAgICAgICAgIGludCBsaW5lc0NvdW50ID0gbGluZUNvdW50SW5mby5zaXplKCk7
CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBsaW5lbm8gPSAwOyBsaW5lbm8gPCBsaW5lc0Nv
dW50OyArK2xpbmVubykgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICBMaW5lICMl
ZCBoYXMgc2FtcGxlIGNvdW50ICVkLlxuIiwgbGluZUNvdW50SW5mb1tsaW5lbm9dLmxpbmUsIGxp
bmVDb3VudEluZm9bbGluZW5vXS5jb3VudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHJlY29yZC0+bV92cGNDb3VudHMgJiYgY29kZUJsb2NrKSB7CisgICAgICAg
ICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMu
YmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3AgPSAwOyBvcCA8IHJlY29yZC0+
bV9zaXplOyArK29wKSB7CisgICAgICAgICAgICAgICAgT3Bjb2RlIG9wY29kZSA9IGluc3RydWN0
aW9uc1tvcF0udS5vcGNvZGU7CisgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPm1hY2hpbmUoKS0+
aXNPcGNvZGUob3Bjb2RlKSkgeworICAgICAgICAgICAgICAgICAgICB0b3RhbE9wY29kZVNhbXBs
ZXMgKz0gcmVjb3JkLT5tX3ZwY0NvdW50c1tvcF07CisgICAgICAgICAgICAgICAgICAgIG9wY29k
ZVNhbXBsZUNvdW50c1tleGVjLT5tYWNoaW5lKCktPmdldE9wY29kZUlEKG9wY29kZSldICs9IHJl
Y29yZC0+bV92cGNDb3VudHNbb3BdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGYoIlxuIik7CisKKyAgICAvLyAoMykgQnVpbGQg
YW5kIHNvcnQgJ29wY29kZVNhbXBsZUluZm8nIGFycmF5LgorCisgICAgT3Bjb2RlU2FtcGxlSW5m
byBvcGNvZGVTYW1wbGVJbmZvW251bU9wY29kZUlEc107CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1PcGNvZGVJRHM7ICsraSkgeworICAgICAgICBvcGNvZGVTYW1wbGVJbmZvW2ldLm9wY29k
ZSA9IChPcGNvZGVJRClpOworICAgICAgICBvcGNvZGVTYW1wbGVJbmZvW2ldLmNvdW50ID0gb3Bj
b2RlU2FtcGxlQ291bnRzW2ldOworICAgIH0KKyNpZiBIQVZFKE1FUkdFU09SVCkKKyAgICBtZXJn
ZXNvcnQob3Bjb2RlU2FtcGxlSW5mbywgbnVtT3Bjb2RlSURzLCBzaXplb2YoT3Bjb2RlU2FtcGxl
SW5mbyksIGNvbXBhcmVPcGNvZGVJbmRpY2VzU2FtcGxpbmcpOworI2Vsc2UKKyAgICBxc29ydChv
cGNvZGVTYW1wbGVJbmZvLCBudW1PcGNvZGVJRHMsIHNpemVvZihPcGNvZGVTYW1wbGVJbmZvKSwg
Y29tcGFyZU9wY29kZUluZGljZXNTYW1wbGluZyk7CisjZW5kaWYKKworICAgIC8vICg0KSBQcmlu
dCBPcGNvZGUgc2FtcGxpbmcgcmVzdWx0cy4KKyAgICAKKyAgICBmcHJpbnRmKHN0ZG91dCwgIlxu
T3Bjb2RlIHNhbXBsaW5nIHJlc3VsdHNcblxuIik7IAorICAgIAorICAgIGZwcmludGYoc3Rkb3V0
LCAiVG90YWwgb3Bjb2RlcyBzYW1wbGVkICh0b3RhbCBzYW1wbGVzKTogJWxsZCAoJWxsZClcblxu
IiwgdG90YWxPcGNvZGVTYW1wbGVzLCBtX3RvdGFsU2FtcGxlcyk7CisgICAgZnByaW50ZihzdGRv
dXQsICJPcGNvZGVzIGluIG9yZGVyOlxuXG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bU9wY29kZUlEczsgKytpKSB7CisgICAgICAgIGxvbmcgbG9uZyBjb3VudCA9IG9wY29kZVNhbXBs
ZUNvdW50c1tpXTsKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICIlczolcyU2bGxkXHQlLjNmJSVc
dCglLjNmJSUpXG4iLCBvcGNvZGVOYW1lc1tpXSwgcGFkT3Bjb2RlTmFtZSgoT3Bjb2RlSUQpaSwg
MjApLCBjb3VudCwgKChkb3VibGUpY291bnQgKiAxMDApL3RvdGFsT3Bjb2RlU2FtcGxlcywgKChk
b3VibGUpY291bnQgKiAxMDApL21fdG90YWxTYW1wbGVzKTsgICAgCisgICAgfQorICAgIGZwcmlu
dGYoc3Rkb3V0LCAiXG4iKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIk9wY29kZXMgYnkgc2FtcGxl
IGNvdW50OlxuXG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wY29kZUlEczsgKytp
KSB7CisgICAgICAgIE9wY29kZUlEIG9wY29kZSA9IG9wY29kZVNhbXBsZUluZm9baV0ub3Bjb2Rl
OworICAgICAgICBsb25nIGxvbmcgY291bnQgPSBvcGNvZGVTYW1wbGVJbmZvW2ldLmNvdW50Owor
ICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzOiVzJTZsbGRcdCUuM2YlJVx0KCUuM2YlJSlcbiIs
IG9wY29kZU5hbWVzW29wY29kZV0sIHBhZE9wY29kZU5hbWUob3Bjb2RlLCAyMCksIGNvdW50LCAo
KGRvdWJsZSljb3VudCAqIDEwMCkvdG90YWxPcGNvZGVTYW1wbGVzLCAoKGRvdWJsZSljb3VudCAq
IDEwMCkvbV90b3RhbFNhbXBsZXMpOyAgICAKKyAgICB9CisgICAgZnByaW50ZihzdGRvdXQsICJc
biIpOworfQorCisjZWxzZQorCit2b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVjU3RhdGUqKQor
eworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9WTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5o
CShyZXZpc2lvbiAzNTM3NikKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsOSArNDgsMTEgQEAKICAgICBjbGFzcyBQcm9ncmFtTm9kZTsKICAgICBj
bGFzcyBSZWdpc3RlcjsKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKKyAgICBjbGFzcyBTYW1w
bGluZ1Rvb2w7CiAKKyAgICBzdGF0aWMgY29uc3QgaW50IERvU2FtcGxlID0gMDsKICAgICBlbnVt
IERlYnVnSG9va0lEIHsKLSAgICAgICAgV2lsbEV4ZWN1dGVQcm9ncmFtLAorICAgICAgICBXaWxs
RXhlY3V0ZVByb2dyYW0gPSAxLAogICAgICAgICBEaWRFeGVjdXRlUHJvZ3JhbSwKICAgICAgICAg
RGlkRW50ZXJDYWxsRnJhbWUsCiAgICAgICAgIERpZFJlYWNoQnJlYWtwb2ludCwKQEAgLTExOSwx
MCArMTIxLDggQEAKICAgICAgICAgICAgIG1fdGltZW91dFRpbWUgPSAwOwogICAgICAgICAgICAg
bV90aW1lb3V0Q2hlY2tDb3VudCA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgCi0jaWYgU0FNUExJ
TkdfVE9PTF9FTkFCTEVECisKICAgICAgICAgU2FtcGxpbmdUb29sKiBtX3NhbXBsZXI7Ci0jZW5k
aWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gRXhlY3V0aW9uRmxhZyB7IE5vcm1hbCwg
SW5pdGlhbGl6ZUFuZFJldHVybiB9OwpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBpbml0aWFsaXplQ2FsbEZyYW1lKFJlZ2lzdGVyKiBjYWxsRnJhbWUsIENv
ZGVCbG9jayosIEluc3RydWN0aW9uKiwgU2NvcGVDaGFpbk5vZGUqLCBSZWdpc3RlciogciwgaW50
IHJldHVyblZhbHVlUmVnaXN0ZXIsIGludCBhcmd2LCBpbnQgYXJnYywgaW50IGNhbGxlZEFzQ29u
c3RydWN0b3IsIEpTVmFsdWUqIGZ1bmN0aW9uKTsKIAogICAgICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0U2NvcGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiYsIFNjb3Bl
Q2hhaW5Ob2RlKik7Ci0gICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKEV4ZWNTdGF0ZSos
IGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgQ29kZUJsb2NrKiwgU2NvcGVDaGFpbk5vZGUqLCBS
ZWdpc3RlciopOworICAgICAgICBORVZFUl9JTkxJTkUgaW50IGRlYnVnKEV4ZWNTdGF0ZSosIGNv
bnN0IEluc3RydWN0aW9uKiwgY29uc3QgQ29kZUJsb2NrKiwgU2NvcGVDaGFpbk5vZGUqLCBSZWdp
c3RlciopOwogCiAgICAgICAgIE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFtZShFeGVj
U3RhdGUqLCBKU1ZhbHVlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgQ29kZUJsb2NrKiYsIFJlZ2lz
dGVyKiYsIFNjb3BlQ2hhaW5Ob2RlKiYsIFJlZ2lzdGVyKiYpOwogICAgICAgICBORVZFUl9JTkxJ
TkUgSW5zdHJ1Y3Rpb24qIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTVmFsdWUqJiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBDb2RlQmxvY2sqJiwgUmVnaXN0ZXIqJiwgU2NvcGVDaGFpbk5vZGUq
JiwgUmVnaXN0ZXIqJiwgYm9vbCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL09wY29kZS5jcHAJKHJldmlzaW9uIDM1
Mzc2KQorKysgSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMzI0ICszMCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk9wY29kZS5o
IgogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiTWFjaGluZS5oIgotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgS0pTIHsK
IAotI2lmIFNBTVBMSU5HX1RPT0xfRU5BQkxFRCB8fCBEVU1QX09QQ09ERV9TVEFUUworI2lmIEVO
QUJMRShTQU1QTElOR19UT09MX0RVTVApIHx8IERVTVBfT1BDT0RFX1NUQVRTCiAKLXN0YXRpYyBj
b25zdCBjaGFyKiBvcGNvZGVOYW1lc1tdID0gewotICAgICJsb2FkICAgICAgICAgICAgICIsCi0g
ICAgIm5ld19vYmplY3QgICAgICAgIiwKLSAgICAibmV3X2FycmF5ICAgICAgICAiLAotICAgICJu
ZXdfcmVnZXhwICAgICAgICIsCi0gICAgIm1vdiAgICAgICAgICAgICAgIiwKLSAgICAKLSAgICAi
bm90ICAgICAgICAgICAgICAiLAotICAgICJlcSAgICAgICAgICAgICAgICIsCi0gICAgIm5lcSAg
ICAgICAgICAgICAgIiwKLSAgICAic3RyaWN0ZXEgICAgICAgICAiLAotICAgICJuc3RyaWN0ZXEg
ICAgICAgICIsCi0gICAgImxlc3MgICAgICAgICAgICAgIiwKLSAgICAibGVzc2VxICAgICAgICAg
ICAiLAotICAgIAotICAgICJwcmVfaW5jICAgICAgICAgICIsCi0gICAgInByZV9kZWMgICAgICAg
ICAgIiwKLSAgICAicG9zdF9pbmMgICAgICAgICAiLAotICAgICJwb3N0X2RlYyAgICAgICAgICIs
Ci0gICAgInRvX2pzbnVtYmVyICAgICAgIiwKLSAgICAibmVnYXRlICAgICAgICAgICAiLAotICAg
ICJhZGQgICAgICAgICAgICAgICIsCi0gICAgIm11bCAgICAgICAgICAgICAgIiwKLSAgICAiZGl2
ICAgICAgICAgICAgICAiLAotICAgICJtb2QgICAgICAgICAgICAgICIsCi0gICAgInN1YiAgICAg
ICAgICAgICAgIiwKLSAgICAKLSAgICAibHNoaWZ0ICAgICAgICAgICAiLAotICAgICJyc2hpZnQg
ICAgICAgICAgICIsCi0gICAgInVyc2hpZnQgICAgICAgICAgIiwKLSAgICAiYml0YW5kICAgICAg
ICAgICAiLAotICAgICJiaXR4b3IgICAgICAgICAgICIsCi0gICAgImJpdG9yICAgICAgICAgICAg
IiwKLSAgICAiYml0bm90ICAgICAgICAgICAiLAotICAgIAotICAgICJpbnN0YW5jZW9mICAgICAg
ICIsCi0gICAgInR5cGVvZiAgICAgICAgICAgIiwKLSAgICAiaW4gICAgICAgICAgICAgICAiLAot
Ci0gICAgInJlc29sdmUgICAgICAgICAgIiwKLSAgICAicmVzb2x2ZV9za2lwICAgICAiLAotICAg
ICJnZXRfc2NvcGVkX3ZhciAgICIsCi0gICAgInB1dF9zY29wZWRfdmFyICAgIiwKLSAgICAicmVz
b2x2ZV9iYXNlICAgICAiLAotICAgICJyZXNvbHZlX3dpdGhfYmFzZSIsCi0gICAgInJlc29sdmVf
ZnVuYyAgICAgIiwKLSAgICAiZ2V0X2J5X2lkICAgICAgICAiLAotICAgICJwdXRfYnlfaWQgICAg
ICAgICIsCi0gICAgImRlbF9ieV9pZCAgICAgICAgIiwKLSAgICAiZ2V0X2J5X3ZhbCAgICAgICAi
LAotICAgICJwdXRfYnlfdmFsICAgICAgICIsCi0gICAgImRlbF9ieV92YWwgICAgICAgIiwKLSAg
ICAicHV0X2J5X2luZGV4ICAgICAiLAotICAgICJwdXRfZ2V0dGVyICAgICAgICIsCi0gICAgInB1
dF9zZXR0ZXIgICAgICAgIiwKLQotICAgICJqbXAgICAgICAgICAgICAgICIsCi0gICAgImp0cnVl
ICAgICAgICAgICAgIiwKLSAgICAiamZhbHNlICAgICAgICAgICAiLAotICAgICJqbGVzcyAgICAg
ICAgICAgICIsCi0gICAgImpubGVzcyAgICAgICAgICAgIiwKLSAgICAiam1wX3Njb3BlcyAgICAg
ICAiLAotICAgICJsb29wICAgICAgICAgICAgICIsCi0gICAgImxvb3BfaWZfdHJ1ZSAgICAgIiwK
LSAgICAibG9vcF9pZl9sZXNzICAgICAiLAotICAgICJzd2l0Y2hfaW1tICAgICAgICIsCi0gICAg
InN3aXRjaF9jaGFyICAgICAgIiwKLSAgICAic3dpdGNoX3N0cmluZyAgICAiLAotCi0gICAgIm5l
d19mdW5jICAgICAgICAgIiwKLSAgICAibmV3X2Z1bmNfZXhwICAgICAiLAotICAgICJjYWxsICAg
ICAgICAgICAgICIsCi0gICAgImNhbGxfZXZhbCAgICAgICAgIiwKLSAgICAicmV0ICAgICAgICAg
ICAgICAiLAotCi0gICAgImNvbnN0cnVjdCAgICAgICAgIiwKLQotICAgICJnZXRfcG5hbWVzICAg
ICAgICIsCi0gICAgIm5leHRfcG5hbWUgICAgICAgIiwKLQotICAgICJwdXNoX3Njb3BlICAgICAg
ICIsCi0gICAgInBvcF9zY29wZSAgICAgICAgIiwKLQotICAgICJjYXRjaCAgICAgICAgICAgICIs
Ci0gICAgInRocm93ICAgICAgICAgICAgIiwKLSAgICAibmV3X2Vycm9yICAgICAgICAiLAotCi0g
ICAgImpzciAgICAgICAgICAgICAgIiwKLSAgICAic3JldCAgICAgICAgICAgICAiLAotCi0gICAg
ImRlYnVnICAgICAgICAgICAgIiwKLQotICAgICJlbmQgICAgICAgICAgICAgICIKK2NvbnN0IGNo
YXIqIGNvbnN0IG9wY29kZU5hbWVzW10gPSB7CisjZGVmaW5lIE9QQ09ERV9OQU1FX0VOVFJZKG9w
Y29kZSkgI29wY29kZSwKKyAgICBGT1JfRUFDSF9PUENPREVfSUQoT1BDT0RFX05BTUVfRU5UUlkp
CisjdW5kZWYgT1BDT0RFX05BTUVfRU5UUlkKIH07CiAKICNlbmRpZgogCi0jaWYgU0FNUExJTkdf
VE9PTF9FTkFCTEVECi0KLXZvaWQgU2NvcGVTYW1wbGVSZWNvcmQ6OnNhbXBsZShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQykKLXsKLSAgICBtX3RvdGFsQ291bnQrKzsKLQot
ICAgIGlmICghbV92cGNDb3VudHMpIHsKLSAgICAgICAgbV9zaXplID0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMuc2l6ZSgpOwotICAgICAgICBtX3ZwY0NvdW50cyA9IHN0YXRpY19jYXN0PGludCo+
KGNhbGxvYyhtX3NpemUsIHNpemVvZihpbnQpKSk7Ci0gICAgICAgIG1fY29kZUJsb2NrID0gY29k
ZUJsb2NrOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNvZGVPZmZzZXQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KHZQQykgLSByZWludGVycHJldF9j
YXN0PHB0cmRpZmZfdD4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSkpIC8gc2l6ZW9m
KEluc3RydWN0aW9uKik7Ci0gICAgLy8gVGhpcyBjb3VsZCBvY2N1ciBpZiBjb2RlQmxvY2sgJiB2
UEMgYXJlIG5vdCBjb25zaXN0ZW50IC0gZS5nLiBzYW1wbGUgbWlkIG9wX2NhbGwvb3BfcmV0Lgot
ICAgIGlmIChjb2RlT2Zmc2V0IDwgbV9zaXplKQotICAgICAgICBtX3ZwY0NvdW50c1tjb2RlT2Zm
c2V0XSsrOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGhlcnR6MnVzKHVuc2lnbmVkIGhl
cnR6KQotewotICAgIHJldHVybiAxMDAwMDAwIC8gaGVydHo7Ci19Ci0KLXZvaWQgU2FtcGxpbmdU
b29sOjpydW4oKQotewotICAgIHdoaWxlIChtX3J1bm5pbmcpIHsKLSAgICAgICAgdXNsZWVwKGhl
cnR6MnVzKG1faGVydHopKTsKLQotICAgICAgICBtX3RvdGFsU2FtcGxlcysrOwotCi0gICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9yZWNvcmRlZENvZGVCbG9jazsKLSAgICAgICAgSW5z
dHJ1Y3Rpb24qIHZQQyA9IG1fcmVjb3JkZWRWUEM7Ci0KLSAgICAgICAgaWYgKGNvZGVCbG9jayAm
JiB2UEMpIHsKLSAgICAgICAgICAgIFNjb3BlU2FtcGxlUmVjb3JkKiByZWNvcmQgPSBtX3Njb3Bl
U2FtcGxlTWFwLT5nZXQoY29kZUJsb2NrLT5vd25lck5vZGUpOwotICAgICAgICAgICAgaWYgKHJl
Y29yZCkKLSAgICAgICAgICAgICAgICByZWNvcmQtPnNhbXBsZShjb2RlQmxvY2ssIHZQQyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQqIFNhbXBsaW5nVG9vbDo6dGhyZWFkU3RhcnRGdW5j
KHZvaWQqIHNhbXBsaW5nVG9vbCkKLXsKLSAgICByZWludGVycHJldF9jYXN0PFNhbXBsaW5nVG9v
bCo+KHNhbXBsaW5nVG9vbCktPnJ1bigpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFNhbXBs
aW5nVG9vbDo6bm90aWZ5T2ZTY29wZShTY29wZU5vZGUqIHNjb3BlKQotewotICAgIG1fc2NvcGVT
YW1wbGVNYXAtPnNldChzY29wZSwgbmV3IFNjb3BlU2FtcGxlUmVjb3JkKHNjb3BlKSk7Ci19Ci0K
LXZvaWQgU2FtcGxpbmdUb29sOjpzdGFydCh1bnNpZ25lZCBoZXJ0eikKLXsKLSAgICBBU1NFUlQo
IW1fcnVubmluZyk7Ci0gICAgbV9ydW5uaW5nID0gdHJ1ZTsKLSAgICBtX2hlcnR6ID0gaGVydHo7
Ci0gICAgcHRocmVhZF9jcmVhdGUoJm1fc2FtcGxpbmdUaHJlYWQsIDAsIHRocmVhZFN0YXJ0RnVu
YywgdGhpcyk7Ci19Ci0KLXZvaWQgU2FtcGxpbmdUb29sOjpzdG9wKCkKLXsKLSAgICBBU1NFUlQo
bV9ydW5uaW5nKTsKLSAgICBtX3J1bm5pbmcgPSBmYWxzZTsKLSAgICBwdGhyZWFkX2pvaW4obV9z
YW1wbGluZ1RocmVhZCwgMCk7Ci19Ci0KLXN0cnVjdCBPcGNvZGVTYW1wbGVJbmZvCi17Ci0gICAg
T3Bjb2RlSUQgb3Bjb2RlOwotICAgIGxvbmcgbG9uZyBjb3VudDsKLX07Ci0KLXN0cnVjdCBMaW5l
Q291bnRJbmZvCi17Ci0gICAgdW5zaWduZWQgbGluZTsKLSAgICB1bnNpZ25lZCBjb3VudDsKLX07
Ci0KLXN0YXRpYyBpbnQgY29tcGFyZUxpbmVDb3VudEluZm9TYW1wbGluZyhjb25zdCB2b2lkKiBs
ZWZ0LCBjb25zdCB2b2lkKiByaWdodCkKLXsKLSAgICBjb25zdCBMaW5lQ291bnRJbmZvICpsZWZ0
TGluZUNvdW50ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMaW5lQ291bnRJbmZvICo+KGxlZnQp
OwotICAgIGNvbnN0IExpbmVDb3VudEluZm8gKnJpZ2h0TGluZUNvdW50ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMaW5lQ291bnRJbmZvICo+KHJpZ2h0KTsKLQotICAgIHJldHVybiAobGVmdExp
bmVDb3VudC0+bGluZSA+IHJpZ2h0TGluZUNvdW50LT5saW5lKSA/IDEgOiAobGVmdExpbmVDb3Vu
dC0+bGluZSA8IHJpZ2h0TGluZUNvdW50LT5saW5lKSA/IC0xIDogMDsKLX0KLQotc3RhdGljIGlu
dCBjb21wYXJlT3Bjb2RlSW5kaWNlc1NhbXBsaW5nKGNvbnN0IHZvaWQqIGxlZnQsIGNvbnN0IHZv
aWQqIHJpZ2h0KQotewotICAgIGNvbnN0IE9wY29kZVNhbXBsZUluZm8gKmxlZnRTYW1wbGVJbmZv
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBPcGNvZGVTYW1wbGVJbmZvICo+KGxlZnQpOwotICAg
IGNvbnN0IE9wY29kZVNhbXBsZUluZm8gKnJpZ2h0U2FtcGxlSW5mbyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgT3Bjb2RlU2FtcGxlSW5mbyAqPihyaWdodCk7Ci0KLSAgICByZXR1cm4gKGxlZnRT
YW1wbGVJbmZvLT5jb3VudCA8IHJpZ2h0U2FtcGxlSW5mby0+Y291bnQpID8gMSA6IChsZWZ0U2Ft
cGxlSW5mby0+Y291bnQgPiByaWdodFNhbXBsZUluZm8tPmNvdW50KSA/IC0xIDogMDsKLX0KLQot
c3RhdGljIGludCBjb21wYXJlU2NvcGVTYW1wbGVSZWNvcmRzKGNvbnN0IHZvaWQqIGxlZnQsIGNv
bnN0IHZvaWQqIHJpZ2h0KQotewotICAgIGNvbnN0IFNjb3BlU2FtcGxlUmVjb3JkKiBjb25zdCBs
ZWZ0VmFsdWUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0ICo+
KGxlZnQpOwotICAgIGNvbnN0IFNjb3BlU2FtcGxlUmVjb3JkKiBjb25zdCByaWdodFZhbHVlID0g
KnN0YXRpY19jYXN0PGNvbnN0IFNjb3BlU2FtcGxlUmVjb3JkKiBjb25zdCAqPihyaWdodCk7Ci0K
LSAgICByZXR1cm4gKGxlZnRWYWx1ZS0+bV90b3RhbENvdW50IDwgcmlnaHRWYWx1ZS0+bV90b3Rh
bENvdW50KSA/IDEgOiAobGVmdFZhbHVlLT5tX3RvdGFsQ291bnQgPiByaWdodFZhbHVlLT5tX3Rv
dGFsQ291bnQpID8gLTEgOiAwOwotfQotCi12b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgLy8gVGlkaWVzIHVwIFN1blNwaWRlciBvdXRwdXQgYnkgcmVtb3Zp
bmcgc2hvcnQgc2NyaXB0cyAtIHN1Y2ggYSBzbWFsbCBudW1iZXIgb2Ygc2FtcGxlcyB3b3VsZCBs
aWtlbHkgbm90IGJlIHVzZWZ1bCBhbnlob3cuCi0gICAgaWYgKG1fdG90YWxTYW1wbGVzIDwgMTAp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyAoMSkgQ2FsY3VsYXRlICd0b3RhbENvZGVC
bG9ja1NhbXBsZXMnLCBidWlsZCBhbmQgc29ydCAnY29kZUJsb2NrU2FtcGxlcycgYXJyYXkuCi0K
LSAgICBpbnQgc2NvcGVDb3VudCA9IG1fc2NvcGVTYW1wbGVNYXAtPnNpemUoKTsKLSAgICBsb25n
IGxvbmcgdG90YWxDb2RlQmxvY2tTYW1wbGVzID0gMDsKLSAgICBTY29wZVNhbXBsZVJlY29yZCog
Y29kZUJsb2NrU2FtcGxlc1tzY29wZUNvdW50XTsKLSAgICBTY29wZVNhbXBsZVJlY29yZE1hcDo6
aXRlcmF0b3IgaXRlciA9IG1fc2NvcGVTYW1wbGVNYXAtPmJlZ2luKCk7Ci0gICAgZm9yIChpbnQg
aT0wOyBpIDwgc2NvcGVDb3VudDsgKytpLCArK2l0ZXIpIHsKLSAgICAgICAgY29kZUJsb2NrU2Ft
cGxlc1tpXSA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgdG90YWxDb2RlQmxvY2tTYW1wbGVzICs9
IGNvZGVCbG9ja1NhbXBsZXNbaV0tPm1fdG90YWxDb3VudDsKLSAgICB9Ci0gICAgbWVyZ2Vzb3J0
KGNvZGVCbG9ja1NhbXBsZXMsIHNjb3BlQ291bnQsIHNpemVvZihTY29wZVNhbXBsZVJlY29yZCop
LCBjb21wYXJlU2NvcGVTYW1wbGVSZWNvcmRzKTsKLQotICAgIC8vICgyKSBQcmludCBkYXRhIGZy
b20gJ2NvZGVCbG9ja1NhbXBsZXMnIGFycmF5LCBjYWxjdWxhdGUgJ3RvdGFsT3Bjb2RlU2FtcGxl
cycsIHBvcHVsYXRlICdvcGNvZGVTYW1wbGVDb3VudHMnIGFycmF5LgotCi0gICAgbG9uZyBsb25n
IHRvdGFsT3Bjb2RlU2FtcGxlcyA9IDA7Ci0gICAgbG9uZyBsb25nIG9wY29kZVNhbXBsZUNvdW50
c1tudW1PcGNvZGVJRHNdID0geyAwIH07Ci0KLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuQmxvY2sg
c2FtcGxpbmcgcmVzdWx0c1xuXG4iKTsgCi0gICAgZnByaW50ZihzdGRvdXQsICJUb3RhbCBibG9j
a3Mgc2FtcGxlZCAodG90YWwgc2FtcGxlcyk6ICVsbGQgKCVsbGQpXG5cbiIsIHRvdGFsQ29kZUJs
b2NrU2FtcGxlcywgbV90b3RhbFNhbXBsZXMpOwotCi0gICAgZm9yIChpbnQgaT0wOyBpIDwgc2Nv
cGVDb3VudDsgaSsrKSB7Ci0gICAgICAgIFNjb3BlU2FtcGxlUmVjb3JkICpyZWNvcmQgPSBjb2Rl
QmxvY2tTYW1wbGVzW2ldOwotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHJlY29yZC0+
bV9jb2RlQmxvY2s7Ci0KLSAgICAgICAgZG91YmxlIHRvdGFsUGVyY2VudCA9IChyZWNvcmQtPm1f
dG90YWxDb3VudCAqIDEwMC4wKS9tX3RvdGFsU2FtcGxlczsKLSAgICAgICAgZG91YmxlIGJsb2Nr
UGVyY2VudCA9IChyZWNvcmQtPm1fdG90YWxDb3VudCAqIDEwMC4wKS90b3RhbENvZGVCbG9ja1Nh
bXBsZXM7Ci0KLSAgICAgICAgaWYgKChibG9ja1BlcmNlbnQgPj0gMSkgJiYgY29kZUJsb2NrKSB7
Ci0gICAgICAgICAgICBJbnN0cnVjdGlvbiogY29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
LmJlZ2luKCk7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiMlZDogJXM6JWQ6IHNhbXBs
ZWQgJWQgdGltZXMgLSAlLjNmJSUgKCUuM2YlJSlcbiIsIGkrMSwgcmVjb3JkLT5tX3Njb3BlLT5z
b3VyY2VVUkwoKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9y
VlBDKGNvZGUpLCByZWNvcmQtPm1fdG90YWxDb3VudCwgYmxvY2tQZXJjZW50LCB0b3RhbFBlcmNl
bnQpOwotICAgICAgICAgICAgaWYgKGkgPCAxMCkgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8
dW5zaWduZWQsdW5zaWduZWQ+IGxpbmVDb3VudHM7Ci0gICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5kdW1wKGV4ZWMpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3AgPSAwOyBvcCA8
IHJlY29yZC0+bV9zaXplOyArK29wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9
IHJlY29yZC0+bV92cGNDb3VudHNbb3BdOwotICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgIFslIDRkXSBoYXMgc2FtcGxl
IGNvdW50OiAlIDRkXG4iLCBvcCwgY291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbGluZSA9IGNvZGVCbG9jay0+bGluZU51bWJlckZvclZQQyhjb2RlK29wKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudHMuc2V0KGxpbmUsIChsaW5lQ291bnRzLmNvbnRh
aW5zKGxpbmUpID8gbGluZUNvdW50cy5nZXQobGluZSkgOiAwKSArIGNvdW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGYo
IlxuIik7Ci0gICAgICAgICAgICAgICAgaW50IGxpbmVzQ291bnQgPSBsaW5lQ291bnRzLnNpemUo
KTsKLSAgICAgICAgICAgICAgICBMaW5lQ291bnRJbmZvIGxpbmVDb3VudEluZm9bbGluZXNDb3Vu
dF07Ci0gICAgICAgICAgICAgICAgaW50IGxpbmVubyA9IDA7Ci0gICAgICAgICAgICAgICAgZm9y
IChIYXNoTWFwPHVuc2lnbmVkLHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IGxpbmVDb3VudHMu
YmVnaW4oKTsgaXRlciAhPSBsaW5lQ291bnRzLmVuZCgpOyArK2l0ZXIsICsrbGluZW5vKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5saW5lID0gaXRlci0+Zmly
c3Q7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5jb3VudCA9IGl0
ZXItPnNlY29uZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVyZ2Vzb3J0
KGxpbmVDb3VudEluZm8sIGxpbmVzQ291bnQsIHNpemVvZihMaW5lQ291bnRJbmZvKSwgY29tcGFy
ZUxpbmVDb3VudEluZm9TYW1wbGluZyk7Ci0gICAgICAgICAgICAgICAgZm9yIChsaW5lbm8gPSAw
OyBsaW5lbm8gPCBsaW5lc0NvdW50OyArK2xpbmVubykgewotICAgICAgICAgICAgICAgICAgICBw
cmludGYoIiAgICBMaW5lICMlZCBoYXMgc2FtcGxlIGNvdW50ICVkLlxuIiwgbGluZUNvdW50SW5m
b1tsaW5lbm9dLmxpbmUsIGxpbmVDb3VudEluZm9bbGluZW5vXS5jb3VudCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHJlY29yZC0+bV92cGNDb3VudHMgJiYgY29k
ZUJsb2NrKSB7Ci0gICAgICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zID0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3Ag
PSAwOyBvcCA8IHJlY29yZC0+bV9zaXplOyArK29wKSB7Ci0gICAgICAgICAgICAgICAgT3Bjb2Rl
IG9wY29kZSA9IGluc3RydWN0aW9uc1tvcF0udS5vcGNvZGU7Ci0gICAgICAgICAgICAgICAgaWYg
KGV4ZWMtPm1hY2hpbmUoKS0+aXNPcGNvZGUob3Bjb2RlKSkgewotICAgICAgICAgICAgICAgICAg
ICB0b3RhbE9wY29kZVNhbXBsZXMgKz0gcmVjb3JkLT5tX3ZwY0NvdW50c1tvcF07Ci0gICAgICAg
ICAgICAgICAgICAgIG9wY29kZVNhbXBsZUNvdW50c1tleGVjLT5tYWNoaW5lKCktPmdldE9wY29k
ZUlEKG9wY29kZSldICs9IHJlY29yZC0+bV92cGNDb3VudHNbb3BdOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBwcmludGYoIlxuIik7Ci0K
LSAgICAvLyAoMykgQnVpbGQgYW5kIHNvcnQgJ29wY29kZVNhbXBsZUluZm8nIGFycmF5LgotCi0g
ICAgT3Bjb2RlU2FtcGxlSW5mbyBvcGNvZGVTYW1wbGVJbmZvW251bU9wY29kZUlEc107Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1PcGNvZGVJRHM7ICsraSkgewotICAgICAgICBvcGNvZGVT
YW1wbGVJbmZvW2ldLm9wY29kZSA9IChPcGNvZGVJRClpOwotICAgICAgICBvcGNvZGVTYW1wbGVJ
bmZvW2ldLmNvdW50ID0gb3Bjb2RlU2FtcGxlQ291bnRzW2ldOwotICAgIH0KLSAgICBtZXJnZXNv
cnQob3Bjb2RlU2FtcGxlSW5mbywgbnVtT3Bjb2RlSURzLCBzaXplb2YoT3Bjb2RlU2FtcGxlSW5m
byksIGNvbXBhcmVPcGNvZGVJbmRpY2VzU2FtcGxpbmcpOwotCi0gICAgLy8gKDQpIFByaW50IE9w
Y29kZSBzYW1wbGluZyByZXN1bHRzLgotICAgIAotICAgIGZwcmludGYoc3Rkb3V0LCAiXG5PcGNv
ZGUgc2FtcGxpbmcgcmVzdWx0c1xuXG4iKTsgCi0gICAgCi0gICAgZnByaW50ZihzdGRvdXQsICJU
b3RhbCBvcGNvZGVzIHNhbXBsZWQgKHRvdGFsIHNhbXBsZXMpOiAlbGxkICglbGxkKVxuXG4iLCB0
b3RhbE9wY29kZVNhbXBsZXMsIG1fdG90YWxTYW1wbGVzKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwg
Ik9wY29kZXMgaW4gb3JkZXI6XG5cbiIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtT3Bj
b2RlSURzOyArK2kpIHsKLSAgICAgICAgbG9uZyBsb25nIGNvdW50ID0gb3Bjb2RlU2FtcGxlQ291
bnRzW2ldOwotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzOlx0JTZsbGRcdCUuM2YlJVx0KCUu
M2YlJSlcbiIsIG9wY29kZU5hbWVzW2ldLCBjb3VudCwgKChkb3VibGUpY291bnQgKiAxMDApL3Rv
dGFsT3Bjb2RlU2FtcGxlcywgKChkb3VibGUpY291bnQgKiAxMDApL21fdG90YWxTYW1wbGVzKTsg
ICAgCi0gICAgfQotICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKLSAgICBmcHJpbnRmKHN0ZG91
dCwgIk9wY29kZXMgYnkgc2FtcGxlIGNvdW50OlxuXG4iKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bU9wY29kZUlEczsgKytpKSB7Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZSA9IG9wY29k
ZVNhbXBsZUluZm9baV0ub3Bjb2RlOwotICAgICAgICBsb25nIGxvbmcgY291bnQgPSBvcGNvZGVT
YW1wbGVJbmZvW2ldLmNvdW50OwotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzOlx0JTZsbGRc
dCUuM2YlJVx0KCUuM2YlJSlcbiIsIG9wY29kZU5hbWVzW29wY29kZV0sIGNvdW50LCAoKGRvdWJs
ZSljb3VudCAqIDEwMCkvdG90YWxPcGNvZGVTYW1wbGVzLCAoKGRvdWJsZSljb3VudCAqIDEwMCkv
bV90b3RhbFNhbXBsZXMpOyAgICAKLSAgICB9Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbiIpOwot
fQotCi0jZW5kaWYKLQotCiAjaWYgRFVNUF9PUENPREVfU1RBVFMKIAogbG9uZyBsb25nIE9wY29k
ZVN0YXRzOjpvcGNvZGVDb3VudHNbbnVtT3Bjb2RlSURzXTsKQEAgLTQyNSw3ICsxMjEsNyBAQAog
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1PcGNvZGVJRHM7ICsraSkgewogICAgICAgICBp
bnQgaW5kZXggPSBzb3J0ZWRJbmRpY2VzW2ldOwotICAgICAgICBwcmludGYoIiVzOiAlbGxkIC0g
JS4yZiUlXG4iLCBvcGNvZGVOYW1lc1tpbmRleF0sIG9wY29kZUNvdW50c1tpbmRleF0sICgoZG91
YmxlKSBvcGNvZGVDb3VudHNbaW5kZXhdKSAvICgoZG91YmxlKSB0b3RhbEluc3RydWN0aW9ucykg
KiAxMDAuMCk7ICAgIAorICAgICAgICBwcmludGYoIiVzOiVzICVsbGQgLSAlLjJmJSVcbiIsIG9w
Y29kZU5hbWVzW2luZGV4XSwgcGFkT3Bjb2RlTmFtZSgoT3Bjb2RlSUQpaW5kZXgsIDI0KSwgb3Bj
b2RlQ291bnRzW2luZGV4XSwgKChkb3VibGUpIG9wY29kZUNvdW50c1tpbmRleF0pIC8gKChkb3Vi
bGUpIHRvdGFsSW5zdHJ1Y3Rpb25zKSAqIDEwMC4wKTsgICAgCiAgICAgfQogICAgIAogICAgIHBy
aW50ZigiXG4iKTsKQEAgLTQzOCw3ICsxMzQsNyBAQAogICAgICAgICBpZiAoIWNvdW50KQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICBwcmludGYoIiVzICVzOiAlbGxkICUu
MmYlJVxuIiwgb3Bjb2RlTmFtZXNbaW5kZXhQYWlyLmZpcnN0XSwgb3Bjb2RlTmFtZXNbaW5kZXhQ
YWlyLnNlY29uZF0sIGNvdW50LCAoKGRvdWJsZSkgY291bnQpIC8gKChkb3VibGUpIHRvdGFsSW5z
dHJ1Y3Rpb25QYWlycykgKiAxMDAuMCk7CisgICAgICAgIHByaW50ZigiJXMlcyAlczolcyAlbGxk
ICUuMmYlJVxuIiwgb3Bjb2RlTmFtZXNbaW5kZXhQYWlyLmZpcnN0XSwgcGFkT3Bjb2RlTmFtZSgo
T3Bjb2RlSUQpaW5kZXhQYWlyLmZpcnN0LCAyNCksIG9wY29kZU5hbWVzW2luZGV4UGFpci5zZWNv
bmRdLCBwYWRPcGNvZGVOYW1lKChPcGNvZGVJRClpbmRleFBhaXIuc2Vjb25kLCAyNCksIGNvdW50
LCAoKGRvdWJsZSkgY291bnQpIC8gKChkb3VibGUpIHRvdGFsSW5zdHJ1Y3Rpb25QYWlycykgKiAx
MDAuMCk7CiAgICAgfQogICAgIAogICAgIHByaW50ZigiXG4iKTsKQEAgLTQ1MCw3ICsxNDYsNyBA
QAogICAgICAgICBkb3VibGUgb3Bjb2RlUHJvcG9ydGlvbiA9ICgoZG91YmxlKSBvcGNvZGVDb3Vu
dCkgLyAoKGRvdWJsZSkgdG90YWxJbnN0cnVjdGlvbnMpOwogICAgICAgICBpZiAob3Bjb2RlUHJv
cG9ydGlvbiA8IDAuMDAwMSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwcmludGYoIlxu
JXM6ICVsbGQgLSAlLjJmJSVcbiIsIG9wY29kZU5hbWVzW2luZGV4XSwgb3Bjb2RlQ291bnQsIG9w
Y29kZVByb3BvcnRpb24gKiAxMDAuMCk7CisgICAgICAgIHByaW50ZigiXG4lczolcyAlbGxkIC0g
JS4yZiUlXG4iLCBvcGNvZGVOYW1lc1tpbmRleF0sIHBhZE9wY29kZU5hbWUoKE9wY29kZUlEKWlu
ZGV4LCAyNCksIG9wY29kZUNvdW50LCBvcGNvZGVQcm9wb3J0aW9uICogMTAwLjApOwogCiAgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtT3Bjb2RlSURzICogbnVtT3Bjb2RlSURzOyArK2op
IHsKICAgICAgICAgICAgIHBhaXI8aW50LCBpbnQ+IGluZGV4UGFpciA9IHNvcnRlZFBhaXJJbmRp
Y2VzW2pdOwpAQCAtNDYzLDcgKzE1OSw3IEBACiAgICAgICAgICAgICBpZiAoaW5kZXhQYWlyLmZp
cnN0ICE9IGluZGV4ICYmIGluZGV4UGFpci5zZWNvbmQgIT0gaW5kZXgpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgIHByaW50ZigiICAgICVzICVzOiAlbGxkIC0gJS4y
ZiUlXG4iLCBvcGNvZGVOYW1lc1tpbmRleFBhaXIuZmlyc3RdLCBvcGNvZGVOYW1lc1tpbmRleFBh
aXIuc2Vjb25kXSwgcGFpckNvdW50LCBwYWlyUHJvcG9ydGlvbiAqIDEwMC4wKTsKKyAgICAgICAg
ICAgIHByaW50ZigiICAgICVzJXMgJXM6JXMgJWxsZCAtICUuMmYlJVxuIiwgb3Bjb2RlTmFtZXNb
aW5kZXhQYWlyLmZpcnN0XSwgcGFkT3Bjb2RlTmFtZSgoT3Bjb2RlSUQpaW5kZXhQYWlyLmZpcnN0
LCAyNCksIG9wY29kZU5hbWVzW2luZGV4UGFpci5zZWNvbmRdLCBwYWRPcGNvZGVOYW1lKChPcGNv
ZGVJRClpbmRleFBhaXIuc2Vjb25kLCAyNCksIHBhaXJDb3VudCwgcGFpclByb3BvcnRpb24gKiAx
MDAuMCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgfQpAQCAtNDg3LDQgKzE4Myw0IEBACiAK
ICNlbmRpZgogCi19IC8vIG5hbWVzcGFjZSBXVEYKK30gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDog
SmF2YVNjcmlwdENvcmUvVk0vU2FtcGxpbmdUb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvVk0vU2FtcGxpbmdUb29sLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9W
TS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2FtcGxpbmdUb29sX2gKKyNkZWZpbmUgU2FtcGxpbmdUb29sX2gKKworI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEtKUyB7CisKKyAgICBjbGFzcyBDb2RlQmxvY2s7CisgICAgY2xhc3Mg
RXhlY1N0YXRlOworICAgIGNsYXNzIFNjb3BlTm9kZTsKKyAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247
CisKKyAgICBzdHJ1Y3QgTGluZUNvdW50SW5mbworICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGlu
ZTsKKyAgICAgICAgdW5zaWduZWQgY291bnQ7CisgICAgfTsKKworICAgIHN0cnVjdCBTY29wZVNh
bXBsZVJlY29yZAorICAgIHsKKyAgICAgICAgUmVmUHRyPFNjb3BlTm9kZT4gbV9zY29wZTsKKyAg
ICAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICAgICAgaW50IG1fdG90YWxDb3VudDsK
KyAgICAgICAgaW50KiBtX3ZwY0NvdW50czsKKyAgICAgICAgdW5zaWduZWQgbV9zaXplOworICAg
ICAgICAKKyAgICAgICAgU2NvcGVTYW1wbGVSZWNvcmQoU2NvcGVOb2RlKiBzY29wZSkKKyAgICAg
ICAgICAgIDogbV9zY29wZShzY29wZSkKKyAgICAgICAgICAgICwgbV9jb2RlQmxvY2soMCkKKyAg
ICAgICAgICAgICwgbV90b3RhbENvdW50KDApCisgICAgICAgICAgICAsIG1fdnBjQ291bnRzKDAp
CisgICAgICAgICAgICAsIG1fc2l6ZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIH5TY29wZVNhbXBsZVJlY29yZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtX3ZwY0NvdW50cykKKyAgICAgICAgICAgICAgICBmcmVlKG1fdnBjQ291bnRzKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzYW1wbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEluc3RydWN0aW9uKiB2UEMpOworCisgICAgICAgIHZvaWQgZ2V0TGluZUNvdW50cyhWZWN0b3I8
TGluZUNvdW50SW5mbz4gJmxpbmVDb3VudEluZm8pOworICAgIH07CisKKyAgICB0eXBlZGVmIFdU
Rjo6SGFzaE1hcDxTY29wZU5vZGUqLCBTY29wZVNhbXBsZVJlY29yZCo+IFNjb3BlU2FtcGxlUmVj
b3JkTWFwOworCisgICAgY2xhc3MgU2FtcGxpbmdUb29sCisgICAgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgU2FtcGxpbmdUb29sKCkKKyAgICAgICAgICAgIDogbV9ydW5uaW5nKGZhbHNlKQorICAg
ICAgICAgICAgLCBtX3JlY29yZGVkQ29kZUJsb2NrKDApCisgICAgICAgICAgICAsIG1fcmVjb3Jk
ZWRWUEMoMCkKKyAgICAgICAgICAgICwgbV90b3RhbFNhbXBsZXMoMCkKKyAgICAgICAgICAgICwg
bV9zY29wZVNhbXBsZU1hcChuZXcgU2NvcGVTYW1wbGVSZWNvcmRNYXAoKSkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgflNhbXBsaW5nVG9vbCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRlbGV0ZUFsbFZhbHVlcygqbV9zY29wZVNhbXBsZU1hcCk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHN0YXJ0KHVuc2lnbmVkIGhlcnR6PTEwMDApOworICAgICAgICB2b2lkIHN0b3Ao
KTsKKworICAgICAgICB2b2lkIGdldFNjb3BlU2FtcGxlUmVjb3JkcyhWZWN0b3I8U2NvcGVTYW1w
bGVSZWNvcmQqPiAmcmVjb3Jkcyk7CisKKyAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSopOwor
CisgICAgICAgIHZvaWQgbm90aWZ5T2ZTY29wZShTY29wZU5vZGUqIHNjb3BlKTsKKworICAgICAg
ICB2b2lkIHNhbXBsZShDb2RlQmxvY2sqIHJlY29yZGVkQ29kZUJsb2NrLCBJbnN0cnVjdGlvbiog
cmVjb3JkZWRWUEMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmVjb3JkZWRDb2RlQmxvY2sg
PSByZWNvcmRlZENvZGVCbG9jazsKKyAgICAgICAgICAgIG1fcmVjb3JkZWRWUEMgPSByZWNvcmRl
ZFZQQzsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHJpdmF0ZUV4ZWN1dGVSZXR1cm5lZCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmVjb3JkZWRDb2RlQmxvY2sgPSAwOworICAgICAg
ICAgICAgbV9yZWNvcmRlZFZQQyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgY2FsbGluZ0hvc3RGdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmVjb3Jk
ZWRDb2RlQmxvY2sgPSAwOworICAgICAgICAgICAgbV9yZWNvcmRlZFZQQyA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIHZvaWQqIHRocmVhZFN0
YXJ0RnVuYyh2b2lkKik7CisgICAgICAgIHZvaWQgcnVuKCk7CisgICAgICAgIAorICAgICAgICAv
LyBTYW1wbGluZyB0aHJlYWQgc3RhdGUuCisgICAgICAgIGJvb2wgbV9ydW5uaW5nOworICAgICAg
ICB1bnNpZ25lZCBtX2hlcnR6OworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fc2FtcGxpbmdU
aHJlYWQ7CisKKyAgICAgICAgLy8gU3RhdGUgdHJhY2tlZCBieSB0aGUgbWFpbiB0aHJlYWQsIHVz
ZWQgYnkgdGhlIHNhbXBsaW5nIHRocmVhZC4KKyAgICAgICAgQ29kZUJsb2NrKiBtX3JlY29yZGVk
Q29kZUJsb2NrOworICAgICAgICBJbnN0cnVjdGlvbiogbV9yZWNvcmRlZFZQQzsKKworICAgICAg
ICAvLyBHYXRoZXJlZCBzYW1wbGUgZGF0YS4KKyAgICAgICAgbG9uZyBsb25nIG1fdG90YWxTYW1w
bGVzOworICAgICAgICBPd25QdHI8U2NvcGVTYW1wbGVSZWNvcmRNYXA+IG1fc2NvcGVTYW1wbGVN
YXA7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgS0pTCisKKyNpZiBFTkFCTEUoU0FNUExJTkdf
VE9PTF9BTFdBWVMpCisjZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfc2FtcGxlKGNvZGVCbG9jaywg
dlBDKSBpZiAobV9zYW1wbGVyKSBtX3NhbXBsZXItPnNhbXBsZShjb2RlQmxvY2ssIHZQQykKKyNl
bHNlCisjZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfc2FtcGxlKGNvZGVCbG9jaywgdlBDKQorI2Vu
ZGlmCisKKworI2VuZGlmIC8vIFNhbXBsaW5nVG9vbF9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9W
TS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaAkocmV2
aXNpb24gMzUzNzYpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTIgKzMwLDEzIEBACiAjaWZuZGVmIE9wY29kZXNfaAogI2RlZmluZSBPcGNvZGVz
X2gKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNw
YWNlIEtKUyB7CiAKLSNkZWZpbmUgU0FNUExJTkdfVE9PTF9FTkFCTEVEIDAKICNkZWZpbmUgRFVN
UF9PUENPREVfU1RBVFMgMAogCiAgICAgI2RlZmluZSBGT1JfRUFDSF9PUENPREVfSUQobWFjcm8p
IFwKQEAgLTE0OCwxMTggKzE0OSwyNSBAQAogICAgIHR5cGVkZWYgT3Bjb2RlSUQgT3Bjb2RlOwog
I2VuZGlmCiAKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgU2NvcGVOb2RlOwotICAg
IGNsYXNzIENvZGVCbG9jazsKLSAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CisjaWYgRU5BQkxFKFNB
TVBMSU5HX1RPT0xfRFVNUCkgfHwgRFVNUF9PUENPREVfU1RBVFMKIAotI2lmIFNBTVBMSU5HX1RP
T0xfRU5BQkxFRAorI2RlZmluZSBQQURESU5HX1NUUklORyAiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiCisjZGVmaW5lIFBBRERJTkdfU1RSSU5HX0xFTkdUSCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RybGVuKFBBRERJTkdfU1RSSU5HKSkKIAotICAgIHN0cnVjdCBTY29wZVNhbXBs
ZVJlY29yZAotICAgIHsKLSAgICAgICAgUmVmUHRyPFNjb3BlTm9kZT4gbV9zY29wZTsKLSAgICAg
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLSAgICAgICAgaW50IG1fdG90YWxDb3VudDsKLSAg
ICAgICAgaW50KiBtX3ZwY0NvdW50czsKLSAgICAgICAgdW5zaWduZWQgbV9zaXplOwotICAgICAg
ICAKLSAgICAgICAgU2NvcGVTYW1wbGVSZWNvcmQoU2NvcGVOb2RlKiBzY29wZSkKLSAgICAgICAg
ICAgIDogbV9zY29wZShzY29wZSkKLSAgICAgICAgICAgICwgbV9jb2RlQmxvY2soMCkKLSAgICAg
ICAgICAgICwgbV90b3RhbENvdW50KDApCi0gICAgICAgICAgICAsIG1fdnBjQ291bnRzKDApCi0g
ICAgICAgICAgICAsIG1fc2l6ZSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIH5TY29wZVNhbXBsZVJlY29yZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
X3ZwY0NvdW50cykKLSAgICAgICAgICAgICAgICBmcmVlKG1fdnBjQ291bnRzKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgdm9pZCBzYW1wbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElu
c3RydWN0aW9uKiB2UEMpOwotICAgIH07CisgICAgZXh0ZXJuIGNvbnN0IGNoYXIqIGNvbnN0IG9w
Y29kZU5hbWVzW107CiAKLSAgICB0eXBlZGVmIFdURjo6SGFzaE1hcDxTY29wZU5vZGUqLCBTY29w
ZVNhbXBsZVJlY29yZCo+IFNjb3BlU2FtcGxlUmVjb3JkTWFwOwotCi0gICAgY2xhc3MgU2FtcGxp
bmdUb29sCisgICAgaW5saW5lIGNvbnN0IGNoYXIqIHBhZE9wY29kZU5hbWUoT3Bjb2RlSUQgb3As
IHVuc2lnbmVkIHdpZHRoKQogICAgIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNhbXBsaW5nVG9v
bCgpCi0gICAgICAgICAgICA6IG1fcnVubmluZyhmYWxzZSkKLSAgICAgICAgICAgICwgbV9yZWNv
cmRlZENvZGVCbG9jaygwKQotICAgICAgICAgICAgLCBtX3JlY29yZGVkVlBDKDApCi0gICAgICAg
ICAgICAsIG1fdG90YWxTYW1wbGVzKDApCi0gICAgICAgICAgICAsIG1fc2NvcGVTYW1wbGVNYXAo
bmV3IFNjb3BlU2FtcGxlUmVjb3JkTWFwKCkpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAg
ICB1bnNpZ25lZCBwYWQgPSB3aWR0aCAtIHN0cmxlbihvcGNvZGVOYW1lc1tvcF0pOworICAgICAg
ICBwYWQgPSBzdGQ6Om1pbihwYWQsIFBBRERJTkdfU1RSSU5HX0xFTkdUSCk7CisgICAgICAgIHJl
dHVybiBQQURESU5HX1NUUklORyArIFBBRERJTkdfU1RSSU5HX0xFTkdUSCAtIHBhZDsKKyAgICB9
CiAKLSAgICAgICAgflNhbXBsaW5nVG9vbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
U2NvcGVTYW1wbGVSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlU2FtcGxlTWFwLT5i
ZWdpbigpOyBpdGVyICE9IG1fc2NvcGVTYW1wbGVNYXAtPmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
ICAgICAgICAgZGVsZXRlIGl0ZXItPnNlY29uZDsKLSAgICAgICAgICAgIGRlbGV0ZSBtX3Njb3Bl
U2FtcGxlTWFwOwotICAgICAgICB9CisjdW5kZWYgUEFERElOR19TVFJJTkdfTEVOR1RICisjdW5k
ZWYgUEFERElOR19TVFJJTkcKIAotICAgICAgICB2b2lkIHN0YXJ0KHVuc2lnbmVkIGhlcnR6PTEw
MDApOwotICAgICAgICB2b2lkIHN0b3AoKTsKLSAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSop
OwotCi0gICAgICAgIHZvaWQgbm90aWZ5T2ZTY29wZShTY29wZU5vZGUqIHNjb3BlKTsKLQotICAg
ICAgICB2b2lkIHNhbXBsZShDb2RlQmxvY2sqIHJlY29yZGVkQ29kZUJsb2NrLCBJbnN0cnVjdGlv
biogcmVjb3JkZWRWUEMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fcmVjb3JkZWRDb2RlQmxv
Y2sgPSByZWNvcmRlZENvZGVCbG9jazsKLSAgICAgICAgICAgIG1fcmVjb3JkZWRWUEMgPSByZWNv
cmRlZFZQQzsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHJpdmF0ZUV4ZWN1dGVSZXR1cm5l
ZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fcmVjb3JkZWRDb2RlQmxvY2sgPSAwOwotICAg
ICAgICAgICAgbV9yZWNvcmRlZFZQQyA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHZvaWQgY2FsbGluZ05hdGl2ZUZ1bmN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9y
ZWNvcmRlZENvZGVCbG9jayA9IDA7Ci0gICAgICAgICAgICBtX3JlY29yZGVkVlBDID0gMDsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgdm9pZCogdGhy
ZWFkU3RhcnRGdW5jKHZvaWQqKTsKLSAgICAgICAgdm9pZCBydW4oKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFNhbXBsaW5nIHRocmVhZCBzdGF0ZS4KLSAgICAgICAgYm9vbCBtX3J1bm5pbmc7Ci0g
ICAgICAgIHVuc2lnbmVkIG1faGVydHo7Ci0gICAgICAgIHB0aHJlYWRfdCBtX3NhbXBsaW5nVGhy
ZWFkOwotCi0gICAgICAgIC8vIFN0YXRlIHRyYWNrZWQgYnkgdGhlIG1haW4gdGhyZWFkLCB1c2Vk
IGJ5IHRoZSBzYW1wbGluZyB0aHJlYWQuCi0gICAgICAgIENvZGVCbG9jayogbV9yZWNvcmRlZENv
ZGVCbG9jazsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIG1fcmVjb3JkZWRWUEM7Ci0KLSAgICAgICAg
Ly8gR2F0aGVyZWQgc2FtcGxlIGRhdGEuCi0gICAgICAgIGxvbmcgbG9uZyBtX3RvdGFsU2FtcGxl
czsKLSAgICAgICAgU2NvcGVTYW1wbGVSZWNvcmRNYXAqIG1fc2NvcGVTYW1wbGVNYXA7Ci0gICAg
fTsKLQogI2VuZGlmCiAKLS8vIFNDT1BFTk9ERV8gLyBNQUNISU5FXyBtYWNyb3MgZm9yIHVzZSBm
cm9tIHdpdGhpbiBtZW1iZXIgbWV0aG9kcyBvbiBTY29wZU5vZGUgLyBNYWNoaW5lIHJlc3BlY3Rp
dmVseS4KLSNpZiBTQU1QTElOR19UT09MX0VOQUJMRUQKLSNkZWZpbmUgU0NPUEVOT0RFX1NBTVBM
SU5HX25vdGlmeU9mU2NvcGUoc2FtcGxlcikgc2FtcGxlci0+bm90aWZ5T2ZTY29wZSh0aGlzKQot
I2RlZmluZSBNQUNISU5FX1NBTVBMSU5HX3NhbXBsZShjb2RlQmxvY2ssIHZQQykgbV9zYW1wbGVy
LT5zYW1wbGUoY29kZUJsb2NrLCB2UEMpCi0jZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfcHJpdmF0
ZUV4ZWN1dGVSZXR1cm5lZCgpIG1fc2FtcGxlci0+cHJpdmF0ZUV4ZWN1dGVSZXR1cm5lZCgpCi0j
ZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ05hdGl2ZUZ1bmN0aW9uKCkgbV9zYW1wbGVy
LT5jYWxsaW5nTmF0aXZlRnVuY3Rpb24oKQotI2Vsc2UKLSNkZWZpbmUgU0NPUEVOT0RFX1NBTVBM
SU5HX25vdGlmeU9mU2NvcGUoc2FtcGxlcikKLSNkZWZpbmUgTUFDSElORV9TQU1QTElOR19zYW1w
bGUoY29kZUJsb2NrLCB2UEMpCi0jZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfcHJpdmF0ZUV4ZWN1
dGVSZXR1cm5lZCgpCi0jZGVmaW5lIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ05hdGl2ZUZ1bmN0
aW9uKCkKLSNlbmRpZgotCi0KICNpZiBEVU1QX09QQ09ERV9TVEFUUwogCiAgICAgc3RydWN0IE9w
Y29kZVN0YXRzIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAzNTM3NikKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTUyLDcgKzExNTIsNiBAQAogCiB2b2lkIENvZGVHZW5lcmF0b3I6OmJlZ2lu
U3dpdGNoKFJlZ2lzdGVySUQqIHNjcnV0aW5lZVJlZ2lzdGVyLCBTd2l0Y2hJbmZvOjpTd2l0Y2hU
eXBlIHR5cGUpCiB7Ci0gICAgU3dpdGNoSW5mbyBpbmZvID0geyBpbnN0cnVjdGlvbnMoKS5zaXpl
KCksIHR5cGUgfTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hJbmZv
OjpTd2l0Y2hJbW1lZGlhdGU6CiAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX3N3aXRjaF9pbW0p
OwpAQCAtMTE2Nyw2ICsxMTY2LDggQEAKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KIAorICAgIFN3aXRjaEluZm8gaW5mbyA9IHsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
LTEsIHR5cGUgfTsKKwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gcGxhY2UgaG9s
ZGVyIGZvciB0YWJsZSBpbmRleAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gcGxh
Y2UgaG9sZGVyIGZvciBkZWZhdWx0IHRhcmdldCAgICAKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoc2NydXRpbmVlUmVnaXN0ZXItPmluZGV4KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0v
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAzNTM3NikKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2OSw5ICs2NjksMTMgQEAKICAgICAgICAgfQogICAgICAgICBj
YXNlIG9wX2RlYnVnOiB7CiAgICAgICAgICAgICBpbnQgZGVidWdIb29rSUQgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmaXJzdExpbmUgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCBsYXN0TGluZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgcHJpbnRmKCJbJTRkXSBkZWJ1Z1x0XHQgJXMsICVkLCAlZFxuIiwgbG9jYXRpb24sIGRlYnVn
SG9va05hbWUoZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKKyAgICAgICAgICAg
IGlmIChkZWJ1Z0hvb2tJRCA9PSBEb1NhbXBsZSkgeworICAgICAgICAgICAgICAgIHByaW50Zigi
WyU0ZF0gc2FtcGxlXG4iLCBsb2NhdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGludCBmaXJzdExpbmUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
ICAgICBpbnQgbGFzdExpbmUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgICAgICBw
cmludGYoIlslNGRdIGRlYnVnXHRcdCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgZGVidWdIb29r
TmFtZShkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUpOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9lbmQ6IHsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDM1Mzc2KQorKysgSmF2YVNj
cmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTcz
LDEzIEBACiAgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5saW5lSW5mby5zaXplKCkgfHwg
bV9jb2RlQmxvY2stPmxpbmVJbmZvLmxhc3QoKS5saW5lTnVtYmVyICE9IG4tPmxpbmVObygpKSB7
CiAgICAgICAgICAgICAgICAgTGluZUluZm8gaW5mbyA9IHsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
LCBuLT5saW5lTm8oKSB9OwogICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5saW5lSW5mby5h
cHBlbmQoaW5mbyk7CisKKyNpZiAhRU5BQkxFKFNBTVBMSU5HX1RPT0xfQUxXQVlTKQorICAgICAg
ICAgICAgICAgIGlmIChnbG9iYWxEYXRhKCktPm1hY2hpbmUtPm1fc2FtcGxlcikgeworICAgICAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2xvYmFsRGF0YSgpLT5tYWNoaW5l
LT5nZXRPcGNvZGUob3BfZGVidWcpKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKERvU2FtcGxlKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBuLT5lbWl0Q29kZSgqdGhpcywgZHN0KTsKICAgICAg
ICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzUzNzYpCisrKyBKYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAwOC0wNy0yNyAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZXMgZm9yIFdpbmRvd3MgYW5kIG5v
bi1BbGxJbk9uZSBmaWxlIGJ1aWxkIHdpdGggU2FtcGxpbmdUb29sLCBwbHVzIHJldmlldyBmaXhl
cy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiAgICAgICAgICAgICAgQWRkaW5nIFNhbXBs
aW5nVG9vbC5jcHAgdG8gYnVpbGQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOiAgICAg
ICAgICBFeHBvcnQgaG9va3MgdG8gaW5pdCAmIGNvbnRyb2wgU2FtcGxpbmdUb29sLgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnByaTogICAgICAgICAgQWRkaW5nIFNhbXBsaW5nVG9vbC5jcHAg
dG8gYnVpbGQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvajogQWRkaW5nIFNhbXBsaW5nVG9vbC5jcHAgdG8gYnVpbGQu
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRk
aW5nIFNhbXBsaW5nVG9vbC5jcHAgdG8gYnVpbGQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmVT
b3VyY2VzLmJrbDogICBBZGRpbmcgU2FtcGxpbmdUb29sLmNwcCB0byBidWlsZC4KKyAgICAgICAg
KiBWTS9NYWNoaW5lLmNwcDogICAgICAgICAgICAgIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ05h
dGl2ZUZ1bmN0aW9uIHJlbmFtZWQgTUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0aW9u
CisgICAgICAgICogVk0vTWFjaGluZS5oOgorICAgICAgICAqIFZNL09wY29kZS5jcHA6ICAgICAg
ICAgICAgICAgU2FtcGxpbmdUb29sIG1vdmVkIHRvIFNhbXBsaW5nVG9vbC5jcHAvLmgsIG9wY29k
ZU5hbWVzIGdlbmVyYXRlZCBmcm9tIEZPUl9FQUNIX09QQ09ERV9JRC4KKyAgICAgICAgKiBWTS9P
cGNvZGUuaDoKKyAgICAgICAgKiBWTS9TYW1wbGluZ1Rvb2wuY3BwOiAgICAgICAgIEFkZGVkIC5j
cHAvLmggZm9yIFNhbXBsaW5nVG9vbC4KKyAgICAgICAgKiBWTS9TYW1wbGluZ1Rvb2wuaDoKKyAg
ICAgICAgKiBranMvSlNHbG9iYWxEYXRhLmNwcDogICAgICAgIEZpeGVkIG1pc3NpbmcgIkFQSS8i
IGZvciB3aW5kb3dzIGJ1aWxkLgorICAgICAgICAqIGtqcy9TaGVsbC5jcHA6ICAgICAgICAgICAg
ICAgU3dpdGNoZWQgU0FNUExJTkdfVE9PTF9FTkFCTEVEIHRvIEVOQUJMRV9TQU1QTElOR19UT09M
LgorICAgICAgICAqIGtqcy9jb25maWcuaDogICAgICAgICAgICAgICAgQWRkZWQgRU5BQkxFX1NB
TVBMSU5HX1RPT0wgY29uZmlnIG9wdGlvbi4KKyAgICAgICAgKiBranMvbm9kZXMuY3BwOiAgICAg
ICAgICAgICAgIEhlYWRlciBpbmNsdWRlIHRvIGZpeCBub24tQWxsSW5PbmUgYnVpbGRzLgorCiAy
MDA4LTA3LTI1ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUlM9
Q2FtZXJvbiBad2FyaWNoLgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVTb3Vy
Y2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJj
ZXMuYmtsCShyZXZpc2lvbiAzNTM3NikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
U291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsNyBAQAogICAgICAgICBW
TS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAogICAgICAgICBWTS9NYWNoaW5lLmNwcAogICAg
ICAgICBWTS9PcGNvZGUuY3BwCisgICAgICAgIFZNL1NhbXBsaW5nVG9vbC5jcHAKICAgICAgICAg
Vk0vUmVnaXN0ZXJGaWxlLmNwcAogICAgIDwvc2V0PgogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9
IkpTQ09SRV9XVEZfU09VUkNFUyI+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCShy
ZXZpc2lvbiAzNTM3NikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaQkod29y
a2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogICAgIFZNL0pTUHJvcGVydHlOYW1lSXRlcmF0
b3IuY3BwIFwKICAgICBWTS9NYWNoaW5lLmNwcCBcCiAgICAgVk0vT3Bjb2RlLmNwcCBcCisgICAg
Vk0vU2FtcGxpbmdUb29sLmNwcCBcCiAgICAgVk0vUmVnaXN0ZXJGaWxlLmNwcAogCiAjIEFsbElu
T25lRmlsZS5jcHAgaGVscHMgZ2NjIGFuYWxpemUgYW5kIG9wdGltaXplIGNvZGUKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM1Mzc2KQorKysgSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDkgQEAK
IF9fWk4zS0pTMTJKU0dsb2JhbERhdGE2Y3JlYXRlRXYKIF9fWk4zS0pTMTJKU0dsb2JhbERhdGFE
MUV2CiBfX1pOM0tKUzEyUHJvcGVydHlTbG90MTV1bmRlZmluZWRHZXR0ZXJFUE5TXzlFeGVjU3Rh
dGVFUktOU18xMElkZW50aWZpZXJFUktTMF8KK19fWk4zS0pTMTJTYW1wbGluZ1Rvb2w0ZHVtcEVQ
TlNfOUV4ZWNTdGF0ZUUKK19fWk4zS0pTMTJTYW1wbGluZ1Rvb2w0c3RvcEV2CitfX1pOM0tKUzEy
U2FtcGxpbmdUb29sNXN0YXJ0RWoKIF9fWk4zS0pTMTJTdHJpbmdPYmplY3QxNGRlbGV0ZVByb3Bl
cnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlMxMlN0cmluZ09i
amVjdDE0dG9UaGlzSlNTdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0tKUzEyU3RyaW5nT2Jq
ZWN0MTZnZXRQcm9wZXJ0eU5hbWVzRVBOU185RXhlY1N0YXRlRVJOU18xN1Byb3BlcnR5TmFtZUFy
cmF5RQpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNTM3NikKKysrIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTc0LDYgKzc0LDggQEAKIAkJNjU5MTI2QkQwQkREMTcyODAwMTkyMUZCIC8qIEFsbElu
T25lRmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NTkxMjZCQzBCREQxNzI4MDAxOTIxRkIgLyogQWxsSW5PbmVGaWxlLmNwcCAqLzsgfTsKIAkJ
NjVERkM5MzMwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGQzkyRDA4RUExNzNBMDBGNzMwMEIg
LyogSGFzaFRhYmxlLmNwcCAqLzsgfTsKIAkJNjVGREU0OUMwQkREMUQ0QTAwRTgwMTExIC8qIEFz
c2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjVFMjE3QjgwOEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuY3BwICovOyB9OworCQk4
NjEzRjQ1QTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MTNGNDU4MEUzQTQzM0UwMEM5NDhG
RCAvKiBTYW1wbGluZ1Rvb2wuY3BwICovOyB9OworCQk4NjEzRjQ1QjBFM0E0MzNFMDBDOTQ4RkQg
LyogU2FtcGxpbmdUb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjEzRjQ1OTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmggKi87IH07
CiAJCTkwNUIwMkFFMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTA1QjAyQUQw
RTI4NjQwRjAwNkRGODgyIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgKi87IH07CiAJCTkw
RDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDM0NjlCMEUyODUyODAw
MDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA3NTRDMTA4QjBGNjgwMDBBQjMwNTYgLyog
cGNyZV9jb21waWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMDc1NEJGMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuY3BwICovOyB9
OwpAQCAtNTU1LDYgKzU1Nyw4IEBACiAJCTY1RkIzRjQ4MDlEMTFCMjQwMEY0OURFQiAvKiBncmFt
bWFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBncmFtbWFyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5
IC8qIEJvb2xlYW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQm9vbGVhbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IH07CiAJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBTY29wZUNoYWlu
TWFyay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZUNoYWluTWFyay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjEzRjQ1ODBFM0E0MzNFMDBDOTQ4RkQg
LyogU2FtcGxpbmdUb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFNhbXBsaW5nVG9vbC5jcHA7IHBhdGggPSBWTS9TYW1wbGluZ1Rvb2wuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk4NjEzRjQ1OTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdU
b29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNhbXBsaW5nVG9vbC5oOyBw
YXRoID0gVk0vU2FtcGxpbmdUb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkw
NUIwMkFEMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmQ291bnRlZExlYWtDb3VudGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTBEMzQ2OUIwRTI4NTI4MDAwOTQ5MkVF
IC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWZDb3VudGVkTGVha0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8qIE93blB0ci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPd25QdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTk2MSw2ICs5NjUsOCBAQAogCQkxNDlCMTVFMDBEODFGODhEMDA5Q0I4QzcgLyogdm0gKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTg2MTNGNDU4MEUzQTQz
M0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuY3BwICovLAorCQkJCTg2MTNGNDU5MEUzQTQzM0Uw
MEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuaCAqLywKIAkJCQkxNDlCMUE5RTBEODZFRDczMDA5Q0I4
QzcgLyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQkxNDlCMUE5RDBEODZFRDczMDA5Q0I4QzcgLyog
Q29kZUJsb2NrLmggKi8sCiAJCQkJQTcyNzAxQjQwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlv
bkhlbHBlcnMuY3BwICovLApAQCAtMTUwOCw2ICsxNTE0LDcgQEAKIAkJCQlCQzc1NkZDOTBFMjAz
MUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRjYwNTE0MEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NUZERkExNjBFMjI5OTk4MDAwNkZCMDAgLyogSGVhdnlQcm9maWxlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk4NjEzRjQ1QjBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTE4MTEsNiArMTgxOCw3IEBACiAJCQkJOTVDRDQ1NzYwRTFDNEZERDAw
ODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGREZB
MTQwRTIyOTk4RjAwMDZGQjAwIC8qIEhlYXZ5UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MDVCMDJBRTBFMjg2NDBGMDA2REY4ODIgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTg2MTNGNDVBMEUzQTQzM0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rv
b2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>